Zhenzhen Suno Upload
Feed your own audio into Suno, one signed S3 upload at a time
- audio
- clip_id
- title
- tags
- lyrics
- response
The Suno nodes that remix or extend music need a starting point, and that starting point is a clip_id. Comfly_suno_upload is how you create one from audio you already have: it takes an AUDIO object from your ComfyUI graph, uploads it to Suno's storage through a presigned S3 flow, and returns a clip_id ready to feed into Comfly_suno_cover or Comfly_suno_upload_extend.
Under the hood it's a small dance: get an upload URL from the relay, encode your audio to MP3 with torchaudio, PUT it to a signed S3 bucket, then ping the status endpoint until the clip is initialized. It's the most mechanical node in the pack and it mostly just works - which is exactly what you want from an uploader.
Inputs and the one hard rule
audio- anyAUDIOtensor from the canvas (a loaded track, a VHS output, whatever).upload_filename- sets the extension; it drives what Suno thinks it's receiving, so leave it asaudio.mp3unless you know better.seed- reproducibility (doesn't affect the upload itself).api_key- optional, as always.
The rule that bites: the README says uploaded audio must be between 6 and 60 seconds. Too short and Suno refuses to initialize the clip; too long and it truncates or errors. Trim before you upload, not after. Anything you generated in this pack that's longer than a minute needs cutting down first.
Outputs
clip_id is the one you care about - pipe it into the cover_clip_id input of Comfly_suno_cover or the clip_id of Comfly_suno_upload_extend. It also returns title, tags, and lyrics read back from the clip's metadata (often empty for a fresh upload, don't panic), plus response for the JSON status and any error.
Install
Same pack, same dance:
cd ComfyUI/custom_nodes
git clone https://github.com/ainewsto/Comfyui_Comfly
or ComfyUI Manager → search "Comfyui_Comfly" → install → restart. API key from ai.comfly.chat in the optional api_key field, persisted to Comflyapi.json.
Where people get burned
Two things. First, the 6–60s window - the node does not validate it for you, and an out-of-range file fails deep in the pipeline with a generic error in response. Second, the cross-account problem the README calls out explicitly: a clip you upload yourself may not work as a cover source when the request runs under a different account token. If a cover comes back empty after a successful upload, that's almost certainly it. And since this is a relay pack, the whole upload path depends on the service being up - a failed presigned URL means retry the node, not your local stack. It's fiddly at the edges, but the flow is genuinely nice when it lines up: your audio in, clip_id out, remix heaven after.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| api_keyopt | STRING | — | |
| upload_filenameopt | STRING | audio.mp3 | — |
| seedopt | INT | 00–2147483647 | — |
| skip_erroropt | BOOLEAN | false | 开启后,节点失败时不报错、按旧行为返回默认空结果;关闭时(默认)失败直接抛出错误。 |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| clip_id | STRING | — |
| title | STRING | — |
| tags | STRING | — |
| lyrics | STRING | — |
| response | STRING | — |