Suno Voice Generate Verification Phrase API
Your voice clone starts with a 10-second slice
- audio
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Step one of a Suno voice clone, and the step everyone underestimates. You give KIE a recording plus a time window, and it hands back a phrase for you to perform. Get the window wrong and the rest of the pipeline is built on a bad sample.
Voice cloning is the one audio job where the cloud still clearly beats local - the local TTS corner clones from about five seconds of audio and it's genuinely impressive, but "singing voice loaded into a song generator" is a different problem, and Suno is where that problem currently lives. KIE is the reseller you reach through, and this pack gives you each of its voice endpoints as its own node so you're not hand-writing JSON.
What it does
You supply a URL to the original recording and a start/end pair marking which seconds of it to use. KIE extracts that vocal segment, analyses it, and returns a short verification phrase - the thing you then have to sing back so the provider knows the voice is yours to use and that you can produce the material it needs.
That's the mechanism, and it's why the recording matters more than the settings. You're not training anything here, you're auditioning.
Inputs
Three required fields:
voice_url- the original recording, as a URL. The widget default is a placeholder example, so paste something real. Use KIE • Upload Audio upstream and wire itsurloutput in; that node turns a ComfyUIAUDIOobject into hosted 16-bit PCM WAV, which is exactly the format the API wants.vocal_start_s- where the useful voice starts, in seconds. Default 0.vocal_end_s- where it ends. Default 10, and the tooltip is explicit that it must be greater than the start.
Ten seconds is a fine default and a reasonable target: enough to characterise a voice, short enough that you can hear whether the window clipped a breath or landed on a backing vocal. If your source is a full song, don't hand over the whole thing - cut a clean, dry, solo stretch.
language is the one optional setting worth thinking about: en by default, with zh, es, fr, pt, de, ja, ko, hi and ru supported. Set it to the language you're actually singing in, because the phrase it generates gets verified against your performance.
timeout_seconds (30–7200, default 1200) and callback_url round it out; leave the callback empty in ComfyUI.
Outputs
The pack's standard seven: audio, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left.
In practice you care about two. task_id is the handle for the next step - the custom-voice node wants it - so wire it rather than retyping it. And raw_json is where the actual phrase text shows up; also check url/audio for a playable version of it, since you may want to hear the phrase before attempting to sing it. Wire audio into a core Save Audio or preview node.
Install
Shared with the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart, then paste your API key once under Settings → KIE.ai Nodes Next → Connection. Dependencies are just requests, Pillow, numpy and PyYAML; nothing downloads, because all the compute is remote. ComfyUI Manager can handle the install - search the pack title.
Common problems
The most common failure is a vocal_start_s/vocal_end_s pair that produces an unusable segment: reversed values, a window sitting in an instrumental intro, or two different vocalists inside the slice. The node will happily submit it and you'll get a phrase back, but the clone downstream will be mush. Listen to the slice first.
The second is a voice_url KIE can't fetch. Publicly reachable URLs only - a path to a file on your own machine is not a URL, no matter how correct it looks in the widget.
The third is honestly a category-level risk rather than a bug: this pack discovers its nodes from KIE's live documentation and refreshes daily, so voice endpoints can be renamed or retired between sessions. When the inputs stop matching what you see in your graph, sync the catalog and look at what the endpoint accepts now.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| voice_url | STRING | https://example.com/audio/user_voice.mp3 | The original recording URL uploaded by the user [Required] |
| vocal_start_s | INT | 0-2147483648–2147483647 | Start time (in seconds) for extracting the vocal segment [Required] |
| vocal_end_s | INT | 10-2147483648–2147483647 | End time (in seconds) for extracting the vocal segment, must be greater than vocal_start_s [Required] |
| languageopt | STRING | en | Verify the language of the short phrase. Supported languages include: English (en), Chinese (zh), Spanish (es), French (fr), Portuguese (pt), German (de), Japanese (ja), Korean (ko), Hindi (hi), and Russian (ru). |
| 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 | — |