Suno Generate Lyrics (Ace Data Cloud)
Suno Generate Lyrics sometimes answers instantly and sometimes hands you a job number
- status
- task_id
- lyrics_json
- trace_id
Here's the thing that confuses people about this node: it has two completely different success shapes, and which one you get isn't up to you.
Suno Generate Lyrics (Ace Data Cloud) takes a one-line idea and returns either finished lyrics, right now, on the same run - or a task_id with an empty lyrics_json, which you then query with Suno Retrieve Lyrics. Same node, same inputs, different outcome. If you're building a workflow around it, handle both, because a graph that assumes the instant path will randomly return nothing useful.
Why it's here
The KB is blunt about where music generation hurts: even the best local model is instrumentals-first, and the complaint that follows every open and hosted song generator around is the words. audio-generation.md quotes the recurring shape of it - great sound, "the lyrics are absolute garbage" - and notes the hosted route still wins the job where you need a believable song with vocals.
Lyrics are the cheapest, fastest part of that chain to get right separately. Write them here, read them, hate them, regenerate for a fraction of the price of a full track, then feed the ones you like into a generation node. The pack even exposes a style-enhancer node, so you can assemble the brief and the words before spending anything on audio.
Inputs and outputs
Two inputs, both required:
prompt- multiline, defaultA hopeful song about finding a new home.It's a brief, not lyrics. Describe the song you want words for.model- a two-item enum:defaultandremi-v1, withdefaultas the out-of-the-box choice. There are only two, both hitting the same endpoint, and the pack doesn't editorialise on which is better - so try the other one ifdefaultkeeps writing the same verse twice. Don't expect much discussion of either name:remi-v1registers zero threads in the community corpus, so nobody's writing comparison posts for you.
Four outputs, and the important detail is that lyrics_json is a JSON string, not a formatted block of text:
status-succeededorpending.task_id- empty when the lyrics came back inline; that's why the canvas readout says "completed synchronously".lyrics_json- the lyrics payload, JSON-encoded, with internal task fields stripped out before it's handed to you.trace_id- for the console's request history.
Wire lyrics_json into a text/JSON node, or straight into a Preview as Text to read it on the canvas. Chain task_id into Suno Retrieve Lyrics when it's non-empty.
One thing worth knowing about the payload: the pack filters the API's response down to customer-facing fields (title, lyric, lyrics, text, content, result and friends) before serialising it. So the JSON you see is deliberately narrower than the raw response - that's the filter working, not a truncated result.
Install
Manager → Custom Nodes → search Suno → publisher acedatacloud, package Suno by Ace Data Cloud (Registry ID ace-suno) → install → restart. Or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/SunoComfyUI.git
cd SunoComfyUI
python -m pip install -r requirements.txt
Two dependencies - requests and jsonschema - and no models. The lyrics endpoint is one of the three the README tells you to allow if your Ace application restricts paths (/suno/lyrics), alongside /suno/audios and /suno/tasks. Key into the process environment, then restart:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
When it goes wrong
A lyrics prompt is required. Blank or whitespace prompt. Straightforward.
No task ID or lyrics were returned. The API answered without either - which the pack treats as an error rather than an empty success, with the standing advice to check request history before resubmitting. Lyrics requests are metered too, just more cheaply than songs.
pending and you forget about it. The node explicitly does not poll. That's what Suno Retrieve Lyrics is for, and re-running it is a read-only query.
Suno rejected the lyrics request. Same family as the music node's rejection: key access, path restriction, content policy, or account state. Look at the trace ID in the Ace console instead of hammering Run.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A hopeful song about finding a new home. | — |
| model | COMBO | default | 2 options: default, remi-v1 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| lyrics_json | STRING | — |
| trace_id | STRING | — |