Nodes/Music Production Toolkit/YuE2 Cover Studio · 1 plan
ComfyUI Node

YuE2 Cover Studio · 1 plan

One slider, five real settings behind it

By jplenio·Created 19 days ago·Updated a day ago· 55
YuE2 Cover Studio · 1 plan
    • system_prompt
    • user_prompt
    • studio_json
    cover_source_json
    cover_abc
    interpretation_freedom30
    target_style
    enabledtrue
    advanced_modefalse
    cover_lyrics
    preserve_main_melodyauto
    preserve_chorus_hookauto
    preserve_structureauto
    preserve_harmonyauto
    preserve_tempoauto
    preserve_keyauto
    melody_onlyauto
    melody_variationauto
    rhythm_variationauto
    harmony_freedomauto
    structure_freedomauto
    key_change0
    tempo_change0
    vocal_rangeauto
    lyrics_policyauto (mode decides)
    supplied_lyrics

    Covers have a control problem: "make it a bossa nova version" is a wish, not a parameter, and the model underneath - YuE2 - has no dial labelled how much of the original survives. So the toolkit invented one and did the unglamorous work of making it real. This node is step 1 of the Cover Studio: it turns a single 0–100 slider into a structured profile and writes the planning prompt for an LLM.

    First thing to get straight: Interpretation Freedom is a toolkit abstraction, not a YuE2 parameter. Nothing is forwarded to the engine as a number. What happens instead is that the value selects what's preserved and what may be reworked, and the later stages realise that in operations YuE2 actually understands - a transposed key, a rewritten tempo field, a chord-free melody line, and explicit instructions.

    What the slider actually buys

    The bands, from the pack's own guide:

    | Freedom | Band | Keeps | May change | | --- | --- | --- | --- | | 0–20 | Faithful cover | melody, structure, harmony, tempo, key, hooks | instruments, sound, vocal timbre | | 21–40 | Arrangement cover | melody, hook, structure, basic tempo | harmony, arrangement, instrumentation | | 41–60 | Reinterpretation | central melodies, hooks, rough structure | harmony, tempo, key, rhythm | | 61–80 | Creative reinterpretation | hook, key motifs, characteristic phrases | melody shape, section length, harmony | | 81–95 | Loose adaptation | selected motifs, basic dramaturgy | almost everything else | | 96–100 | Inspired recomposition | key, tempo, structure, character | compose rather than reproduce |

    The weights interpolate between band boundaries, so every integer gives you a different profile. Default is 30.

    Two things keep this from being decoration. Explicit settings always win: every preserve_* widget and melody_only is tri-state - auto takes the slider's value, yes pins the element, no releases it - and the degree widgets (melody_variation, rhythm_variation, harmony_freedom, structure_freedom) work the same way with none/low/moderate/high. And only real operations move: key_change transposes by ±12 semitones, tempo_change rewrites the Q: field by ±50%, and melody_only strips the quoted chord symbols.

    One deliberate exception: melody_only follows the decode mode, not the slider. A full cover promises melody and harmony, so it keeps its chords at any freedom value; asking for melody_only = yes there is refused with an explanation instead of silently handing the engine a harmony score with no harmony in it.

    The rest of the inputs

    cover_source_json and cover_abc are required wiring - the cover source identity and the SheetSage2 score - and the node never edits that score, it passes the original through in its state.

    target_style is the hint for how the material gets reworked. Empty means no hint, not "follow the source". Do not wire the song request node in here: it consumes the studio's rewritten score, so it's downstream, and the link is a cycle. That's what Style hint · template or text exists for.

    cover_lyrics takes the Whisper report if you have one, so the studio can flag words that no longer fit the melodic material before a render is spent. It never changes the words.

    Then the lyrics lock. lyrics_policy is auto (mode decides) - the normal case, where Song request and Whisper own the words - or keep source words / keep supplied words, which lock the Whisper transcription verbatim or the text in supplied_lyrics. Write supplied lyrics with the same section tags as the arrangement; nothing is rewritten or syllable-aligned for you. Impossible combinations are refused rather than guessed: an instrumental cover has no words to keep, and original lyrics already owns its words.

    vocal_range (from auto up through Low male, Baritone, Tenor, Alto, Mezzo-soprano, Soprano) is a request to the model, not an enforced constraint - the report says as much. advanced_mode only widens the debug report; it never changes what gets applied.

    The outputs: system_prompt and user_prompt go into an LLM Chat node for the plan call, and studio_json carries the profile, the analysed score, the overrides and the original ABC to step 2.

    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, refresh the browser, then reopen the bundled Music_Production_Toolkit.json - the studio path is optional and only exists in that graph. The whole cover chain needs SheetSage2 weights (about 1.39 GB) and a ComfyUI build with the native audio-encoder nodes; the model check node can fetch SheetSage2 when sheetsage2_models and auto_download are on.

    Where people get stuck

    Dependency cycle detected is the classic first-day error, and it means you wired the song request node into target_style. Use the style hint node instead.

    The slider isn't doing what it says. Check whether an override is pinned: auto is the only value that lets the slider through, and the report lists which overrides were live. Also remember the freedom permissions apply to the source material only - a higher value never means less of your requested style.

    A faithful cover that isn't. Freedom 0 is enforced rather than promised - a model score that rewrites a note, chord, bar or tempo gets rejected in step 3, so you really do get the source score back.

    There's essentially no community footprint for this pack, so calibration comes from the project's demo gallery: 35 rendered tracks with the settings behind each one.

    CategoryMiniMax Music Production Toolkit/generation

    Inputs (23)

    NameTypeDefaultDescription
    cover_source_jsonSTRINGCover source identity from Cover song / Source audio. It selects the cover mode and is required before the studio does anything.
    cover_abcSTRINGSheetSage2 score of the source audio. The Cover Studio validates and transforms a copy; the original stays untouched in the graph.
    interpretation_freedomINT300–100Toolkit abstraction, not a YuE2 parameter: 0 keeps the song as faithful as possible, 100 uses it only as a compositional reference. The slider drives several real settings at once (what is preserved, what may be reworked).
    target_styleSTRINGHint for how the studio should rework the source material toward the requested style - it is NOT the style source. What the track sounds like is set by 'Song request · template & fields' (its template, fields and description), and that request's STYLE PRIORITY rule is forwarded to the model unchanged. Left empty there is simply no extra hint; filling it only guides the score rework and must never contradict the song request. Do NOT wire the song request node into this field: it consumes this studio's rewritten score, so it sits downstream of the studio and a link from it back into the studio is a dependency cycle that makes ComfyUI reject the whole prompt ('Dependency cycle detected'). Connect the 'Style hint · template or text' node here instead - it reads the same template from outside the studio's chain - or type the hint, or leave it empty. The studio prompts already state that the requested style is fixed by the song request and is not theirs to change.
    enabledoptBOOLEANtrueTurn 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.
    advanced_modeoptBOOLEANfalseOff keeps the debug report concise. On adds the full transformation request and a per-knob breakdown. It never changes which values are applied.
    cover_lyricsoptSTRINGOptional transcription of the original words (the Whisper report). The studio uses it to report how well the words fit the melodic material before a render is spent; it never changes the words themselves. Which words are sung is decided by the cover lyrics mode, and the master node (Song request) carries that decision.
    preserve_main_melodyoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    preserve_chorus_hookoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    preserve_structureoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    preserve_harmonyoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    preserve_tempooptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    preserve_keyoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the value the Interpretation Freedom slider produced; 'yes' pins the element to be preserved; 'no' releases it explicitly.
    melody_onlyoptCOMBOautoExplicit user decision that always wins over the automatic profile. Selecting yes produces the chord-free melody line a melody-mode cover expects; auto follows the slider.
    melody_variationoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the Interpretation Freedom value; otherwise none/low/moderate/high set how far this element may be reworked.
    rhythm_variationoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the Interpretation Freedom value; otherwise none/low/moderate/high set how far this element may be reworked.
    harmony_freedomoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the Interpretation Freedom value; otherwise none/low/moderate/high set how far this element may be reworked.
    structure_freedomoptCOMBOautoExplicit user decision that always wins over the automatic profile. 'auto' uses the Interpretation Freedom value; otherwise none/low/moderate/high set how far this element may be reworked.
    key_changeoptINT0-12–12Deterministic transposition in semitones, applied exactly and re-spelled against the target key. 0 leaves the key alone.
    tempo_changeoptINT0-50–50Relative tempo change in percent, applied exactly by rewriting the Q: field. 0 leaves the tempo alone.
    vocal_rangeoptCOMBOautoRequested singing range for the melody. It is a request to the model, not an enforced constraint; the report says so.
    lyrics_policyoptCOMBOauto (mode decides)What happens to the words, independent of the Interpretation Freedom slider. auto lets the cover lyrics mode decide (the normal case, and the only one where the words come from Song request / Whisper); 'keep source words' locks the transcription verbatim; 'keep supplied words' locks the text in supplied_lyrics. These two are the only way the studio contributes words, so the impossible combinations are refused instead of guessed: an instrumental cover has no words to keep, and 'original lyrics' owns its words from the transcription. The locked block leaves the studio on the locked_lyrics output and reaches the parser by wire.
    supplied_lyricsoptSTRINGThe words to keep when lyrics_policy is 'keep supplied words'. They replace the LLM's words verbatim in the parser, so they win over the template's lyrics theme and over any model draft. They cannot create words where the mode forbids them: with 'instrumental' nothing is sung (the parser strips words from a cover even if a lock arrives), and with 'original lyrics' the transcription is authoritative - the studio refuses that combination. Write them with the same section tags as the arrangement, because nothing is rewritten or syllable-aligned here.

    Outputs (3)

    NameTypeDescription
    system_promptSTRING
    user_promptSTRING
    studio_jsonSTRING