- Voice duration split equally — every BGM trimmed to a fixed slot regardless of natural length
- A 60s BGM could be cut to 40s if the equal split demanded it
- Every BGM plays at its full natural length — no trimming on non-final BGMs
- BGM 1 full, BGM 2 full, BGM 3 full — remaining gap filled after all play
- No gap detection — last user BGM looped on repeat to cover remaining silence
- General category BGMs were never pulled in automatically
- Gap calculated after all user BGMs finish — General BGMs auto-loaded to cover it
- Multiple General BGMs chained in sequence until the full gap is closed
- Final BGM trimmed exactly to remaining voice duration — music stops when wish ends
- Abrupt cut if the BGM was shorter than its remaining slot
- Final BGM plays remaining time plus a 5–8s cinematic tail with natural fade-out
- If BGM is shorter than target, loop_to_length fills the rest seamlessly
- General BGMs bypassed the cooldown system — same tracks reused every mix
- Download only froze mood BGMs; General fillers were never tracked
- Mood BGMs and General BGMs follow identical freeze and cooldown rules
- Download freezes every BGM used — mood picks and General fillers together
- No fallback defined — all General BGMs frozen could produce silence or a crash
- Edge case was unhandled with no recovery path
- If all General BGMs are frozen, last user BGM loops via loop_to_length to fill the gap
- No silence, no crash — system always produces a complete output