Convert to WAV Format
Getting a Suno Track Out as a Real Audio File
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Suno hands you an MP3. If you're cutting that track into a video, pitching it, or feeding it to anything downstream that would rather not transcode lossy audio, you want the WAV - and that's a separate, billable task on KIE's Suno API. This node is the button for it.
What it's for
You've generated music with one of the pack's Generate Music · V* nodes and you want the uncompressed render for editing. Suno's platform offers that conversion; through KIE's API it's an endpoint, and the pack turns each documented endpoint into a node. Category says Suno because it is Suno's - you're asking the platform to re-render that specific generated track at higher fidelity, not converting a local file.
That distinction matters: this node does not take an AUDIO socket. You can't hand it the audio you already have in your graph. It works from the identifiers of a Suno task.
Inputs and outputs
Both inputs are required and both are strings:
task_id- the ID of the music generation task. The tooltip is explicit that this should be atask_idreturned from Generate Music or Extend Music. In practice: connect thetask_idoutput of your Suno generation node straight in.audio_id- the ID of the specific track within that task. The tooltip says it's returned in the callBackUrl data once generation completes, which means it is not a socket on the generation node - it's inside that node'sraw_jsonoutput. That's the fiddly bit of this node. Open the raw JSON, find the audio entry, copy the id.
Optional: timeout_seconds (default 1200, range 30–7200, step 30) and callback_url (leave empty - the tooltip says the same; it's for server-side webhook setups, and the node polls and waits when you don't set it).
Outputs: audio is a real ComfyUI AUDIO object, which is the headline - wire it into a Save Audio node, a stem-separation node, or the ElevenLabs isolation node. url gives you the WAV's download URL, all_urls_json collects every URL the task returned, task_id passes through, raw_json is the full response, and credits_consumed / credits_left are the floats with the on-node credits receipt.
How it works
It's a KIE Market task: the node submits the createTask call, polls until the job completes, then downloads the returned audio and decodes it into ComfyUI's standard AUDIO dict. Download and decode go through the shared media layer, which archives results under output/KIE-Results/audio/ with content-addressed filenames so a successful generation survives ComfyUI's temp-folder cleanup - and falls back to torchaudio, then PyAV, when decoding. Both usually ship with ComfyUI already.
Install
ComfyUI Manager → ComfyUI-KIE-Nodes-Next. Registry publishing is prepared but not shipped per the README:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart, then Settings → KIE.ai Nodes Next → Connection for the one-time key. Python 3.10+. Unlike the model nodes, Suno utilities come from the catalog sync - they're in the packed catalog, so they appear on a normal first start.
Common issues
"Where's the audio_id?" In the generation node's raw_json. There's no dedicated output socket for it yet, and this is the single most annoying thing about the node. Run the generation, click into the raw JSON, grep the response for the audio id.
Provider says the task doesn't exist. The conversion works from a task KIE still knows about. Use a fresh generation's IDs, not something you saved months ago. And don't hand it a Comfy audio object - it wants a task, not art media.
Decode error after a successful task. The error names the URL it failed to decode, and the media layer tries torchaudio first, then PyAV. If both are missing from your ComfyUI build, that's an unusual install; update ComfyUI.
It bills. Every run is a metered task on KIE's side, including a re-run. Get the IDs right the first time.
Slower than you expect. timeout_seconds defaults to 1200 for a reason - the node waits for the task rather than returning immediately. Leave callback_url empty unless you're running your own webhook.
Do you even need this? If you're only saving the track for personal listening, an MP3 is fine and the WAV is a bigger file for no audible gain. The WAV starts earning its keep the moment the audio gets edited, pitched, or cut against video - which, in a ComfyUI pipeline, it usually does.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| task_id | STRING | 5c79****be8e | Unique identifier of the music generation task. This should be a task_id returned from either the "Generate Music" or "Extend Music" endpoints. |
| audio_id | STRING | e231****-****-****-****-****8cadc7dc | Unique identifier of the specific audio track to convert. This ID is returned in the callBackUrl data after music generation completes. |
| 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 | — |