FL Song Gen Generate
Your lyrics become an actual song — FL SongGen Generate
- model
- mixed_audio
- vocal_audio
- bgm_audio
This is the node the whole FL SongGen pack exists for. You give it lyrics, it gives you back a finished song - sung vocals and a backing track - generated on your own GPU. No API, no Suno subscription, no key to paste anywhere. If you've only seen ComfyUI's music corner as TTS voices and short ACE-Step clips, this is a different category: the underlying model is Tencent's SongGeneration (a.k.a. LeVo), one of the few open-weights models that does complete songs with vocals from scratch.
How it works
SongGen is a token-based music model, not a diffusion pipeline. It reads your lyrics as a sequence of section tags and phrases, turns them into tokens, then decodes those tokens into audio. That's why the progress bar counts tokens rather than steps - and why generation runs in two phases: token generation (most of your wait) and audio decoding. The whole thing runs locally through the model object that the Model Loader hands it, so the quality ceiling is whatever your VRAM can hold.
The heavy lifting happens on three inputs:
- model - the
SONGGEN_MODELoutput from FL Song Gen Model Loader. Nothing works without it. - lyrics - formatted with section tags like
[verse],[chorus],[intro-short], separated by;, phrases separated by periods. The default text is a valid example, so you can run it once to sanity-check your install. - description - the optional style string, e.g.
female, pop, emotional, piano and drums. Leave it empty and the model just sings whatever your lyrics imply.
The gen_type trap
The node always exposes three outputs - mixed_audio, vocal_audio, bgm_audio - but what's actually in them depends on gen_type. The default is mixed, which means only mixed_audio has sound; the vocal and bgm outputs come back as silence. Set gen_type to separate and the model generates all three stems (costs three decode passes). Pick vocal or bgm to get just that track. The classic "why is my stem silent" moment is almost always this dropdown left on mixed.
The knobs you'll actually touch
duration (default 60s) gets silently clamped to the loaded model's max - 150s for the base variants, 270s for full/large - and the console prints a warning when it does. temperature (0.9), cfg_coef (1.5), and top_k (50) are the sampling controls; the defaults are a fine starting point, and for a music model I'd leave them alone until you know why you're changing them. seed defaults to -1, which means "random every time" - set it if you want to lock a result and iterate.
All three outputs are standard ComfyUI AUDIO dicts, so they plug straight into an audio save or preview node. The output is 24 kHz, which is worth knowing before you assume the model made it sound lo-fi.
Install
ComfyUI Manager (search "FL Song Gen") is the easy path, or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_FL-SongGen.git
cd ComfyUI_FL-SongGen
pip install -r requirements.txt
Then restart ComfyUI. The dependency list is heavy (torch, transformers, diffusers, librosa, openunmix, descript-audio-codec, k-diffusion, x-transformers) but most modern ComfyUI installs already have a chunk of it, so pip mostly no-ops. First generation triggers an automatic model download to ComfyUI/models/songgen/ - a multi-GB folder, not a ten-second fetch.
Troubleshooting
- Silent vocal/bgm outputs - you're on
mixed; switchgen_typetoseparate. - Generation is slow - token generation is the bottleneck, not decoding. Start with a 60-second song to test, then scale up.
- Duration ignored - it was clamped to the model max; you need a
base_fullorlargevariant for 4m30s songs. - VRAM errors - drop
memory_modeto low/ultra in the Model Loader. This pack is honest about its appetite: 10–28 GB depending on variant and mode.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | SONGGEN_MODEL | Loaded SongGeneration model | |
| lyrics | STRING | [intro-short] ; [verse] Hello world.This is a test ; [chorus] Singing along.Making music ; [outro-short] | Formatted lyrics with section tags |
| descriptionopt | STRING | Style description (e.g., 'female, pop, emotional, piano and drums') | |
| durationopt | FLOAT | 6030–270 | Target duration in seconds (max depends on model variant) |
| temperatureopt | FLOAT | 0.900.1–2 | Sampling temperature (higher = more random) |
| cfg_coefopt | FLOAT | 1.50.5–5 | Classifier-free guidance strength |
| top_kopt | INT | 501–500 | Top-k sampling (lower = more focused) |
| gen_typeopt | COMBO | mixed | Output type: mixed (combined), separate (all tracks), vocal only, or bgm only |
| seedopt | INT | -1-1–2147483647 | Random seed (-1 for random) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| mixed_audio | AUDIO | — |
| vocal_audio | AUDIO | — |
| bgm_audio | AUDIO | — |