URN Audio Create Yue2 Lyrics
New lyrics that actually fit the vocal line, because they were written to the ABC score
- clip
- new_lyrics
- abc
- analysis
Ask a language model for song lyrics and you get lyrics. They'll be about your theme, they'll rhyme, and they will not fit the melody. YuE2 doesn't care about any of that - it sings what you give it, and if your syllable count is wrong, you hear it instantly.
URN Audio Create Yue2 Lyrics closes that gap. You give it a theme and the ABC score YuE2 already generated, and it writes new words against the actual vocal rhythm of that score. Same tune, new song.
How it works
The clever part is the ABC parsing, and it's more careful than you'd expect from a node like this. An ABC score has multiple voices - melody, accompaniment, whatever else - and the node reads only the V: vocal material when it builds its rhythm map, so note attacks in the piano part don't get mistaken for syllables. Section comments (% verse, % chorus, % bridge) are kept as structural guidance, which is why the output tends to arrive in verse/chorus shape rather than one undifferentiated block.
The full ABC score is also handed to the model as context, so oddities the parser deliberately doesn't try to interpret on its own - ties, pickups, tuplets - are still visible to something that can reason about them. The parser is conservative on purpose; a rhythm map that quietly guesses wrong is worse than one that hands the raw notation over.
Everything runs through ComfyUI's native text-generation interface. Plug a CLIP-loader-loaded text model into clip - Qwen3/Qwen3.5 is what the author recommends - and that's it. No Ollama, no background server, no API key. That's the most useful decision in the node: it makes a lyric writer portable to any graph instead of adding a second runtime.
The optional source_lyrics input is a structural reference, not a starting point. The instruction to the model is explicitly not to copy, paraphrase or preserve distinctive wording - so feeding it the original song's lyrics to get the phrasing right is a legitimate use, and it's what the input exists for.
Inputs and outputs
Wire it up like this:
clip- a ComfyUI native text-generation model. Qwen3/Qwen3.5 loaded through a normal CLIP loader.abc- the STRING output of YuE2 Generate ABC.theme_story- what the new song is about. It defaults to a cat and dog in a love/hate relationship, which tells you the author's sense of humour.creativity(0–1, default 0.75) - this is the text-generation temperature. Low is literal, high wanders.syllable_fit(0–100, default 85) - how hard the model should match lyric density to the vocal note attacks.rhyme_strength(0–100, default 65) - stronger rhyme, still prioritising natural language.max_tokens(default 2048) - raised when the model truncates.seed, and optionalsource_lyrics.
Outputs are new_lyrics (into YuE2 Generate Music's lyrics input), abc (passed through unchanged, for convenient wiring into the music node's abc input without a second cable from the ABC node), and analysis - a human-readable readout of key, meter, tempo, sections and detected vocal note attacks. That last one is genuinely the diagnostic when the lyrics come out wrong: if the analysis shows a thin rhythm map, syllable_fit has nothing solid to work from.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Clivey1234/Comfyui_URN_AudioTools
Restart ComfyUI. What you actually need beyond the pack is a text-generation model installed the native ComfyUI way - the node bundles no LLM, and it will not fall back to one. ComfyUI Manager: search Comfyui_URN_AudioTools.
Common issues
"clip" is empty and the node errors. You need a text-generation model loaded as CLIP, not a normal image-model text encoder. A stock T5/CLIP-L for image generation won't write you lyrics.
The lyrics don't fit the melody. Check analysis first. If the rhythm map is sparse, raise syllable_fit; if the song has an unusual meter or a lot of pickup notes, the conservative parser may have found very little to work with and you should treat the output as a draft - clean it in URN Text Edit before it hits the music model.
Output is truncated mid-line. Raise max_tokens. 2048 is a reasonable default for a short song and not much more than that.
It drifts off the theme at high creativity. That's temperature doing exactly what temperature does. 0.7–0.8 is the band where you get variation without losing the brief.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | Connect a ComfyUI native text-generation model (for example Qwen3/Qwen3.5 loaded as CLIP). | |
| abc | STRING | Connect the STRING output from YuE2 Generate ABC. | |
| theme_story | STRING | A love/hate relationship between a cat and a dog. | — |
| creativity | FLOAT | 0.750–1 | — |
| syllable_fit | INT | 850–100 | — |
| rhyme_strength | INT | 650–100 | — |
| max_tokens | INT | 2048256–8192 | — |
| seed | INT | 00–18446744073709550000 | — |
| source_lyricsopt | STRING | Optional original lyrics. Used only as a structural reference; the node instructs the model not to copy or paraphrase them. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| new_lyrics | STRING | — |
| abc | STRING | — |
| analysis | STRING | — |