Generate sounds · V5
Not a song — loops, tempos and keys that fit your edit
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Ignore the word "music" for a second. This one is Suno's sounds endpoint, and the difference is practical: instead of a track with a structure, you get a sound asset you can loop under a clip. Riser, drone, ambient bed, drum pattern, a texture for a scene transition. It's the node you reach for when a video render is finished and silent, and you don't want a whole song - you want twenty seconds of atmosphere.
That job belongs to the same family as foley work - making audio that matches pictures rather than words - and it's the cheaper, more controllable end of it. Text-driven, deterministic-ish, and it comes back fast.
What it does
Standard pack behaviour: build the request, send it to KIE.ai under the transport model ai-music-api/sounds with V5 as the model version, then block and poll until the task finishes or timeout_seconds (default 1200 seconds) is exhausted. The result is downloaded and decoded into a plain ComfyUI AUDIO object, so SaveAudio, a preview node, or the audio input of a video-combine step all just work. Nothing loads on your GPU.
The five controls, all of which matter
prompt is required and short - the endpoint documents a 500-character limit, which is a sentence or two of description, not a paragraph.
sound_tempo (1–300, default 166) is the reason this node exists rather than the music generator. Set it to your edit's BPM and the loop lands on the beat instead of fighting it.
sound_key gives you 24 options: twelve minor keys (Cm, C#m, Dm …) and twelve major (C, C#, D …), default D#m. If the sound is going under existing music, match the key or it'll clash audibly.
sound_loop (default true) asks for a cycle rather than a one-shot - which is what you want for anything sitting under footage, and what you don't want for a one-off hit.
grab_lyrics (default true) is the odd one: the docs describe it as capturing lyric subtitles after completion, which normally means an extra call to fetch them. For an instrumental loop you're unlikely to need it; turn it off if you're minimising round trips.
Outputs
audio is the asset. all_urls_json keeps every URL the response returned, so if the call produced several variations you can pick a different one without re-running; audio is simply the first. url, task_id and raw_json cover linking and debugging, and credits_consumed plus credits_left tell you what it cost and what's still in the account - both also appear on the node face after a run, which is the nicest thing this pack does for anyone spending credits in bulk.
Getting it installed
ComfyUI Manager → search ComfyUI-KIE-Nodes-Next, or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Restart right after. Dependencies are requests, Pillow, numpy and PyYAML; there's no model directory to populate. Then paste your KIE.ai key in Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key - validated before saving, kept out of workflow JSON, shown masked. Headless installs can export KIE_API_KEY instead.
One pack-level note worth knowing: this node appears in the menu under KIE Next / Audio / Suno (not Music Generation) because its family in KIE's catalog is Sounds Generation. Same pack, same auth, same credit pool - just a different subfolder, which is why people think they've installed the wrong thing.
Caveats
V5 is a discontinued version. KIE's parameter docs list V5 and V5.5 as (Discontinued), with V6, V6_MINI and V6_WILD current. This node takes whichever version it was generated for; if a run fails with a model error, look for the V6 siblings under the same folder.
A loop is not a score. You get one asset per call, not a callback-engineered sequence, and there's no mixing control - drop it under your clip, cross-fade in your editor, done.
It's cheap but not free. Generating six candidate drones to audition is six paid calls. Once you know roughly what tempo and key you need, one or two tries is usually enough.
Metered API means your prompt leaves the machine. Same tradeoff as every hosted-model node; fine for a personal edit, worth a thought for client material under NDA.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | sint | Sound task type limit: 500 characters |
| sound_loopopt | BOOLEAN | true | Is it a cycle? |
| sound_tempoopt | INT | 1661–300 | Do not broadcast. |
| sound_keyopt | COMBO | D#m | 24 options: D#m, Cm, C#m, Dm, Em, Fm, +18 |
| grab_lyricsopt | BOOLEAN | true | 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 | — |