Protoface Seedance 2.0 · Image to Video
The full-fat tier, 4K included, priced accordingly
- video
- files
- run id
What this one is
The standard Seedance 2.0 image-to-video node. Same operation as the Mini version, one tier up: 480p through 4K, native audio, 4–15 second clips, and a price per second that goes up sharply as you climb the resolution ladder. This is the node you move a winning draft into, not the one you explore with.
Worth restating because it decides everything else: Seedance has no open weights. ByteDance sells it and keeps it. A local equivalent doesn't exist at any VRAM, so "just run it locally" isn't on the table - the only real question is which tier you're willing to pay for.
How it runs
The Protoface pack is one shared API client wearing 90-odd node costumes. This one assembles your request, uploads the first frame, submits, polls, downloads, and returns a native VIDEO. Everything is async on their side; your card is doing nothing but a little encoding. The per-model controls are generated from the provider's public schema, which is why every field here maps to something their API actually takes.
The inputs you'll care about
image is the start frame and the reason to use this rather than the text node. Native ComfyUI Image connects straight in - including the output of a local sampler, which is how most people will use it. URLs, data URIs and Protoface asset ids work too.
prompt is motion, camera and mood. The frame supplies content. Over-describing the still is the most common wasted prompt in this node.
last_image lets you define where the shot ends, so the clip interpolates toward a second still of your choosing. It's the closest thing in the pack to storyboarding: two local renders and a prompt describing the movement between them is a surprisingly controllable technique.
resolution is the field with consequences: 480p, 720p, 1080p, 4K. aspect_ratio (16:9, 9:16, 4:3, 3:4, 1:1, 21:9) is optional and adapts to the input image when left empty - leave it empty for portrait stills. duration is 4–15 seconds. generate_audio defaults true.
generation_id is the paid-job handle. Fixed ID with identical inputs = resume the recorded run, not a new submission. Increment it and you've asked for a fresh generation, which is the correct move only when you actually want one. request_scope is auto-assigned and only matters for headless clients.
Outputs are video (list), files (originals), run id (for Resume Run).
Install
ComfyUI 0.41.0+ and Python 3.10+.
cd ComfyUI
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
python -m pip install -r custom_nodes/protoface/requirements.txt
Or in Manager: Extensions → search Protoface → install protoface-nodes → restart and reload the browser. Use ComfyUI's interpreter for the pip step. Then paste an API key via the Protoface button in the lower-right corner; headless boxes use PROTOFACE_API_KEY. Dependencies are httpx, jsonschema, Pillow and PyAV - nothing to download, nothing to fight torch over.
The resolution ladder, in money
Per the catalog bundled with the pack, output seconds at this tier cost roughly 7 credits at 480p, 15 at 720p, 37 at 1080p and 78 at 4K. So a five-second 720p clip is ~75 credits and the same clip at 4K is ~390. There are minimums too - 4 seconds, and a floor charge per quality tier - so a 4-second 4K test is already a serious number. The correct workflow is embarrassingly simple and almost nobody does it: draft at 480p, then promote the winner.
Where it breaks
Going to 4K too early. A 4K second here costs more than twenty times what a 480p second costs on the Mini tier. Test motion at the bottom of the ladder; the composition question doesn't need the pixels.
Re-queuing after an interrupt. Cancellation against the API is best effort and doesn't imply a refund. If you killed a job mid-flight, don't assume the credits came back.
Deleting the state directory to "clean up". The pack journals request identities in ~/.cache/protoface-comfyui (override with PROTOFACE_STATE_DIR). Wipe that and you lose the ability to resume an unresolved paid submission, which is the one thing standing between you and paying twice.
Assuming the workflow file holds your key. It doesn't - interactive keys stay in server memory and are excluded from exports. The corollary is that a teammate queueing on your instance spends your credits.
Bottom line
The reference implementation of "closed video model inside a ComfyUI graph," with genuinely native plumbing. Use it for the final pass on a shot you've already validated, and let Mini or Fast eat the iterations.
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 | — |