Skip to content

feat/phase4-features-and-polish - #120

Merged
TwDover merged 1 commit into
mainfrom
feat/phase4-features-and-polish
Jul 29, 2026
Merged

feat/phase4-features-and-polish#120
TwDover merged 1 commit into
mainfrom
feat/phase4-features-and-polish

Conversation

@TwDover

@TwDover TwDover commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Phase 4 — features & polish

Completes Phase 4 of the roadmap, plus two UX fixes surfaced during
ear-validation. All backend (223) and frontend (123) tests green; 4/4 and
default-song output stay byte-identical.

Tempo automation (roadmap item)

  • New tempo_automation knob (0–1) scales the song tempo map — chorus push,
    pre-chorus lean, ending ritardando — via m = intensity/0.5: 0 = flat,
    0.5 = the classic subtle default (byte-identical), 1 = expressive.
  • "Tempo motion" control (Off / Subtle / Expressive) on the song form; threaded
    through build + melody-upload + every regen/replay path and persisted in
    song_meta.json so re-rolls stay sample-locked. (Mid-song key modulation —
    chorus/bridge/final-chorus shifts — was already shipped.)

Progression picker (bonus)

  • Unified "Progression" control: style default (auto), the style's own templates
    (roman numerals + resolved chords), a saved library, or free-text custom —
    consolidating the old Advanced-only field.
  • Saved progressions are their own localStorage library, reusable across any
    style/key. list_styles/StyleInfo now expose progression_templates.

Surface WAV/offline export (roadmap item)

  • Split the crowded action row into a labelled Export group separating Audio
    (⏬ WAV / ⏬ Stems (WAV), accent-styled) from MIDI (ZIP downloads), so
    audio export reads as a first-class action instead of a cryptic .

Loop playback (bonus)

  • Loop-mode clips now auto-loop on play; songs/arrangements play through.
    toggle() takes a loop hint threaded via ExportPanel (mode) and SongResult.

Idiomatic non-4/4 drums + meta fix

  • Compound/odd feel: snare backbone on felt pulses, compound meters ride an
    eighth grid grouped in threes. 4/4 stays byte-identical.
  • Fix: loop routes now pass meter to write_midi/write_combined_midi, so
    the .mid time_signature meta matches the request instead of always 4/4.

Priors toggle (roadmap item)

  • The "Use my local MIDI corpus" toggle always renders now (disabled with a
    hint when no prior exists) instead of self-hiding.

@TwDover
TwDover merged commit 882872e into main Jul 29, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant