FL Song Gen Description Builder
Build the style string without the syntax errors — FL SongGen Description Builder
- description
SongGen's style descriptions look easy and aren't. The model was trained on a specific vocabulary - female, warm, pop, emotional, piano and drums, and the exact phrase the bpm is 120 - and it's surprisingly picky about it. This node exists so you assemble that string from dropdowns and validated fields instead of typing it and hoping. It's a pure string builder: no models, no GPU, no downloads. If you already know the format cold, you don't need it; if you've ever had a song come out the wrong genre because you wrote "rhythm and blues" instead of "r&b," you do.
The components
The four required fields are the core, and each is a dropdown with only the tags SongGen was trained on:
- voice_type -
female,male,mixed, ornone - timbre -
bright,dark,warm,soft,none - genre - 17 options including pop, rock, hip hop, jazz, r&b, soul, funk
- emotion - 14 options from happy to nostalgic
The optional fields layer on the rest:
- instruments - a free-text field, default
piano and drums. The README lists sensible combos likeguitar and drums,piano and strings,electric guitar and drums. - bpm - an integer, default 0. Zero means "don't mention BPM." Set it to 120 and the node emits the exact phrase the model wants:
the bpm is 120. - custom_tags - extra comma-separated tags appended to the end.
- raw_description - the escape hatch: if you fill this in, it overrides all the other fields and passes through verbatim. Handy when you have a description you've tuned by hand and don't want the builder mangling it.
The output
One description STRING, built as comma-separated parts - female, warm, pop, emotional, piano and drums, the bpm is 120. Wire it into the description input on FL SongGen Generate or FL SongGen Style Transfer. That's the whole loop: Builder → Generate.
Why it earns its place
Two habits that will save you hours, per the README's own prompting guide: stick to the predefined tags, and don't overload the description with conflicting descriptors. The builder enforces the first and makes the second easier to spot, because the genre and emotion are right there in front of you. And the BPM format is the classic trap - the model needs the literal phrase the bpm is X, and this is the one place you can't get it wrong.
Install
Same as the rest of the pack - ComfyUI Manager (search "FL Song Gen"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_FL-SongGen.git
cd ComfyUI_FL-SongGen
pip install -r requirements.txt
Restart ComfyUI. The node itself has zero heavy dependencies - it's in the pack, so it comes along - but the Generate node it feeds does, so plan for the full install anyway.
Troubleshooting
- Nothing happens / it feels too simple - correct, it's just a string assembler. If the song doesn't reflect the description, the problem is upstream in the model or the description content, not this node.
- I want to hand-tune the string - use
raw_description; it bypasses every dropdown. - BPM didn't take effect - if you want it in the string, it must be above 0; 0 means "auto/unspecified" and the phrase is omitted entirely.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| voice_type | COMBO | female | Vocal type/gender |
| timbre | COMBO | warm | Vocal timbre/tone quality |
| genre | COMBO | pop | Musical genre |
| emotion | COMBO | emotional | Emotional tone of the song |
| instrumentsopt | STRING | piano and drums | Primary instruments (e.g., 'piano and drums', 'guitar and strings') |
| bpmopt | INT | 00–300 | Beats per minute (0 = auto/not specified) |
| custom_tagsopt | STRING | Additional style tags (comma-separated) | |
| raw_descriptionopt | STRING | OR: Provide complete description directly (overrides above fields) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| description | STRING | — |