Protoface Seedance 2.0 Fast · Image to Video
The Cheap Seat on a Very Good Model
- video
- files
- run id
Seedance is ByteDance's video model and it has never had open weights - the whole Seedance line is API, going back to the first release. It's also one of the two or three closed video models the open-source community measures itself against, which is why "Seedance" turns up in over seven hundred threads in the KB's corpus even though nobody can run it. This node is the image-to-video entry point, in the Fast tier.
What Fast means, and why it matters here
Fast is the speed-optimised tier with the same generate/animate/edit/extend operations at lower cost. That framing is doing a lot of work, because the loudest complaint about Seedance arriving in ComfyUI was price - the canonical community reaction in the KB is a user opening their wallet, doing the arithmetic, and reporting "a really small number of videos per year" for a monthly sub, with the reply that this is just the true cost of the render surfacing after years of subsidised pricing.
So: base tier for iteration, and don't pretend otherwise. Twenty attempts at a five-second clip is a normal working session, and the tier exists precisely because doing that on the top model is a bad idea.
Mechanism
No Seedance in the pack. Protoface ships a catalog of model/task request schemas and generates native ComfyUI nodes from each pairing at startup - bytedance/seedance-2.0-fast × video.animate for this one. Every node runs the same adapter: encode your IMAGE to PNG, upload it if the content hash isn't already cached, validate the payload against the schema before submission, submit, poll with a progress bar, download, decode into a native VIDEO.
Underneath that, a journal in local SQLite records each request's identity before it leaves - account, request_scope, node id, generation_id, model, schema fingerprint, payload hash. That's what makes requeueing after a crash resumable rather than a second charge, and it's the single most important piece of behaviour to understand about a paid node.
Inputs
prompt - describe scene, action, camera movement and mood; that's the author's own framing in the tooltip and it's good advice. The image supplies who and where, so the prompt should supply the verbs.
image - your start frame. It's a mode field: Image for a native socket (Load Image, a local generation, a composite), References for a Protoface Asset Reference. One asset only; a batch throws "expects one asset; split the image/audio batch first".
last_image - optional end frame. Give it one and you get keyframed motion between two stills, which is the most controllable thing you can do with this node.
duration - 4 to 15 seconds, default 5. Tight range, and it makes the cost predictable.
resolution - 480p or 720p, default 720p. Two tiers only. 480p exists for exactly the iteration case above.
aspect_ratio - optional; unset, it adapts to the input image, which is usually what you want on i2v.
generate_audio - default true. Native audio synchronised with the output is one of Seedance's selling points; turn it off to save the generation if you're scoring separately.
No seed field on this model. Your reproducibility lever is generation_id held fixed plus an unchanged graph.
Outputs
video - a list of native VIDEO objects; preview, combine, or chain into Seedance · Extend. files - the original download as a PROTOFACE_FILE for Protoface Save File. run id - a string for Protoface Resume Run.
Install
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
Manager route: search Protoface, install protoface-nodes, restart ComfyUI, reload the browser. ComfyUI 0.41.0+ and Python 3.10+; httpx, jsonschema, Pillow, av go in via pip and there are no model downloads at all. Then click Protoface in the lower-right and paste your key - memory-only by design, so a restart means re-entering it, or set PROTOFACE_API_KEY_FILE on a server.
Two operational numbers worth knowing: the pack allows 2 concurrent requests by default (PROTOFACE_CONCURRENCY) and each job has a 7200-second ceiling (PROTOFACE_JOB_TIMEOUT_SECONDS).
Traps
Assuming Seedance weights exist somewhere. They don't, and the ByteDance pattern is explicit - products closed, components open. There's no local fallback to plan for.
Blowing the budget on prompt-hunting at 720p. Find the motion at 480p and five seconds, then commit.
Incrementing generation_id to retry. That is a new request. Leave it fixed, requeue unchanged, or resume by run id.
Expecting a refund from interrupt. Cancellation is best effort; check the run in your Protoface account if a charge looks wrong.
Pointing Comfy Cloud at this pack. It won't install arbitrary custom nodes, and Protoface bills its own account rather than Comfy credits.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the scene, action, camera movement, and mood for the video. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | The output video resolution. |
| duration | INT | 54–15 | The duration of the generated video in seconds (4-15s). |
| aspect_ratio | COMBO | The aspect ratio of the generated video. If not specified, adapts to the input image. | |
| generate_audio | BOOLEAN | true | Whether to generate native audio synchronized with the output video. Defaults to true. |
| last_image | COMBO | A public URL, a data URI, or an asset id. | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |