Generate Music · V4
The Suno node with the most knobs (and a mode flag you must understand)
- 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
If your ComfyUI workflow needs a song from a text prompt, this is the node - Suno's generate endpoint, wired up as a graph node instead of a curl command, pinned to the V4 model version.
Context for why you're here rather than running a local model: instrumental music is the job local has mostly won (ACE-Step, on embarrassingly small hardware), and vocals plus lyrics are the job where it hasn't. The community's complaint about ACE-Step's lyrics is the same one people make about Suno's, just louder. So this node is the "I need the good version of the singing" choice, and it's metered accordingly.
The two-mode design you have to get right
custom_mode is the hinge of this whole node. On (the default), you're in the detailed-control mode: your prompt is sung verbatim as lyrics, so style and title carry the actual direction, and the fine-tuning weights become live. Off, it's simplified mode: prompt becomes a loose idea that Suno writes its own lyrics from, and KIE wants at least one of an image, video, audio or lyric reference alongside it.
Getting this backwards is the single most common way to waste a generation. Custom mode plus a descriptive sentence is how you end up with a track that sings your description of a piano.
instrumental (default on) is the other half. In custom mode, on means only style and title matter; off means style, title and prompt are all required, with prompt as the exact lyrics.
References - the interesting part
This node takes real media references: image_urls, three numbered audio_1…audio_3 inputs and three video_1…video_3 inputs. They're native ComfyUI sockets, so you can wire a generated image straight in and have it uploaded for you.
There's a documented catch the pack handles for you: KIE only accepts image references when custom mode is off. Older versions of this node would submit the combination anyway and you'd get a provider rejection after paying for the upload. The current pack detects connected images and submits with custom_mode=false, dropping the custom-only controls (duration, style, title, persona and the weights) that the provider would otherwise reject one by one. You'll see it say so in the console. So if you've wired an image in, expect simplified mode whether or not you ticked the box.
The rest of the inputs
prompt (multiline, up to 3000 characters in custom mode on V4), style (the genre, capped at 200 characters on V4 - it's 1000 on V4.5 and later), title (80 characters, required in custom mode, and it ends up in filenames and players, so name it like a human), negative_tags for styles to exclude, and lyrics as a separate field that takes priority over prompt for lyrics. vocal_gender is m or f and only nudges probability. style_weight, weirdness_constraint and audio_weight all run 0–1 and are custom-mode-only. variety (0–4, default 1) is the stylistic spread control. persona_id with persona_model lets you apply a saved style or a cloned voice - that's where the voice-cloning nodes feed in, with persona_model set to voice_persona.
duration shows up too, but KIE documents it as only valid on V5.5 and later; on V4 it does nothing useful, and the versions that support it are the newer ones, not this node.
Outputs, install, and one warning
Outputs are audio (native, wire it to Save Audio), url, all_urls_json, task_id, raw_json, credits_consumed and credits_left. On success the node prints a credits receipt on itself, which is a nice touch when you're iterating.
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
ComfyUI Manager can install it - search "KIE.ai Nodes Next" - then set the key once in Settings → KIE.ai Nodes Next → Connection.
The warning: V4 is marked discontinued in KIE's own documentation, and the node family includes current versions. If you're not chasing a specific V4 sound, run the V6 variant of this node instead. Same wiring, better output.
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 | — |