Step 6 — Soundtrack
Status: ✅ Live (Chapter XVI)
Status transition: effects_applied → soundtrack_ready
One ambient track per episode generated via ACE-Step local AI music server. Mood is written manually or synthesised by Gemini from all scene mood_brief values. Target duration set via Loop Length control (default 45s). Looped to full episode length at merge time.
Controls
| Control | Default | Description |
|---|---|---|
| TEMP | 0.8 | ACE-Step LM temperature (0.1–2.0). Higher = more creative/varied. |
| BPM | 60 | Beats per minute passed to ACE-Step |
| KEY | C minor | Musical key passed to ACE-Step |
| LOOP LENGTH | 45s | Duration of generated clip in seconds |
Takes System
Each generation creates a numbered take file (ambient_NNN_take_NNN.wav). Takes accumulate until approval.
On approval:
- Current take renamed to ambient_{episode_number:03d}_v{version:03d}.wav
- All non-approved takes deleted (files + DB records)
- Episode advances to soundtrack_ready
Takes picker: Dropdown shows all takes for the episode. Select a take to preview it in the audio player. Click Duplicate to copy a take's file and settings — creates a new take ready for tweaking or immediate approval.
Prompt
The Ambient Music Mood textarea holds the prompt sent to ACE-Step. Write it directly or click Synthesise from Scenes to generate from scene mood briefs. Best results: describe the scene emotionally ("dying space station, emergency lighting flickers, slow horror score") rather than sound design terms.
ACE-Step Server
Hardware: ACE-Step turbo model on RTX 5070. Start via start_server.bat in 09_ACEStep_Server.
Locked params: lm_temperature=0.8, lm_top_p=0.95, negative prompt blocking upbeat/energetic terms.
Output: media/studio/audio/ambient_{episode_id:03d}_take_{n:03d}.wav (takes) / ambient_{episode_number:03d}_v{version:03d}.wav (approved)
Services:
- studio/mood.py — synthesise_episode_mood(scenes)
- studio/music_gen.py — generate_ambient(mood, output_path, bpm, key_scale, duration, api_url, temperature)
- studio/service.py — run_soundtrack, regenerate_soundtrack, approve_soundtrack, duplicate_take