Suno Create Voice (Ace Data Cloud)
Suno Create Voice turns one audio clip into a singer you can reuse
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
Voice cloning is the one audio job where the local stack genuinely closed the gap - Chatterbox clones from about five seconds of reference audio and people happily rate it against ElevenLabs. Singing is a different animal, and this node is the hosted shortcut: hand it a hosted audio file and a name, and you get back a voice you can point future song generations at.
Suno Create Voice (Ace Data Cloud) is the register-a-voice call. It's the sibling of Suno Create Persona, and the distinction is worth holding onto: a voice is a timbre pulled out of a clip, a persona is a whole identity built around an existing track, optionally from an extracted vocal. If you have a clean acapella and want that sound available later, this is the node.
Inputs
Alongside parameters_json, three named fields:
audio_url- the only field the API contract requires. A hosted https URL to the source audio, not a local file path and not an audio ID. If you want to clone from something you generated in this graph, you'll need that file reachable over the network first.name- what to call the voice in your library.description- free text.
Everything else goes in parameters_json as a JSON object, and the pack is strict about what it accepts: it validates the payload against the published API contract before a single request goes out, and it rejects unknown or out-of-branch fields rather than silently forwarding them. That's why the failure mode for these nodes reads like grammar homework instead of an API error - see the troubleshooting below. The precedence rule is simple: a non-empty named field wins over the same key in the JSON, and empty named fields are dropped entirely.
Outputs
Six strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id. For a voice, result_json is where the new voice's ID ends up; keep it, because that ID is the input to later generation calls. media_urls_json exists because these tool responses are wildly inconsistent about shape - sometimes a job, sometimes a list of files - so the node preserves every media link it can find from the response and also dumps the cleaned payload as JSON for whatever string or JSON node you own.
One honest note about scope: this node creates voices. Listing, retrieving and preset lookups live in the same published contract, and the pack lets you reach them by putting an action in parameters_json - but they aren't promoted to widgets here, so if you want to browse what you've created, the Ace console is the less fiddly route.
Install
Part of SunoComfyUI; you don't install it separately. Manager → Custom Nodes → search Suno → publisher acedatacloud, package Suno by Ace Data Cloud (Registry ID ace-suno) → install → restart. Source:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/SunoComfyUI.git
cd SunoComfyUI
python -m pip install -r requirements.txt
requests and jsonschema, no model downloads, no GPU. Key in the ComfyUI process environment:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
Voices live at /suno/voices - allow that path if your Ace application restricts endpoints.
When it goes wrong
Validation errors before the request. parameters_json must contain a JSON object. means you handed it something that isn't an object - a bare string, an array, or a trailing comma. Invalid <field>: does not meet the API's <constraint> means the API's contract disagrees with what you sent, most often because a named widget still holds a value that this call has no use for. Clear the fields you're not using.
401/403. Key access, path restrictions, or no Suno service on that application. It's never a "try again in a minute" error.
A voice that doesn't sound like the reference. Nothing in this node controls quality, and the contract only asks for a URL - so the clip is what you have to work with. A clean, single-singer excerpt beats a full mix, and a longer clip isn't automatically a better one. If you have a track with instruments over the vocal, extracting the voice first with Suno Create Vox Audio gives the modelling something honest to work from.
You made a bunch of test voices you now want gone. Don't look for a delete here - voice cleanup isn't in this node's field list. Deletion exists for personas (Suno Delete Persona) and for custom models. For voices, the console is the tool.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| audio_url | STRING | — | |
| name | STRING | — | |
| description | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| media_urls_json | STRING | — |
| first_media_url | STRING | — |
| result_json | STRING | — |
| trace_id | STRING | — |