Nodes/SunoComfyUI/Suno Generate Audios (Ace Data Cloud)
ComfyUI Node

Suno Generate Audios (Ace Data Cloud)

21 operations and 39 fields behind one dropdown

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Suno Generate Audios (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄model(from JSON/default)►
    ◄action(from JSON/default)►
    ◄lyric►
    ◄max_mode►
    ◄variety►
    ◄style►
    ◄variation_category►
    ◄title►
    ◄custom►
    ◄prompt►
    ◄lyric_prompt►
    ◄audio_id►
    ◄stem_type►
    ◄audio_format►
    ◄sound►
    ◄sound_type►
    ◄bpm►
    ◄key►
    ◄speed_multiplier►
    ◄keep_pitch►
    ◄mashup_audio_ids►
    ◄audio_urls►
    ◄weirdness►
    ◄persona_id►
    ◄overpainting_start►
    ◄overpainting_end►
    ◄samples_start►
    ◄samples_end►
    ◄underpainting_start►
    ◄underpainting_end►
    ◄continue_at►
    ◄callback_url►
    ◄instrumental►
    ◄vocal_gender►
    ◄negative_tags►
    ◄style_influence►
    ◄audio_weight►
    ◄duration►
    ◄replace_section_end►
    ◄replace_section_result_mode►
    ◄replace_section_start►

    Scroll past the five friendly nodes in the node picker and you hit this monster. Suno Generate Audios (Ace Data Cloud) is the full API surface as a single node: generate a fresh song, extend one, cover somebody else's, split stems, adjust speed, remaster, mashup, replace a section, and about a dozen more things - all selected by an action dropdown, all sharing the same field soup below it.

    It looks intimidating, and honestly it is. But it's also the node that does everything the guided submit node can't: no 500-character prompt cap, every music model, every advanced field the API accepts.

    Why it exists next to the simpler node

    The guided path - prompt, model, instrumental, task ID - covers most of "make me a song." What's left is where music generation gets interesting and where the local alternative is weakest: editing a track that already exists. Extend it past its ending, cover it in a different style, pull the vocals out, swap a bad verse. Local open music models are impressive at making music; surgical editing of a finished song is a hosted-service strength, and that's the surface this node fronts.

    Worth saying plainly that the community conversation about Suno is nearly all about the output, not the plumbing: suno shows up in roughly 1,177 threads across the corpus through July 2026 and the numbers climb, while the pack's vendor name draws zero. People want the songs. This node is how a song enters a graph.

    Mechanism

    Everything goes to POST /suno/audios on api.acedata.cloud, authenticated with your key as a Bearer token read from the process environment. For non-query actions the client sets async: true, so what you get back is a task, not audio. Paid submissions are sent once - the client's retry logic only covers read-only queries - and every payload is validated against the published Dify API contract before the request goes out.

    The inputs that matter

    parameters_json (default {}) plus two selectors and a long list of named fields. The two selectors both default to (from JSON/default), a sentinel meaning "take it from the JSON or the contract's default":

    • action - 21 options: generate, extend, upload_extend, upload_cover, concat, cover, artist_consistency, artist_consistency_vox, stems, all_stems, add_stem, extract_stem, sounds, adjust_speed, replace_section, underpainting, overpainting, remaster, mashup, samples, inspo.
    • model - the same ten chirp IDs as the guided node.

    The fields you'll actually touch first, with the contract's own limits:

    • prompt - free text, and notably uncapped here, unlike the guided node. This is the reason to open this node at all if your style brief is a paragraph.
    • style - the style string; lyric is the words; title is the title. lyric_prompt asks the service to write lyrics for you.
    • instrumental and vocal_gender (f or m) decide whether there's a singer and who.
    • duration - 10 to 360 seconds. bpm - 1 to 300. key, negative_tags.
    • weirdness and style_influence - both 0 to 1. weirdness is the one people fiddle with: above roughly 0.5 the model starts taking liberties, which is either the point or a disaster, but it is never subtle.
    • persona_id - reuse a persona you built with Suno Create Persona.
    • audio_id, continue_at, stem_type - the ones that matter the moment you stop generating and start editing.

    Every named field is a string widget, and the client coerces it to the contract's type, so 0.7 becomes a number and true becomes a boolean. Non-empty named fields override the JSON, and empty ones are omitted from the request instead of being sent as empty strings.

    The one rule to internalise: only fill fields that belong to your chosen action. The contract is a strict oneOf, so a leftover stem_type on a generate call is a validation error, not a harmless extra.

    Outputs

    Six strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id. Take task_id to Suno Retrieve Task, or skip polling entirely by using first_media_url for jobs that come back inline. media_urls_json exists because a submission can return multiple tracks, and the guided nodes' "first track wins" shortcut would throw the rest away.

    Install

    Same pack, same one-time setup. Manager → Custom Nodes → search Suno → publisher acedatacloud, package Suno by Ace Data Cloud (Registry ID ace-suno) → install → restart. From 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 - that's the entire dependency list, no model downloads, no GPU work. Key into the ComfyUI process environment and restart:

    export ACEDATACLOUD_API_KEY='paste-your-key-here'
    python main.py
    

    Allow /suno/audios if your Ace application restricts paths, and check the per-model price before pointing model at a legacy chirp ID.

    When it goes wrong

    A validation error naming a field you don't recognise. You have a stale value in a widget. Empty it. Validation happens locally before the request, so it's free.

    does not meet the API's pattern constraint on a URL field. URL-ish fields require https:// and some require it explicitly - plain http:// fails.

    Nothing happened and the queue is green. Expected: this is an async submission. The song lives behind the task ID.

    A rejected request. Content policy, account access, or a model your application can't reach. Check the trace ID in the Ace console before re-running, and remember the node will not repeat a paid call for you - but it also won't repeat one it already sent when the connection died, so a timeout means "go look," not "run it again."

    CategoryAce Data Cloud/Suno

    Inputs (42)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    modelCOMBO(from JSON/default)11 options: (from JSON/default), chirp-v6, chirp-v6-wild, chirp-v6-mini, chirp-v5-5, chirp-v5, +5
    actionCOMBO(from JSON/default)22 options: (from JSON/default), generate, extend, upload_extend, upload_cover, concat, +16
    lyricSTRING—
    max_modeSTRING—
    varietySTRING—
    styleSTRING—
    variation_categorySTRING—
    titleSTRING—
    customSTRING—
    promptSTRING—
    lyric_promptSTRING—
    audio_idSTRING—
    stem_typeSTRING—
    audio_formatSTRING—
    soundSTRING—
    sound_typeSTRING—
    bpmSTRING—
    keySTRING—
    speed_multiplierSTRING—
    keep_pitchSTRING—
    mashup_audio_idsSTRING—
    audio_urlsSTRING—
    weirdnessSTRING—
    persona_idSTRING—
    overpainting_startSTRING—
    overpainting_endSTRING—
    samples_startSTRING—
    samples_endSTRING—
    underpainting_startSTRING—
    underpainting_endSTRING—
    continue_atSTRING—
    callback_urlSTRING—
    instrumentalSTRING—
    vocal_genderSTRING—
    negative_tagsSTRING—
    style_influenceSTRING—
    audio_weightSTRING—
    durationSTRING—
    replace_section_endSTRING—
    replace_section_result_modeSTRING—
    replace_section_startSTRING—

    Outputs (6)

    NameTypeDescription
    statusSTRING—
    task_idSTRING—
    media_urls_jsonSTRING—
    first_media_urlSTRING—
    result_jsonSTRING—
    trace_idSTRING—