Consolidate the triplicated audio pipeline into one engine in hyperframes-media
so workflows consume it instead of vendoring copies.
- engine: scripts/audio.mjs reads a neutral audio_request.json, writes id-keyed
audio_meta.json. Three capabilities degrade on ONE switch (HeyGen credential
present?): TTS HeyGen REST -> ElevenLabs -> Kokoro; BGM retrieve ->
Lyria/MusicGen generate; SFX retrieve (min_score 0.4) -> bundled 21-file
library. lib/{heygen,tts,bgm,sfx}.mjs; --only subset+merge; detached BGM via
wait-bgm.mjs; heygen-tts.mjs now wraps lib/tts.
- product-launch: scripts/audio.mjs is now a thin storyboard->request adapter
that maps the engine's meta back to the frame-keyed shape captions/assemble
consume; sync-durations kept; vendored lib/heygen.mjs moved into the engine.
- general-video: SKILL.md routes audio to the engine with a minimal request example.
- docs: media SKILL.md + references/{bgm,sfx}.md rewritten -- engine is the
single source, SFX bundled library is first-class, reference impl points here.
Not migrated yet: pr-to-video, faceless-explainer (still vendored).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>