ComfyUI Node
Satyr Score (Plan β Plan) π
Checks a YuE2 plan against the lyrics and reports what it will actually do with them. It matches each lyric block to the section that carries it β by note and syllable counts, because the model merges blocks and inserts wordless sections, so pairing them in order gets nearly every one wrong β then says which block is short of notes and which will not be sung at all. Both editing switches are off by default: how many singers a song has is decided by the style string, not by anything in the plan, and cutting notes to fit the words stretches the ones that remain. Read the report before rendering; most of what goes wrong with a plan cannot be edited out, only caught early.
Satyr Score (Plan β Plan) π
- voice_1
- voice_2
- abc
- lyrics
- report
βabcββΊ
βlyricsββΊ
βrecastfalseβΊ
βrefitfalseβΊ
βkeep_markerstrueβΊ
βverbosetrueβΊ
CategoryKinburg-Nodes/Bestiary/Satyr
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| abc | STRING | The plan, from 'YuE2 Generate ABC' or pasted in by hand. It is read, not trusted: the header gives the meter, unit and tempo, and everything below is indexed by section and phrase. Lines this node does not decide to change come back byte for byte, so a diff of a run shows the phrases that moved and nothing else. | |
| lyrics | STRING | The lyrics with '[Verse 1 - Keen Burg]' style markers β the same format Siren Score reads. The section name comes FIRST, then the member's name. A bracketed line that NAMES a member inside a section starts an exchange from that point, and a line wholly in ROUND brackets is a backing vocal: it gets a phrase of its own in the OTHER singer's register, which is how the model writes one when it bothers to. Wire the 'lyrics' OUTPUT of this node into YuE2. By default it is this text unchanged: the markers are worth keeping, because the model takes the performance from them. | |
| recast | BOOLEAN | false | Correct a section whose register contradicts its marker. OFF by default, because register turned out not to be a control. The experiment behind it is real: one chorus moved down an octave came back sung by the other singer, at a fixed seed. Every attempt to use that as a lever since has failed, and the style string is why. A style naming no voices is sung by one singer from beginning to end however the plan is written; a style naming two produces two, wherever the model cares to put them. Two plans measured five semitones apart, one sung by two voices and one by one β what differed was the style, not the plan. So turning this on is an experiment, not a fix. It moves whole sections only, by whole octaves only, and takes the move back if it narrows the gap between the registers. |
| refit | BOOLEAN | false | Cut each phrase to as many notes as its words have syllables. OFF by default, and the default is the recommendation. The idea is sound β the plan's note count really is the syllable budget, a measured chorus of 47 syllables had been written 47 notes β but the edit is not. Removing a note conserves the bar it lives in, so it does not free time, it STRETCHES the notes that remain: a real run lost 96 notes, pushed the vocal line from 50% silence to 57%, and came back sounding like the singer was labouring through it. What the model itself does is sing a line at a natural rate and rest the remainder of the bar. Until this works the same way, leave it off and shorten the song by cutting bars instead. It is kept for the case where a phrase is far too short for its line and you would rather have the words than the rhythm. |
| keep_markers | BOOLEAN | true | Pass the lyrics to the 'lyrics' output exactly as written, markers and all. ON by default, because that is what sounded better. They were being stripped on the reasoning that YuE2 has no field for a singer and its own guidance says to keep instructions out of the lyrics. Listening says otherwise: the model reads them and takes the PERFORMANCE from them β 'powerful belts', 'deep growl', 'vocal duel, intense emotional peak' come back as strain and intensity, and stripping them flattens the take. Who sings still comes from the style string, so the markers cost nothing. Turn it off if your lyrics carry stage directions in ROUND brackets: YuE2 reads those as a backing vocal and sings them aloud. Square brackets are safe either way. |
| verbose | BOOLEAN | true | Print the report to the console. The same text is always on the 'report' output. |
| voice_1opt | KINBURG_VOICE | A band member β a Character Card's 'voice' output. Wire the same cards the markers name. The cards decide which band each singer gets: they are ranked on one ladder of voice types (soprano β¦ bass, with a bare 'female'/'male' sitting between the ranges each usually covers) and the upper half takes the upper band. That has to be relative β the same tenor belongs above a bass and below a soprano. With fewer than two wired there is nothing to alternate, and no phrase is recast. | |
| voice_2opt | KINBURG_VOICE | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| abc | STRING | β |
| lyrics | STRING | β |
| report | STRING | β |