Music Prompt Pixaroma
One idea in, caption and lyrics out for MiniMax Music 3
- clip
- caption
- lyrics
- duration
Music Prompt Pixaroma turns one idea into the two different kinds of writing a music model wants: a caption describing how the song should sound, and the lyrics that actually get sung. Wire both into MiniMax Music 3, and this is the difference between a song that matches your idea and a song that vaguely gestures at it.
The reason it exists is that these are not the same kind of text. The caption is sonic: genre, BPM, key, the voice, the instruments - laid out in the three labelled parts MiniMax Music 3 expects. The lyrics are words with section tags like [Verse] and [Chorus]. Before this node you'd set up two separate prompt nodes and type your idea into both, hoping they'd agree; this runs the language model twice on one load, with different wording and different sampling for each job, and hands back both.
The author's notes are worth taking on faith here: running it twice costs about fifty seconds against twenty-five for a single pass with a delimiter split - and that split, when it misfires, gives you one broken output instead of two good ones. The model loads once either way, which is what makes the double pass cheap. It shares AI Prompt Pixaroma's loader and cache, so a Music Prompt and an AI Prompt naming the same file load it once between them.
Inputs
text(optional) - text from another node, added to your idea. Handy for feeding in a theme you built elsewhere.clip(optional) - a model on a wire from a CLIPLoader, used instead of the one picked in settings while connected.
Outputs
caption- how the song should sound, in the format MiniMax Music 3 expects. Wire it to that node's caption input.lyrics- the words, with section tags. Wire it to the lyrics input.duration(FLOAT) - the length you set on this node, in seconds. Wire it to the music node'smax_durationso the song gets exactly the time the words were written for, instead of typing the same number in two places.
The model it needs
It only reads and writes words, so it does not need a vision model. The one the formulas were measured on is qwen3.5_4b_int8_convrot.safetensors (from Comfy-Org's Qwen3.5-4B ComfyUI repo), dropped into ComfyUI/models/text_encoders/ and picked from the node's gear. Small enough to run comfortably on 8 GB cards.
Install
Pack-wide drill: ComfyUI Manager → search Pixaroma → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://gitlab.com/pixaroma/comfyui-pixaroma.git
No extra Python dependencies. The usual gotcha: hard-refresh the browser tab (Ctrl+Shift+R / Cmd+Shift+R) after an update, because cached node visuals are the pack's most common false alarm. And note that if you run the music model itself on the same card, the language model and the music model are both competing for VRAM - if you hit memory errors, that's the usual culprit, not the node.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| clipopt | CLIP | Optional. A model on a wire, from a CLIPLoader or another node. While this is connected it is used instead of the one picked in the settings, and Free VRAM is skipped because that model is not this node's to unload. | |
| textopt | STRING | Optional. Text from another node, added to your idea. Useful for feeding in a theme you built somewhere else. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| caption | STRING | How the song should sound: genre, BPM, key, the voice and the instruments, in the three labelled parts MiniMax Music 3 expects. Wire it to that node's caption input. |
| lyrics | STRING | The words that get sung, laid out with section tags like [Verse] and [Chorus]. Wire it to that node's lyrics input. |
| duration | FLOAT | The length you set on this node, in seconds. Wire it to the music node's max_duration so the song is given exactly the time the words were written for, instead of you typing the same number in two places. |