Generate Music · V6
The text-to-song node you should actually be using
- image_urls
- audio_1
- audio_2
- audio_3
- video_1
- video_2
- video_3
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
This is the current-tier song generator: text in, a full track out, with vocals that hold up. If you've looked at the · V5 and · V5.5 versions of this node, here's the short version - KIE's docs mark both of those discontinued. V6 is the live tier, with a 5000-character lyrics budget, a 1000-character style budget, and materially better vocals.
The wider context hasn't changed. Local music generation means ACE-Step: free, 4GB-friendly, genuinely good at instrumental music, and the known weak spot exactly where you'd expect - vocals and lyrics. Suno's vocal is the reason this remains an API call for anything sung. So the split is: local for beds, loops and cheap iteration; this node when the singing is the point. Every call costs KIE credits and sends your prompt out.
Two siblings are worth knowing about before you commit: the pack also ships separate nodes for V6_WILD (the docs' description: pushing creative boundaries for bolder, more distinctive expression) and V6_MINI (lightweight and fast, balancing quality and speed). Same endpoint, different tier - and since they're separate classes, you can wire both and compare for the price of two calls.
How it works
The pack builds its node library from KIE's official API documentation at startup, one node per documented model version, which is why there's no model dropdown here - V6 is baked into the class. The node assembles the documented request body, submits it to KIE's task endpoint (envelope model ai-music-api/generate, inner model V6), then polls KIE's record-info endpoint every couple of seconds with exponential backoff until the task reports success. On success it downloads the audio result and returns it as a native ComfyUI AUDIO; on failure it raises with the task id and the provider's message.
The inputs that matter
Three required, and they define your mode:
- custom_mode - default
true(detailed control). Set it false for the simplified path. - instrumental - default
true. The docs' matrix: in custom mode with this true, onlystyleandtitleare required; with it false,style,titleandpromptare required andpromptis sung as the exact lyrics. - prompt - exact lyrics in custom mode, a loose brief in non-custom mode where lyrics are written for you (3000-character cap there).
Optional, mostly custom-mode-only: style, title (80 characters, required in custom mode), negative_tags, vocal_gender (m/f; the docs only claim it raises the odds), style_weight, weirdness_constraint, audio_weight (docs: unsupported when there are no vocals), persona_id / persona_model, duration (10–360s, valid on this tier), variety (0–4), lyrics (5000-character cap, takes priority over prompt).
Then the reference sockets, which are the nice part: image_urls takes an IMAGE, and audio_1/2/3 plus video_1/2/3 take native AUDIO and VIDEO inputs. The pack uploads them and passes URLs for you - no plumbing.
Outputs: audio, url, all_urls_json (the endpoint's example response contains two tracks; this is where you keep both), task_id, raw_json, credits_consumed, credits_left.
The trap the pack already handles
Attach an IMAGE to image_urls and leave custom_mode at its default and KIE rejects the request - after uploading your file. The pack intercepts it: on Generate Music it forces non-custom mode locally and strips the fields that aren't valid there (duration, style, title, negative_tags, the weight and vocal fields, persona_id, instrumental), logging exactly what it removed. Sensible, but it means the submitted payload isn't literally what your widgets say. Read the console.
Installing
ComfyUI Manager, search "KIE Nodes Next" - the README describes registry publication as prepared rather than shipped, so the copy-paste route is what works today:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt
Restart, then set the key once at Settings → KIE.ai Nodes Next → Connection. It's validated before replacing a working key, only a masked fingerprint is shown to the frontend, and KIE_API_KEY takes priority on headless installs. Four small dependencies; no torch, no checkpoints, no VRAM.
Where people get burned
- Mode mismatch. Custom mode,
instrumentaltrue, lyrics filled in → no lyrics. The matrix is not decorative. - Two tracks per request.
audiois the first; the rest live inall_urls_json. - No key configured raises an error naming the settings path.
- Mixed-release installs are refused at import. If version and generated-node build disagree, delete the folder and reinstall - don't patch by hand.
- Credits per iteration.
credits_consumedandcredits_leftprint on the node; watch them while tuning, because this is the expensive node in the family.
Run it once with defaults, then change a single field per run. You're not sampling here, you're paying - and the fastest way to burn credits is changing style, lyrics and duration together and learning nothing.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A calm and relaxing piano track with soft melodies | A description of the desired audio content. Optional. - Custom mode (`custom_mode=true`): When provided, the prompt is used strictly as lyrics and sung in the generated track. Character limits by model: - V4: Maximum 3000 characters - V4_5, V4_5PLUS, V4_5ALL, V5_5, V5: Maximum 5000 characters - Non-custom mode (`custom_mode=false`): When provided, the prompt serves as the core idea. Lyrics are generated automatically based on it and do not strictly match the input. Maximum 3000 characters. `prompt` is not required. In non-custom mode, provide at least one of `image_urls`, `video_urls`, `audio_urls`, `style`, or `lyrics`. In custom mode, provide at least one of `style`, `lyrics`, or `negative_tags`. Generation is rejected if all related inputs are empty. |
| custom_mode | BOOLEAN | true | Determines whether advanced parameter customization is enabled. - If `true`: Allows detailed control - If `false`: Simplified mode |
| instrumental | BOOLEAN | true | Determines whether the audio should be instrumental (no lyrics). - In Custom Mode (`custom_mode: true`): - If `true`: Only `style` and `title` are required. - If `false`: `style`, `title`, and `prompt` are required (`prompt` is used as the exact lyrics). - In Non-custom Mode (`custom_mode: false`): - If `true`: Only `style` and `prompt` are required. - If `false`: `style`, `prompt`, and `lyrics` are required (`lyrics` is used as a lyrics attachment and can be used together with the audio description in `prompt`). |
| styleopt | STRING | Classical | Music style specification for the generated audio. - Character limits by model: - **V4** (Discontinued): Maximum 200 characters - **V4_5 and V4_5PLUS** (Discontinued): Maximum 1000 characters - **V4_5ALL** (Discontinued): Maximum 1000 characters - **V5_5 and V5** (Discontinued): Maximum 1000 characters - **V6, V6_MINI, and V6_WILD**: Maximum 1000 characters - Common examples: Jazz, Classical, Electronic, Pop, Rock, Hip-hop, etc. |
| titleopt | STRING | Peaceful Piano Meditation | Title for the generated music track. - Required in Custom Mode (`custom_mode: true`). - Max length: 80 characters. - Will be displayed in player interfaces and filenames. |
| negative_tagsopt | STRING | Heavy Metal, Upbeat Drums | Music styles or traits to exclude from the generated audio. Optional. Use to avoid specific styles. |
| vocal_genderopt | COMBO | m | Vocal gender preference. Optional. Use `m` for male and `f` for female. This parameter is only effective when `custom_mode` is true. In practice, it only increases probability and cannot guarantee male/female voice instructions are followed. |
| style_weightopt | FLOAT | 0.650–1 | Only available when Custom Mode (`custom_mode: true`) is enabled. Strength of adherence to the specified style. Optional. Range 0–1, up to 2 decimal places. |
| weirdness_constraintopt | FLOAT | 0.650–1 | Only available when Custom Mode (`custom_mode: true`) is enabled. Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places. |
| audio_weightopt | FLOAT | 0.650–1 | Only available when Custom Mode (`custom_mode: true`) is enabled. Relative weight of audio features. Optional. Range 0–1, up to 2 decimal places. - `audio_weight` is not supported when there are no vocals |
| persona_idopt | STRING | persona_123 | Persona ID or Voice ID to apply to the generated music. Optional. Use this to apply a specific persona style to your music generation. To generate a Persona ID, use the [Generate Persona](https://docs.kie.ai/suno-api/generate-persona) endpoint to create a personalized music Persona based on generated music. To generate a Voice ID, use the [Generate Voice](https://docs.kie.ai/suno-api/suno-voice-generate) endpoint. |
| persona_modelopt | COMBO | style_persona | Persona model. Only available for V5 (Discontinued), V5.5 (Discontinued), V6, V6_MINI, and V6_WILD. |
| durationopt | FLOAT | 20.0010–360 | Audio duration. Optional; only valid when `custom_mode` is true and the model is V5_5 (Discontinued), V6, V6_MINI, or V6_WILD. |
| image_urlsopt | IMAGE | — | |
| varietyopt | FLOAT | 1.000–4 | Only available when Custom Mode (`custom_mode: true`) is enabled. Controls the diversity and stylistic variation of generated results. Optional. Range 0–4, integer, default 1. - **`0`**: off (exact style) — fully off, strictly the same style - **`1`**: normal (balanced variety) — default, balances stability and diversity - **`2`**: high (distinct styles) — produces results with clearly different styles - **`3`**: extra (bold exploration) — higher variation, encourages bold exploration of different styles - **`4`**: max (unreasonably varied) — maximum diversity; results may differ in style very significantly |
| lyricsopt | STRING | Lyrics for the generated audio. Optional. - V6: Maximum 5000 characters. - When `custom_mode=true`, `lyrics` is used as lyrics first; if `lyrics` is not provided, `prompt` is used as lyrics. - When `custom_mode=false`, `lyrics` is used as a lyrics attachment and can be used together with the audio description in `prompt`. | |
| audio_1opt | AUDIO | — | |
| audio_2opt | AUDIO | — | |
| audio_3opt | AUDIO | — | |
| video_1opt | VIDEO | — | |
| video_2opt | VIDEO | — | |
| video_3opt | VIDEO | — | |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |