Score Tools
Transpose, Trim and De-Vocal a Song by Editing Its Score, Not by Re-Rolling
- brief
- score
- section_tags
- report
What it is
Music models are probabilistic; a score is not. Score Tools is the deterministic half of Plenio's score handling: a list of surgical operations you can apply to an ABC score and know exactly what they did. Transpose it down two semitones. Cut it from four minutes to ninety seconds. Turn a sung score into an instrumental one. Strip the chord symbols.
The reason this node exists rather than a text box is validation. Every operation is re-validated against the same parser the model's conditioning uses, and the invariants are checked - removing chords never changes a note, for instance. That's the difference between editing a score and hoping you didn't typo a note.
How it works
score takes the native two-voice ABC dialect this pack uses (Vocal and Ins), which is what YuE2 plans, what SheetSage2 transcribes, and what the Song Sheet's score tab edits. brief is optional and only needed by one operation.
operation is a picker, and each choice reveals its own settings:
- prepare from brief - sung songs pass through untouched; instrumental songs get a silent Vocal voice, with the lead melody either moved to the Ins voice or removed entirely (accompaniment only). This is where instrumental conditioning is made concrete.
- fit length - a
secondstarget (20–900, step 5). It removes whole sections rather than truncating, and keeps the ending; if the shortest complete form is still longer than you asked for, the report says so instead of quietly mangling the form. - voices -
vocalis keep, silence Vocal or move Vocal melody to Ins, andconflictdecides what happens where Ins already plays (replace Ins, or keep Ins). - strip chords - removes the chord layer, leaving the notes alone.
- transpose - semitones, ±12.
- tempo - a new quarter-note BPM, 20–300.
Three outputs. score is the transformed ABC, ready for the Song Sheet or the renderer. section_tags is a lyrics string built from the score's section tags - which is precisely the lyrics text an instrumental cover wants, so you can skip the writer entirely. report lists what changed and which invariants were verified, which is the output that makes this node trustworthy rather than magical.
If the score input is empty, the node doesn't fail - it reports skipped: no score (planning is off) and passes empty strings. That's deliberate: it lets you keep score nodes in a graph for workflows where planning is optional.
Install
# ComfyUI Manager → search "Plenio Music Production System" → Install → restart
# or:
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/Plenio-Music-Production-System
Requires ComfyUI 0.37.0+. The pack installs no Python packages; it uses ComfyUI's own audio, tokenizer and AV stack. To get a score to feed this node you need YuE2 (its plan step) or sheetsage2_bf16.safetensors in models/audio_encoders for transcription - the SheetSage2 weights are CC BY-NC 4.0, non-commercial, like the YuE2 ones.
Common issues
- "Not native ABC." The score has to be in this pack's two-voice dialect, not just any ABC. Scores from the templates and from Transcribe Score are; hand-typed ABC from elsewhere usually isn't.
- Transpose sounds wrong rather than wrong-pitched. Watch the vocal range. Transposing a melody out of the singer's register is legal and sounds like a bad cover - the Song Sheet's range checks exist for this.
- fit length refuses to shorten much. Instrumentals get their length from the plan, not from tags, so there may be nothing to trim without deleting a section. The report tells you when the shortest complete form is still too long.
- prepare from brief did nothing. It only acts on instrumental briefs; for a sung song it passes the score through. If you expected a change, check the
instrumentaloutput of the brief.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| score | STRING | Score in the native two-voice ABC dialect. | |
| operation | COMBO | prepare from brief: sung songs unchanged; instrumental songs get a silent Vocal voice (lead melody moved to Ins, or accompaniment only). | |
| briefopt | PLENIO_BRIEF | Needed by 'prepare from brief'. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| score | STRING | The transformed score. |
| section_tags | STRING | Lyrics made of the score's section tags. |
| report | PLENIO_REPORT | What changed and which invariants were checked. |