Nodes/KIE.ai Nodes Next/Generate Music · V4.5
ComfyUI Node

Generate Music · V4.5

Generate Music · V4.5 — a Suno client wearing a ComfyUI node's clothes

By felipederosilva·Created about a month ago·Updated about 22 hours ago· 3
Generate Music · V4.5
  • 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
◄promptA calm and relaxing piano track with soft melodies►
◄custom_modetrue►
◄instrumentaltrue►
◄styleClassical►
◄titlePeaceful Piano Meditation►
◄negative_tagsHeavy Metal, Upbeat Drums►
◄vocal_genderm►
◄style_weight0.65►
◄weirdness_constraint0.65►
◄audio_weight0.65►
◄persona_idpersona_123►
◄persona_modelstyle_persona►
◄duration20.00►
◄variety1.00►
◄lyrics►
◄timeout_seconds1200►
◄callback_url►

A full song from a text box, sitting on your canvas as a purple node. That's the pitch, and it's real: this node posts to KIE.ai's Suno endpoint and hands you back a normal ComfyUI AUDIO object you can wire into SaveAudio, a music video pipeline, or a lip-sync stage. The catch is that nothing runs on your machine - no checkpoint, no VRAM, no download - and every run costs credits.

What it actually does

KIE.ai is one of the resellers that proxy closed models behind a single API key, and Suno is the one job where the API still clearly beats open weights: best-in-class songs with clean vocals is the thing local music models haven't closed yet (ACE-Step gets close on instrumentals, still mumbles on lead vocals). This node is the pack's one-model-per-page approach applied to that endpoint - the Suno V4.5 version, split into its own node rather than hiding behind a dropdown.

Under the hood the node builds the request body, sends it to POST /api/v1/jobs/createTask, then blocks and polls the Suno record-info endpoint every 2.5 seconds until the task succeeds or timeout_seconds (default 1200 - twenty minutes) runs out. Music jobs take a couple of minutes, so that default is generous on purpose. KIE's transport model for this call is ai-music-api/generate; your version choice rides along as model: V4_5 inside the input payload.

The three switches that decide everything

Suno's V4.5 request shape is fussier than it looks, and the tooltips spell it out properly:

  • custom_mode (default true) - advanced mode. Your prompt becomes exact lyrics rather than a description.
  • instrumental (default true) - no vocals. In custom mode that means style and title are all that's required.
  • prompt - in custom mode with instrumental on, your text is basically inert. Want it sung? Set instrumental off and write lyrics in prompt or in the lyrics field.

So the honest starting recipe is: pick a style ("lo-fi jazz, brushed drums, warm tape"), give it a title, flip instrumental off, and paste lyrics. Everything else - style_weight, weirdness_constraint, audio_weight, negative_tags, vocal_gender - is seasoning. vocal_gender is worth knowing about: the doc admits it "only increases probability" and cannot guarantee male/female output. It's a nudge, not a control.

The reference sockets (image_urls, audio_1–audio_3, video_1–video_3) are the interesting ones - Suno calls this inspiration mode. They also come with a trap, see below.

Outputs

Seven of them, and you'll use two. audio is the decoded track, ready for SaveAudio or a video node. all_urls_json holds every result URL - Suno typically returns two takes per generation, and audio is the first one, so if you prefer the other take, that's where it is. The rest are plumbing: url, task_id, raw_json, plus credits_consumed and credits_left, which also render on the node face after each run so you can watch your balance bleed.

Installing

In ComfyUI Manager, search the pack title ComfyUI-KIE-Nodes-Next ("KIE.ai Nodes Next"). Manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
# restart ComfyUI

Dependencies are just requests, Pillow, numpy and PyYAML - no models, no CUDA. Then set your key once, in Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. It validates the key against KIE before saving, stores it outside your workflow JSON, and shows a masked fingerprint plus a ✅ CONNECTED status. Servers can use the KIE_API_KEY env var instead; it wins over the saved key.

Where people get burned

Connect an image and your widgets quietly vanish. The pack deliberately forces custom_mode=false whenever an image_urls socket is filled, and strips the custom-only fields (style, title, duration, style_weight, persona_id, instrumental and friends) before submitting. You'll see a console line explaining it. It's protecting you from a provider-side rejection, but it does mean the image path and the style path don't mix.

Half the widgets are no-ops on V4.5. duration, persona_model and non-custom variety are documented as valid only for V5.5/V6/V6_MINI/V6_WILD. Turning them does nothing here.

The version is legacy. KIE's parameter docs tag V4, V4.5, V4.5PLUS, V4.5ALL, V5 and V5.5 as (Discontinued), with V6/V6_MINI/V6_WILD current. This node exists because the docs still publish it - but starting fresh, use the V6 sibling in the same folder.

persona_id ships a placeholder. It defaults to the literal string persona_123. Clear it if you're not using one; empty optionals get dropped before submission.

CategoryKIE Next/Audio/Suno/Music Generation

Inputs (24)

NameTypeDefaultDescription
promptSTRINGA calm and relaxing piano track with soft melodiesA 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_modeBOOLEANtrueDetermines whether advanced parameter customization is enabled. - If `true`: Allows detailed control - If `false`: Simplified mode
instrumentalBOOLEANtrueDetermines 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`).
styleoptSTRINGClassicalMusic 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.
titleoptSTRINGPeaceful Piano MeditationTitle 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_tagsoptSTRINGHeavy Metal, Upbeat DrumsMusic styles or traits to exclude from the generated audio. Optional. Use to avoid specific styles.
vocal_genderoptCOMBOmVocal 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_weightoptFLOAT0.650–1Only 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_constraintoptFLOAT0.650–1Only available when Custom Mode (`custom_mode: true`) is enabled. Controls experimental/creative deviation. Optional. Range 0–1, up to 2 decimal places.
audio_weightoptFLOAT0.650–1Only 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_idoptSTRINGpersona_123Persona 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_modeloptCOMBOstyle_personaPersona model. Only available for V5 (Discontinued), V5.5 (Discontinued), V6, V6_MINI, and V6_WILD.
durationoptFLOAT20.0010–360Audio duration. Optional; only valid when `custom_mode` is true and the model is V5_5 (Discontinued), V6, V6_MINI, or V6_WILD.
image_urlsoptIMAGE—
varietyoptFLOAT1.000–4Only 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
lyricsoptSTRINGLyrics 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_1optAUDIO—
audio_2optAUDIO—
audio_3optAUDIO—
video_1optVIDEO—
video_2optVIDEO—
video_3optVIDEO—
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
audioAUDIO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—