Experience tuning: mood-through-morphs fix, auto-advance, label wrap, binaural candidates #33

Merged
benstull merged 10 commits from feat/experience-tuning into main 2026-07-03 01:00:22 +00:00
Owner

Summary

Four items from the testing pass:

1. fix(mood): Dark/Light grade now rides through altitude morphs

The mood grade was dropped while a morph played (busy) — the WebGL canvas set filter none and the fallback set #vid filter none on morph load, so the transition showed ungraded and the grade snapped back only on landing. Now the grade rides through on both paths (the painterly dream stays off mid-morph, as before, to keep it crisp).

2. feat(altitude): auto-advance one altitude per minute when idle

After 60s idle the altitude drifts one step deeper (descend; wraps past the deepest back to the top). Any manual interaction (drag/wheel/arrow/knob) restarts the countdown; a mid-morph/mid-drag beat is skipped and retried. Default-on Auto-advance toggle in the Altitude panel. Interval injectable for tests.

3. fix(ui): "Video speed" label no longer wraps

Panel widened 280→300px; control labels kept on one line; range allowed to shrink.

4. docs(audio): binaural stress-relief candidate pool + review page

11 CC0 stereo binaural/entrainment candidates (verified on freesound) for evolving the Music option into a crossfading stress-relief set. Durable record in docs/binaural-candidate-pool.md; interactive audition gallery simulator/static/review_binaural.html (gitignored local-only) — streams the CC0 previews, tick-to-keep + Copy picks.

Tests

  • 38 node unit + 42 e2e green (3 new specs: mood-grade, panel-layout, auto-advance). The 2 static-build specs are unaffected (they run under playwright.static.config.ts, not the dev server).

Operator review

  • Audition the binaural candidates: run the sim server → http://127.0.0.1:8099/review_binaural.html (headphones for #1–7). Tick keepers, Copy picks, tell me which to wire.
  • Eyeball: Dark Mood now holds through a morph; the 60s auto-advance feel; the Speed label on one line.
  • Then merge + Cloudflare redeploy at your cadence.

🤖 Generated with Claude Code

