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

Generate Music · V4.5PLUS

Personas, weights, and eight-minute songs

By felipederosilva·Created about a month ago·Updated about 23 hours ago· 3
Generate Music · V4.5PLUS
  • 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►

V4.5PLUS is the top of the V4.5 family - the same Suno generation endpoint as its two siblings, on the version KIE describes as "richer sound, new ways to create, max 8 min". If you're going to spend API credits on a song rather than a loop, this is the node in the legacy row worth picking.

The context that matters: song generation with clean vocals is still the job local models haven't closed. The open answer, ACE-Step, is genuinely compelling on instrumentals and noticeably weaker once someone has to sing. So the API route is a defensible choice here, not just laziness.

What the node does

It builds a Suno request and ships it to KIE.ai under the transport model ai-music-api/generate, with V4_5PLUS as the model version inside the payload. Then it blocks the queue, polling the record-info endpoint every few seconds until the job succeeds or timeout_seconds (default 1200 - twenty minutes) runs out. The returned MP3 is downloaded and decoded locally into a standard ComfyUI AUDIO, using ComfyUI's own torchaudio/PyAV. Nothing runs on your GPU and no weights are involved.

The switches to understand first

custom_mode (default true) changes what your text means: in custom mode prompt is taken as exact lyrics; turn it off and the same words become a description, with Suno writing its own lyrics.

instrumental (default true) removes the vocal. In custom mode with it on, style and title are all the endpoint needs; turn it off and your lyrics get sung.

Non-custom mode is also the only mode where the reference sockets do anything: an IMAGE, up to three AUDIO inputs (audio_1–audio_3), up to three VIDEO inputs (video_1–video_3). The pack handles the upload for you - connect a track and it gets hosted and passed as a URL.

Then the dials, which only apply in custom mode: style_weight, weirdness_constraint, audio_weight (all 0–1, all mild), and variety. persona_id and persona_model are the interesting pair - a persona is a saved style/voice fingerprint you apply to new generations, and you create one with the pack's Generate Persona node.

Outputs

audio is the track - into SaveAudio, or into a video pipeline if you're scoring a render. all_urls_json keeps every URL the response returned; Suno usually produces multiple takes and only the first becomes audio, so this is where the alternates live. url, task_id and raw_json handle linking and forensics - and raw_json is also where you find a track's id, which is what the Extend Music nodes need. credits_consumed and credits_left come back as floats and are printed on the node after every run.

Installing

ComfyUI Manager → search ComfyUI-KIE-Nodes-Next. Or:

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

Restart ComfyUI, then paste your key in Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. The pack validates it against KIE before replacing a working key, keeps it in Comfy's user config instead of the workflow, and shows a masked fingerprint with a connected status. Dependencies: requests, Pillow, numpy, PyYAML - no checkpoints and no CUDA.

The traps

Feeding an image silently rewrites your mode. Whenever image_urls is connected, the pack forces custom_mode=false and strips the custom-only fields (style, title, duration, vocal_gender, style_weight, persona_id, instrumental, variety…) before submitting, with a console message explaining why. It's a guard against a provider-side rejection, but it means your carefully set style disappears the moment you plug in a reference image.

Several widgets are no-ops on this version. duration and persona_model are documented as V5.5/V6-family features. The tooltips say so; nobody reads them.

persona_id defaults to persona_123, a placeholder. Empty optionals are dropped before submission, so clearing it is safe and probably correct.

V4.5PLUS is legacy. KIE tags it (Discontinued) along with V4, V4.5, V4.5ALL, V5 and V5.5; V6, V6_MINI and V6_WILD are the live versions. This node is the right shape on a model version that's on its way out.

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—