Nodes/ComfyUI-BytePlus-ModelArk/BytePlus Seedance Text to Video
ComfyUI Node

BytePlus Seedance Text to Video

The cheap shot, and why you might still want it

By byteplus-sa·Created 8 days ago·Updated about 8 hours ago· 3
BytePlus Seedance Text to Video
    • VIDEO
    • last_frame
    • response
    ◄modelseedance-1-0-pro-fast-251015►
    ◄prompt—►
    ◄resolution▾►
    ◄aspect_ratio▾►
    ◄duration5►
    ◄seed0►
    ◄camera_fixedfalse►
    ◄watermarkfalse►
    ◄enable_offline_inferencefalse►
    ◄generation_count1►
    ◄non_blockingfalse►

    Seedance 2.5 is the headline. This is the generation you use when you need a lot of B-roll and you're paying by the second: six seconds of a coffee cup steaming, a shot of traffic for a title card, a background plate for a talking head. Seedance 1.0, and specifically seedance-1-0-pro-fast, is the sweet spot for that - cheaper per second than the 2.x line, quick to render, and entirely good enough when the clip is going to be behind text anyway.

    It's also the node where the pack's design philosophy is clearest: these nodes match ComfyUI's built-in ByteDance partner nodes input for input, but they call BytePlus with your key and bill your BytePlus account. If you already have BytePlus contract pricing, that's the whole argument.

    How it works

    Prompt in, video out, no reference media, no uploads, no Comfy.org login anywhere in the path. The node submits the task, the pack's executor polls it, and progress shows on the node itself.

    model is a plain picker here rather than the 2.5 family's dynamic combo - seedance-1-0-pro or seedance-1-0-pro-fast - and the default is the fast one, which tells you what the author thinks this node is for.

    • prompt drives everything. Describe camera movement explicitly, because 1.0's shot understanding is thinner than 2.5's.
    • resolution runs 480p to 1080p. aspect_ratio handles the framing, and duration takes 2 to 12 seconds. Short clips are where this model shines; the longer you ask, the more likely you get drifting motion.
    • camera_fixed is the sneaky-important one. It appends a "fix the camera" instruction to your prompt - and the tooltip is honest that BytePlus doesn't guarantee the model obeys. On a locked-off B-roll shot it helps a lot; on a tracking shot, turn it off.
    • enable_offline_inference uses the flex tier: a lower price in exchange for results coming back within 48 hours. That's genuinely useful for batch work you don't need now, and a trap if you're iterating.
    • watermark adds the "AI generated" mark. generation_count fires parallel generations, each on seed + N, and non_blocking submits and returns so you can collect later.

    Outputs: VIDEO (a list when you generate more than one - the next node runs once per video), last_frame (final frames as one image batch, for chaining or for a thumbnail), and response (the task JSON).

    Install and key

    cd ComfyUI/custom_nodes
    git clone https://github.com/byteplus-sa/ComfyUI-BytePlus-ModelArk
    pip install -r ComfyUI-BytePlus-ModelArk/requirements.txt
    

    Restart (ComfyUI 0.31.0 or newer), or install through Manager by searching BytePlus ModelArk. Save the ModelArk API key and its region in Settings → BytePlus - ap-southeast-1 by default, eu-west-1 if that's where your key lives - or write BYTEPLUS_API_KEY / BYTEPLUS_REGION into user/.env. Then enable the model in the ModelArk console.

    Nothing is saved automatically: connect a Save Video node. And a node whose output isn't consumed doesn't run, so this one costs nothing while it sits there unwired.

    Where people get burned

    Model deprecation, first and foremost. BytePlus retires Seedance generations on a schedule - the 1.5 Pro generation was deprecated in September 2026 with a shutdown in November, and the pack keeps its task history visible in Video Query Tasks purely so old jobs can still be found. If a tutorial tells you to paste a model ID that isn't in the picker, that's why. Stay on the IDs the node offers.

    Second, seed: it decides whether the node re-runs, not what you get. BytePlus results aren't reproducible from it. Change the seed to force a new render; don't expect the same render twice.

    Third, a cost note that surprises people: generation_count isn't "give me options, I'll keep one" at a discount. It's N fully billed generations, returned as a batch. On video, draft or plan before you turn that dial up.

    And the honest tradeoff - this node is the cheap option, not the good one. For anything with a person, a face, or dialogue, 2.5's 30-second clips and generated audio are in a different league. Reach for 1.0 when you need volume, coverage and speed, and you're treating the model as a plate rather than a performer.

    CategoryBytePlus ModelArk

    Inputs (11)

    NameTypeDefaultDescription
    modelCOMBOseedance-1-0-pro-fast-2510152 options: seedance-1-0-pro-250528, seedance-1-0-pro-fast-251015
    promptSTRINGThe text prompt used to generate the video.
    resolutionCOMBOThe resolution of the output video.
    aspect_ratioCOMBOThe aspect ratio of the output video.
    durationINT52–12The duration of the output video in seconds.
    seedoptINT00–2147483647Seed to use for generation.
    camera_fixedoptBOOLEANfalseSpecifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect.
    watermarkoptBOOLEANfalseWhether to add an "AI generated" watermark to the video.
    enable_offline_inferenceoptBOOLEANfalseUse the flex (offline) service tier: lower price, results within 48 hours.
    generation_countoptINT1Number of separate generations to run in parallel. With several, generation N uses seed + N so the results differ.
    non_blockingoptBOOLEANfalseSubmit the task and return at once; run the node again to collect the finished video.

    Outputs (3)

    NameTypeDescription
    VIDEOVIDEOThe generated video, or every video of a generation_count batch (the next node runs once per video).
    last_frameIMAGELast frame of each generated video, as one image batch in the same order as the videos.
    responseSTRINGTask results as JSON, or the pending task IDs of a non_blocking run.