RT HeartMuLa Tags Builder
The Paper's Tag Format, Without the Typing
- tags
If you've used HeartMuLa even once, you know the single most annoying thing about it: it ignores your genre tags unless you feed them in exactly the format the paper expects, and even then it needs a nudge. RT HeartMuLa Tags Builder is the pack's answer - a small node that turns human-friendly choices like "jazz" and "emotional" into the lowercase, comma-separated tag string the sampler is trained on.
The reason this format is a thing: HeartMuLa's cross-attention conditioning was trained on tags written as lowercase comma-separated text. People coming from image prompting habits (capitalized, weighted, prompt-like) feed it Upbeat Pop, Emotional and get back mush, then conclude the model is broken. The builder exists so you never have to think about the syntax again.
How it works
You pick a handful of attributes, and the node's build() method does four things:
- Collects genre, vocal type, mood, tempo, instruments, and any
additional_tagsyou typed. - Lowercases and strips everything (paper compliance - the pack's changelog explicitly calls out that conditioning nodes enforce lowercase).
- Drops any field set to
noneor left empty. - Joins the survivors with
", "and returns them as a singletagsstring.
From there it wires straight into the tags input of RT HeartMuLa Sampler, which wraps it in <tag>...</tag> and bakes it into the prompt. One quirk worth knowing: the node forces itself to re-run on every queue (IS_CHANGED returns NaN), so it always prints the little "process started" banner in your console. Harmless, slightly theatrical.
The inputs that matter
genre- dropdown:pop,rock,jazz,hip hop,electronic,folk,cinematic, ornone. Defaultpop.vocal_type-female vocal,male vocal,instrumental,choir,none. Defaultfemale vocal.tempo-slow,medium,fast,none.moodandinstruments- free text; defaultemotionalandpiano, guitar. These are where you get to be specific ("nostalgic", "dreamy synth pads, analog bass").additional_tags(optional) - a catch-all for anything the dropdowns miss.
The single tags output is a plain STRING. It only does one job, but it's the job that makes the sampler's CFG dial meaningful.
How to actually get tags to stick
The builder handles formatting, but formatting alone isn't enough - this is the part everyone trips on. The sampler's cfg_scale defaults to 1.7, and at or near 1.0 HeartMuLa is notoriously tag-deaf. People in the community who found their genre requests being ignored discovered that setting a real CFG value is what finally makes the style land - the fix is to raise it, with values like 4–5 getting mentioned. So the honest recipe is: let this node format the tags, then turn CFG up in the sampler and iterate.
Common issues
- Still ignoring the genre - you've got the format right, so it's a CFG problem. Raise
cfg_scalein the sampler; that's the known fix. - A
nonevalue appearing in the output - shouldn't happen; empties andnoneare filtered out before joining. If you see one, you've probably got an old pack version; update. - The tags input on the sampler won't let you type in it - by design. It's
forceInput, so the Tags Builder (or any string source) has to be wired to it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| genre | COMBO | pop | 8 options: pop, rock, jazz, hip hop, electronic, folk, +2 |
| vocal_type | COMBO | female vocal | 5 options: female vocal, male vocal, instrumental, choir, none |
| mood | STRING | emotional | — |
| tempo | COMBO | medium | 4 options: slow, medium, fast, none |
| instruments | STRING | piano, guitar | — |
| additional_tagsopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| tags | STRING | — |