Music generation

local-suno

In prod ACE-Step 1.5RVCDemucs

What it is

Lyrics → song → cloned voice → master: ACE-Step 1.5 (MLX), Demucs separation, RVC conversion, lookahead limiter. Asks the gateway to free RAM before running.

The architect's call

Counter-intuitive finding: forcing constrained decoding on lyrics generation broke it. The schema was unbounded everywhere (open objects and lists) — under hard constraint the model has no reason to stop and loops to the ceiling: 8,192 tokens, 140 s, truncated JSON. Unconstrained: 708 tokens, 13.8 s, valid JSON. Rule kept and locked by a test: constrained decoding does not compensate for an unbounded schema. Master measured at −14.6 LUFS, −1.0 dBTP peak. 813 tests, 134 commits.

What went wrong

Constrained decoding broke lyrics generation. This is the most useful counter-example I have measured. Forcing structured output was meant to make the format reliable; the result was the opposite: 8,192 tokens, 140 seconds, truncated JSON. Unconstrained: 708 tokens, 13.8 seconds, valid JSON.

The cause was not the tool but the schema — unbounded, open objects and lists. Under a hard constraint the model has no reason to stop and loops to the ceiling. Rule kept and locked by a test: constrained decoding does not compensate for an unbounded schema, it amplifies it.

Durations quoted warm. The pipeline answered in 5 to 7 seconds — with the model already loaded. On the first call after eviction, expect roughly two minutes. Quoting the warm figure was the surest way to disappoint: timeouts and UI must be sized on the cold one.

The figures

813tests
−14,6 LUFSmeasured master, −1.0 dBTP peak
708tokens unconstrained, versus 8,192 constrained
13,8 sversus 140 s

The code

Private repository — walkthrough over a call

Capabilities engaged

Related projects

Your data cannot leave the building?

That is precisely the problem I solve. A 30-minute call is enough to scope an audit.