## Summary Four items from the testing pass: ### 1. fix(mood): Dark/Light grade now rides through altitude morphs The mood grade was dropped while a morph played (`busy`) — the WebGL canvas set filter `none` and the fallback set `#vid` filter `none` on morph load, so the transition showed ungraded and the grade snapped back only on landing. Now the grade rides through on both paths (the painterly *dream* stays off mid-morph, as before, to keep it crisp). ### 2. feat(altitude): auto-advance one altitude per minute when idle After 60s idle the altitude drifts one step deeper (descend; wraps past the deepest back to the top). Any manual interaction (drag/wheel/arrow/knob) restarts the countdown; a mid-morph/mid-drag beat is skipped and retried. Default-on **Auto-advance** toggle in the Altitude panel. Interval injectable for tests. ### 3. fix(ui): "Video speed" label no longer wraps Panel widened 280→300px; control labels kept on one line; range allowed to shrink. ### 4. docs(audio): binaural stress-relief candidate pool + review page 11 **CC0** stereo binaural/entrainment candidates (verified on freesound) for evolving the Music option into a crossfading stress-relief set. Durable record in `docs/binaural-candidate-pool.md`; interactive audition gallery `simulator/static/review_binaural.html` (gitignored local-only) — streams the CC0 previews, tick-to-keep + Copy picks. ## Tests - 38 node unit + 42 e2e green (3 new specs: mood-grade, panel-layout, auto-advance). The 2 `static-build` specs are unaffected (they run under `playwright.static.config.ts`, not the dev server). ## Operator review - **Audition** the binaural candidates: run the sim server → http://127.0.0.1:8099/review_binaural.html (headphones for #1–7). Tick keepers, Copy picks, tell me which to wire. - Eyeball: Dark Mood now holds through a morph; the 60s auto-advance feel; the Speed label on one line. - Then merge + Cloudflare redeploy at your cadence. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
benstull added 4 commits 2026-07-02 12:52:12 +00:00
The mood grade was dropped while a morph played (busy): the WebGL canvas set
filter 'none' and the fallback set #vid's filter 'none' on morph load, so the
transition showed ungraded and the grade snapped back only on landing. Now the
grade rides through the morph on both paths (the painterly DREAM stays off mid-
morph, as before, to keep it crisp). +1 e2e (mood-grade.spec.ts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Widen the panel (280->300px), keep control labels on one line (white-space:
nowrap), and let the range shrink (min-width:0) instead of pushing the label
to a second row. +1 e2e (panel-layout.spec.ts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
After the dial sits idle for 60s the altitude drifts one step deeper (descend;
wraps past the deepest back to the top), like a slow kiosk tour. Any manual
interaction (drag/wheel/arrow-key/knob) restarts the idle countdown; a mid-morph
or mid-drag beat is skipped and retried. A default-on 'Auto-advance' toggle in
the Altitude panel disables it. Interval is injectable for tests via
window.__hefAutoAdvanceMs. i18n for 4 langs. +3 e2e (auto-advance.spec.ts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 CC0 stereo binaural/entrainment candidates (verified on freesound) for
evolving the Music option into a crossfading stress-relief set. Durable record
in docs/binaural-candidate-pool.md; interactive audition gallery at
simulator/static/review_binaural.html (gitignored local-only, like the other
review galleries — streams the CC0 previews, tick-to-keep + copy picks).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull added 1 commit 2026-07-02 13:43:11 +00:00
11 more candidates for the 'not boring' end: MANTICE Sacred Drone series
(bassimat, CC0 — evolving composed ambient, binaural-capable via the generator
but not certified per render), HoliznaCC0 long-form ambient music (FMA, CC0, no
binaural), and shagrugge (ccMixter, CC BY, binaural-filtered vocals). Notes the
CC BY-SA 'Hang Binaural' opt-in (best musical+confirmed-binaural fit, outside the
CC0/CC-BY rule) and the NC drops. review_binaural.html now groups all 22 into
Musical / True-binaural / Ambient sections with honest binaural-status badges.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull added 1 commit 2026-07-02 21:20:40 +00:00
Operator dropped binaural. New direction: mellow, soothing synth with real chord
movement. docs/music-candidate-pool.md = 12 ranked + spares, all CC0 (HoliznaCC0
lo-fi) or CC BY (Kevin MacLeod calming synth), verified live. Local review gallery
simulator/static/review_music.html (gitignored). Binaural doc parked with a pointer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull added 1 commit 2026-07-02 22:32:33 +00:00
Operator kept Dream Culture + Silver Blue Light, rejected the rest (boring or
too much snare). Round-4 = 12 Kevin MacLeod CC-BY tracks, drumless confirmed
from his pieces.json instrument metadata, ranked by chord movement (best:
Impact Lento, Dreams Become Real, Aretes, When The Wind Blows, Reawakening,
Almost New). Lo-fi dropped. review_music.html rebuilt as the drumless cut.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull added 2 commits 2026-07-02 23:22:42 +00:00
?audio=none|soundtrack|music (and ?vol=0..10) presets the Audio source/volume on
load, so a link opens straight into a chosen sound mode — e.g. share …/?audio=music
with someone who'd prefer music, …/?audio=soundtrack for the ambience. Invalid
values ignored (default Soundtrack stands). +5 e2e (url-params.spec.ts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the single ethereal loop with the operator's chosen set — Music for
Manatees, Dewdrop Fantasy, Eastminster, Overheat, Concentration (Kevin MacLeod,
CC BY 4.0, drumless). The Music source now plays one track and every 5 min
crossfades to a random OTHER track (pure HEFScrub.pickNextIndex, never an
immediate repeat), altitude-independent, reusing the two audio elements; both
primed in-gesture for Safari. Intervals injectable via window.__hefMusicRotateMs
/ __hefMusicXfadeMs.

Media loudness-normalized + transcoded under the 25MB LFS limit (build_audio_media
MUSIC), committed via LFS; ethereal loop retired. CC-BY attribution added to
credits.html. Docs updated (music-candidate-pool = final set; audio-candidate-pool
ethereal section superseded).

+2 node unit (pickNextIndex), +2 e2e (music-playlist), audio-source spec updated.
40 unit + 49 e2e green; live probe confirms playback + rotation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull added 1 commit 2026-07-02 23:56:27 +00:00
The opening screen only had Volume + Video speed — no way to pick the sound mode
before launching. Add a welcome Audio dropdown (None/Soundtrack/Music) mirroring
the panel; applyWelcomeToPanel carries the choice into the session on launch, None
greys the welcome Volume, and ?audio= presets it on the welcome screen too. +4 e2e
(welcome-audio.spec.ts).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
benstull merged commit 04c8855ddc into main 2026-07-03 01:00:22 +00:00
Sign in to join this conversation.