Suno Generate Lyrics (Ace Data Cloud)
Same lyrics, more places to put them
- status
- task_id
- media_urls_json
- first_media_url
- result_json
- trace_id
There are two nodes in this pack called Suno Generate Lyrics (Ace Data Cloud), which is a naming decision only a schema generator could love. This is the tool-node one - the same lyrics request as the guided node, wearing the schema-backed costume the other nineteen share. You get three inputs instead of two and six outputs instead of four, and the whole difference boils down to where the words come out.
If you just want lyrics on the canvas, the simpler node is fine. Reach for this one when you're plumbing the result into something else.
Inputs
prompt- multiline, required by the contract. Your brief: what the song is about, not the lyrics themselves.model-(from JSON/default),default, orremi-v1. The sentinel hands the choice toparameters_jsonor the contract default, which isdefault.parameters_json- default{}. Validated against the published API contract before the request, so a malformed object fails locally (parameters_json must contain a JSON object.) rather than costing you a round trip.
The rules are the pack's standard ones: a non-empty named field overrides the same key in the JSON, empty named fields are dropped from the request entirely, and nothing gets sent that the contract doesn't permit.
Outputs
Six strings, no media because there is no media in a lyrics job - but the two JSON outputs are the point:
status-succeededif the lyrics came back on the same call,pendingif the service queued the job.task_id- populated only in thependingcase. Feed it to a retrieve node.media_urls_json- a JSON array of any media links in the response. Usually[]for lyrics, but it's the general-purpose "did the service hand me a file" output.first_media_url- the first element of that array, or an empty string.result_json- the cleaned response, JSON-encoded, with internal fields (supplier routing, credentials-ish keys, raw request echoes) stripped out by the client before you ever see it. This is where your lyrics are.trace_id- the console handle.
Compare that with the guided node, which hands you a single lyrics_json string. Both contain the words; this one also gives you the status and the media-URL plumbing, which matters if you're inside a bigger automation and want the same output sockets as every other tool node in the graph.
The awkward bit, and it's worth being blunt about it: lyrics come out of result_json as JSON, so unless you're parsing strings you'll be squinting at escaped quotes in a Preview as Text. That's the price of a uniform interface across nineteen heterogeneous API tools.
Which lyrics model
Two choices, default and remi-v1. The pack doesn't editorialise, the API prices them, and - worth knowing before you go researching - remi-v1 pulls literally zero threads in the community corpus, so there's no consensus to lean on. Try one, try the other, pick the one whose verse structure stops repeating itself.
Install
Part of SunoComfyUI. 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 - the copied contract is what the validator uses, and it's the only reason jsonschema is in the list. No models, no GPU. Key in the ComfyUI process environment:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
Lyrics hit /suno/lyrics, one of the three paths the README suggests allowlisting.
When it goes wrong
Invalid prompt: does not meet the API's ... constraint. The field is required and you left it empty.
does not meet the API's additionalProperties constraint. A named widget is holding a value this call can't use. Empty the fields you aren't using; don't leave yesterday's experiment in the node.
pending and nothing else. Normal, and the node deliberately doesn't poll. Query the task ID - that read is free and retries automatically.
Ace Data Cloud HTTP 401. Key, path restriction, or the application lacks Suno service access. Console, not canvas.
Empty-looking result_json. Check status first. A completed task with no lyric text raises an error rather than handing you an empty string, so an empty result usually means you're looking at the wrong output socket rather than a broken service.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| parameters_json | STRING | {} | — |
| model | COMBO | (from JSON/default) | 3 options: (from JSON/default), default, remi-v1 |
| prompt | 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 | — |