Nodes/SunoComfyUI/Suno Get Timing (Ace Data Cloud)
ComfyUI Node

Suno Get Timing (Ace Data Cloud)

Beat and lyric timing, for when cuts have to land on the music

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Suno Get Timing (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄audio_id►

    Everybody who has ever cut a video to music has done the same thing: listen, scrub, drop a marker, curse, repeat. Suno Get Timing (Ace Data Cloud) is the node that says the machine already knows where the beats and the words are - ask it instead of guessing.

    It returns timing information for a track you generated. In a workflow where the audio and the video are both produced by an AI pipeline, that's the difference between a slideshow and a cut that lands.

    Inputs

    • audio_id - required by the contract. The ID of an existing track, which you'll find in the result_json of a generation call. Not the track URL, not a task ID.
    • parameters_json - default {}. Here it's essentially vestigial: this contract exposes nothing beyond audio_id, and the JSON is validated against it, so stray keys are rejected rather than forwarded.

    Note what this node does not have, compared to its siblings: no callback_url, and no async flag in the contract, so there's no background job to poll for. The timing data comes back with the response. That makes it the most pleasant node in the conversion family to wire up.

    Outputs

    The six tool-node strings: status, task_id, media_urls_json, first_media_url, result_json, trace_id.

    Timing is structured data, not a file, so the payoff is in result_json - JSON, cleaned of internal fields on the way out. Expect empty media outputs; this isn't a node that produces audio or video. From there it's string-and-JSON plumbing into whatever consumes it: a node that splits cuts on timestamps, a text preview to read the numbers, or a script of your own outside ComfyUI.

    Being realistic about the wiring: this node hands you JSON and the pack has no node that interprets timing for you. If your plan is "auto-cut my video on the downbeats," you're writing that logic. What you're saving is the analysis step, not the assembly.

    Why it's worth knowing about

    Generated songs are structurally different from songs you write. A model produces a plausible verse-chorus shape without a human's sense of where a phrase wants to breathe, and in a video context that matters: the moment you want to cut is often the moment the lyric starts, not the bar line. Having the service tell you where the sung words land saves you from marking every one by ear.

    It's also the honest way to sync a lip-synced or performance-style clip - you need to know where the vocal actually is before you can pretend a face is singing it. That whole job is a well-trodden part of the ComfyUI ecosystem, and the audio side of it always turns into "get the timing right first."

    Timing data is not MIDI, though. If what you want is notes and chords you can re-arrange, that's Suno Get Midi. This is about when things happen, not what was played.

    Install

    Ships in SunoComfyUI. 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, and nothing else - no models, no GPU, no downloads. Key in the ComfyUI process environment, then restart it:

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

    If your Ace application restricts API paths, this one needs /suno/timing.

    When it goes wrong

    Invalid audio_id: does not meet the API's ... constraint. An empty or wrong-kind ID. This is by far the most common failure across the whole conversion family, and it's always the same fix: get the audio ID out of the generation response, don't retype it.

    parameters_json must contain a JSON object. You edited the box. Leave it at {} - there's nothing to put in it.

    result_json is populated but you only see escaped quotes. That's JSON-as-a-string inside a text preview. Pipe it into a JSON-parsing node rather than reading it raw, or you'll spend ten minutes convinced the data is malformed.

    HTTP 401/403. Key or service access. 429 means wait, and keep the same request in mind rather than re-firing it - billable calls aren't retried automatically, but they're easy to send twice by hand.

    CategoryAce Data Cloud/Suno

    Inputs (2)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    audio_idSTRING—

    Outputs (6)

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