Add Instrumental to Music · V4.5
How to get a seamless loop out of a sound model
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Ambience is the unglamorous half of video work and the half that makes a clip feel finished. This node is the short version: describe a sound in under 500 characters, optionally pin the tempo and key, ask for a seamless loop, and get an AUDIO object back. The · V4.5 pins Suno's V4.5 provider version; the fields are the same sounds-task schema every version of this endpoint uses.
What it is
KIE_Next_V4_5_e88ef72c is one rung of the KIE Next pack's Suno ladder - the pack generates a node per KIE Market operation and per documented provider version, so V4.5 is its own class rather than a dropdown on a shared node. KIE's documentation for this endpoint calls it a Sounds Task and describes it as suitable for "background music, ambient sounds, and other scenarios" once looping is on, which is a fair description of what you'll actually use it for.
Be aware that the published preference has moved on: the model note on the same docs page now says to use V6, V6_MINI or V6_WILD. V4.5 is a legacy pin. It still works, and it's the right node if you're rebuilding a graph you made months ago.
How it works
Build the documented request from your widget values, create the task with KIE, poll until timeout_seconds (1200 default), download the first result URL into a ComfyUI AUDIO. Credits spent appear on the node face, along with the live balance.
No local model is involved - Suno's song-and-sound models aren't open weights, which is why the API still wins this job even though ACE-Step has made local instrumental music genuinely good. The trade is exactly the usual one: per-call cost, and your prompt goes to a server you don't control.
The inputs that matter
prompt is required, 500 characters max. Write it like a sound designer's brief, not a song request: source, texture, space, and what isn't there. "Rain on a tin roof with occasional distant thunder, no music, wide stereo" gets you further than "sad weather".
sound_loop is the one to think about. On, and the provider aims for a seamless wrap - which is what you want for anything that has to run under a clip longer than the generated clip. Off is fine for a one-shot. Even with looping on, listen to the join before you commit; a loop that clicks is worse than a loop that's too short.
sound_tempo (BPM, 1–300) and sound_key (Any plus 24 named keys) are your hooks into an existing edit. Leave both at default for ambience. Set both when the sound has to sit on top of a track you already have, because matching in the generator beats fixing it with a pitch shifter later.
grab_lyrics requests lyric subtitles after completion. On a sounds task this is mostly noise; leave it off unless you're generating something sung.
Outputs
audio → ComfyUI's Save Audio / Preview Audio, or the pack's KIE • Assemble Video + Music, which fits one AUDIO track against up to four VIDEO takes, can lower music under detected dialogue by an adjustable amount, and returns a VIDEO ready for KIE • Save Video. If your loop is shorter than the picture, that node can pad with silence or loop it with a crossfade - worth knowing before you go generate a five-minute version of the same rain.
url is the remote copy, all_urls_json the full list, task_id the handle for KIE • Reuse Completed Image/Video/Audio, raw_json the raw provider answer, and credits_consumed/credits_left your spend. Not an output node - connect something downstream or the queue does nothing.
Installing it
ComfyUI Manager → "KIE.ai Nodes Next", or:
comfy node install kie-ai-nodes-next
Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart, then Settings → KIE.ai Nodes Next → Connection and paste the key. Validated before it overwrites a working one, masked afterwards, never written into workflow JSON. Env vars aren't supported.
Dependencies: requests, Pillow, numpy, PyYAML. Nothing to download into models/, nothing to fit in VRAM.
Where people get burned
Expecting a song. There's no lyrics field and no audio input on this node. It generates a described sound; if you want verses and choruses, you're on the wrong rung of the ladder.
Long prompts. 500 characters arrives faster than you think, and the pack validates it locally before upload, so a rejected run costs you nothing but a retry after trimming.
Loop plus assembly, twice. People generate a 30-second loop, feed it to a 3-minute clip, and then discover the assembler would have handled the repetition. Use right-click → KIE Next · Check inputs & model controls to see exactly which documented fields and limits the pack has cached for this node - useful when a provider error and a wiring mistake look identical.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | sint | Description of the sound (max 500 characters). |
| sound_loopopt | BOOLEAN | false | Whether the generated sound loops seamlessly. |
| sound_tempoopt | INT | 1661–300 | Tempo in BPM (1–300). Omit for automatic tempo. |
| sound_keyopt | COMBO | Any | Musical key. Default "Any" (automatic). |
| grab_lyricsopt | BOOLEAN | false | Whether to capture the lyrics subtitles Will the interface be called after completion to obtain the lyrics subtitles? |
| 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 | — |