Skip to content

feat/phase3-perf-and-refactor - #115

Merged
TwDover merged 1 commit into
mainfrom
feat/phase3-perf-and-refactor
Jul 28, 2026
Merged

feat/phase3-perf-and-refactor#115
TwDover merged 1 commit into
mainfrom
feat/phase3-perf-and-refactor

Conversation

@TwDover

@TwDover TwDover commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Phase 3: parallel WAV export, route→services split, deprecation/logging cleanup

Performance & refactor pass on Phase 3 of the roadmap.

WAV export (the real "1–2 min" wait — generation is only ~0.5s):

  • offlineRender now renders each part on its own OfflineAudioContext
    concurrently (Chromium runs them on separate threads — ~2.48x on 8 cores),
    sums them, and applies the master limiter once in a raw-WaveShaper pass that
    reproduces makeMasterLimiter bit-for-bit. Output is mathematically identical
    to the old single-pass mix. New offlineMix.test.ts covers the sum logic.
  • Auto-pause live playback while a WAV export runs: the render walks the
    timeline on the main thread and starved the Transport scheduler, freezing
    playback mid-export. MIDI export was never affected.

Route god-files split into services/ (handlers now thin, verified by 135 tests):

  • generation core (_run_attempt, progression choice, style blend/groove
    overlay, voice-leading + quality helpers) -> services/generation.py
  • song arrangement engine (_generate_song_sections + helpers, combined-MIDI
    writer, bridge-escape) -> services/song_builder.py
  • routes_generate.py 1299->636, routes_song.py 1498->889; removes the
    route->route generation import (both files now depend on the service).

Cleanups:

  • Deprecation warnings: test dep httpx -> httpx2 (Starlette TestClient);
    Electron console-message rewritten for the 36+ single-details signature.
  • Logged 6 genuine silent-fault except blocks (record_export_keep, malformed
    priors, style-load for track names, ...); by-design fallbacks left as-is.

Also retired the obsolete "parallelize section generation" roadmap item
(measurement showed generation is ~0.5s, not the bottleneck) and added a
Chromium-over-CDP render benchmark (frontend/scripts/bench_render.mjs).

Tests: backend 135 green + ruff clean; frontend 92->96 green + vue-tsc/eslint clean.

@TwDover
TwDover merged commit 62d594b into main Jul 28, 2026
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