Compose Arrangement
Hand the writer model the song plan, not the notes
- brief
- engine
- prompt
- schema
So you picked a creative mode in the Song Brief - standard, varied, dramatic, whatever - and now something has to decide what each section of YuE2's score should do. That decision is a language model's job, and Compose Arrangement is the half of it that asks. It does not run the model itself. It builds the prompt and the JSON schema, hands them to whatever writer you wired up, and leaves the dangerous part - turning prose into notes - to its partner, Apply Arrangement.
This is the node you'd reach for when the local music model's own plan is too tame. It's worth remembering where local music generation is strong and weak: instrumentals come out convincing, vocals and lyrics are the weak suit (docs/knowledge/audio-generation.md). Plenio's whole design leans on that - control the text before the notes - and the arrangement pair is the most control you get without drawing the score yourself.
How it works
The node reads two things: the score (YuE2's native two-voice ABC) and the brief. It builds a table of that score - sections, existing chords, the melody on the strong beats, what the instrument line plays - then wraps it in the rules of the creative mode you chose and the closeness you set. Genre closeness in a Song Brief and song flow closeness in a Cover Brief are the sliders that decide how surprising the plan is allowed to be.
The writer is asked for a small JSON plan, never notes: chords, what each section's instrument line does, energy, whether a section lifts its key. That's why the node has two outputs.
It also skips gracefully, which is why you can leave it wired in permanently. Arrangement off, an empty score, or a cover held at its original song flow, and you get an empty prompt, an empty schema and a No arrangement prompt summary on the node. Nothing downstream asks the writer anything - Apply Arrangement's answer input is lazy, so no model call happens at all.
Inputs and outputs
- score - the ABC to arrange.
- brief - the Song Brief or Cover Brief. This is where you switch the creative mode; the node just reads it.
- engine - optional, and only used to put the music model's name in the prompt.
- style, lyrics - optional mood context for the writer.
The two outputs are the point: prompt goes into your writer's prompt input (native Generate Text, or the Local LLM node), and schema goes into Local LLM's schema input, where constrained decoding pins the answer to that exact shape. Native Generate Text can't be held to a schema - one more reason a GGUF writer turns out to be the dependable choice for creative modes. Then wire the writer's answer into Apply Arrangement's answer. Compose, write, apply.
Installing it
It ships with the rest of Plenio, and there's nothing extra to install for it - the whole pack's requirements.txt is empty on purpose; it builds on ComfyUI's own nodes instead of stacking a second dependency tree.
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/Plenio-Music-Production-System
Or Manager → Custom Nodes Manager → search Plenio Music Production System, or comfy node install comfyui-plenio-music. Restart ComfyUI, then run the 0 · System Check template once: it tells you which model files each template still needs and which llama.cpp runtime, if any, it found. Requires ComfyUI 0.37.0 or newer - the native YuE2, MiniMax, FLUX.2 and text-generation nodes it builds on don't exist before that, and you'll get red nodes instead of an explanation.
When it misbehaves
An empty prompt output is almost always the skip, not a bug: check the brief's arrangement is a mode and not off, and that a score is actually connected.
Unknown creative mode 'x' means a mode file was renamed, deleted, or has a mistake - modes are Markdown files in <user>/plenio/arrangement/, and a broken one is named in the ComfyUI log. Fix it and press R.
If you get as far as Apply Arrangement and land on Arrangement not applied, the blame is usually the writer's answer, not the prompt. The node's own advice is the honest one: run again with another arrangement seed, or choose a GGUF, LM Studio or Ollama model as the writer so the plan's format is enforced while it writes.
And one behaviour that surprises people: change the creative mode or a closeness slider and the writer runs again, because the brief changed and everything after it re-runs. For another arrangement of the same text, change the arrangement seed instead - with a Local LLM writer, an unchanged request comes back from its cache without a call.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| score | STRING | The score to arrange (native two-voice ABC). | |
| brief | PLENIO_BRIEF | Song Brief or Cover Brief: the creative mode and the closeness. | |
| engineopt | PLENIO_ENGINE | The music model (its name in the prompt). | |
| styleopt | STRING | The song's style, for the mood (optional). | |
| lyricsopt | STRING | The song's lyrics, for the mood (optional). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | The arrangement prompt for the writer. |
| schema | STRING | The JSON schema of the answer, for Local LLM (constrained decoding: the format is exact). |