YuE2 Cover Studio · 3 validate & apply
Nothing reaches YuE2 unvalidated
- cover_abc
- studio_report_json
- warnings
- locked_lyrics
Most "let the LLM edit the thing" features in this ecosystem end with somebody eyeballing the output and hoping. This node is the opposite: it's the bouncer. Whatever the Cover Studio's language models produce, this is where it gets checked against a real notation dialect and a profile you set, and where it gets thrown out if it doesn't hold up.
That makes it the most important node in the studio to understand, because it decides what actually reaches the music model.
The order of work
1. The exact knobs go first. key_change transposes, tempo_change rewrites the tempo field, melody_only removes the quoted chord symbols. These are deterministic, not model-generated - and each rewrite is checked against the native ABC structure. A knob that can't be applied is reported and skipped rather than producing a broken score. So a key shift that would break the notation costs you the shift, not the run.
2. The model's answer, if there is one. The JSON is parsed, the ABC extracted, then structurally validated - headers, fences, prose, empty voice blocks, dialect - and compared against the score the model actually received. A model that returns a different tune than the one it was given is the failure mode this catches.
3. The guard. When the profile pins structure or tempo, a model score that changed the bar/meter grid or the tempo is rejected. At the faithful end of the slider, that extends to melody and chords: with no variation allowed, a score that rewrites a single note or chord is rejected. That's how Interpretation Freedom 0 gets to be a promise instead of a slogan - you literally get the source score back.
4. Repair, once. An optional second answer is consulted only when the first failed, and it passes exactly the same validation. No second chances after a second failure.
5. Fallback. If nothing valid remains, the validated deterministic result is used. The toolkit calls this "a bad model answer costs reinterpretation, not the run", which is a fair description: your model's creativity is what you lose, not the render.
Inputs
studio_json is required - the accumulated state from steps 1 and 2, and it's what decides the permitted operations.
transform_text is the model's rewritten score from step 2's chat node. repair_text is the optional second answer. enabled off returns the incoming score byte for byte.
cover_abc is the optional input that earns its keep in an emergency: it's the raw SheetSage2 score, wired in as a safety net so that bypassing, muting or losing the studio nodes degrades to the untouched score instead of handing an empty ABC down the chain and killing the run. If you're building this graph yourself, wire it.
Outputs
cover_abc replaces the score in the existing cover chain - this is the one the music generation actually sees.
studio_report_json is the interesting one: profile, plan, applied changes, warnings, the measured lyrics/melody fit, and with advanced_mode on, the final score. It also records the contradiction warnings carried over from the plan stage, so a plan that promised something the profile forbade shows up here rather than vanishing.
warnings is a flat string for eyeballing without parsing JSON. When a cover sounds wrong, this is the first socket to read.
locked_lyrics carries the verbatim words when the lyrics policy asked for them, and is empty otherwise. Connect it to the parser's cover_lyrics_lock input - that's the one wire the studio contributes to the words.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/ComfyUI-MiniMax-Music-Production-Toolkit.git
cd ComfyUI-MiniMax-Music-Production-Toolkit
python -m pip install -r requirements.txt
Restart ComfyUI and refresh the browser afterwards, then reopen the bundled Music_Production_Toolkit.json. The studio is optional and off the critical path - the ordinary YuE2 Cover chain works without it, and this node passes the score straight through when the studio is disabled.
Where it goes wrong
You switched the studio off and expected it to still work. Disabled returns the incoming score unchanged, which is intentional, and the report says so. If a studio edit vanished, check enabled on all three nodes - the same value exists on each.
You bypassed nodes 1 and 2 with Ctrl+B. That's supported, and the chain keeps running on the untouched score thanks to the cover_abc safety net. If it breaks instead, that wire is missing.
The model keeps getting rejected. Read warnings and the report, not the LLM's output. Nine times out of ten the model rewrote something the profile pinned - which is the guard doing its job, and the fix is either fewer pinned elements or a different model, not a different graph.
A locked lyric block that doesn't sing well. The report includes the lyrics/melody fit precisely so a text you locked onto a heavily reworked melody shows up as a problem instead of as a mystery. Adjust the words, or lower the freedom and let the melody follow the words.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| studio_json | STRING | Cover Studio state passed between the studio nodes. It carries the profile, the plan, the source score and the warnings so each step stays inspectable. | |
| transform_textopt | STRING | Answer of the transformation LLM call, expected as a JSON object with the keys abc, changes and warnings. Invalid scores are rejected and replaced by the validated deterministic result. | |
| repair_textopt | STRING | Optional answer of one repair attempt. It is only consulted when the first transformation answer failed validation, and it is validated the same way. | |
| cover_abcopt | STRING | SheetSage2 score of the source audio. The Cover Studio validates and transforms a copy; the original stays untouched in the graph. | |
| enabledopt | BOOLEAN | true | Turn the whole Cover Studio path on or off. Disabled, the incoming score is passed through byte for byte, so an existing workflow keeps behaving exactly as before. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| cover_abc | STRING | — |
| studio_report_json | STRING | — |
| warnings | STRING | — |
| locked_lyrics | STRING | — |