Protoface Seedance 2.5 · Extend Video
30-second continuations, and no end-frame steering
- video
- files
- run id
Long shots, fewer hops
Extending is the operation that separates a demo clip from a sequence. Seedance 2.5 Extend takes a clip and writes the continuation - and at this tier a single hop gives you up to 30 seconds of new footage, against 15 on the 2.0 nodes. Half as many seams to hide, half as many chances to drift.
The trade you should know about before wiring it: this node has no last_image field. 2.0's extend let you steer the continuation toward an ending frame; here there is prompt, video, resolution, duration, generate_audio and the two bookkeeping fields, and that's it. If end-frame targeting is central to your workflow, the 2.0 extend node is genuinely the better tool despite the shorter hop.
How it works
A thin wrapper on a paid API. The node uploads your clip, submits a job with the prompt as the continuation instruction, polls until the segment is ready, downloads it, and hands ComfyUI a native VIDEO. Controls come from the provider's public request schema; the implementation is shared with every other node in the pack. Seedance has no open weights, so there's nothing local to compare it to - you're renting the ability.
Inputs
video is the clip to continue. Native ComfyUI Video connects straight in, and chaining from a previous Protoface node through the asset-reuse path avoids re-uploading media you already own on their side.
prompt is the continuation brief - the tooltip's four targets are action, camera movement, lighting, mood. Write the next beat. "Keeps walking as the camera rises, late sun, wind picking up" does more than three lines of scene description.
duration is 4–30 seconds of new footage to append. resolution - 480p, 720p, 1080p, 4K - applies to the generated segment, so match your existing chain or prepare for a visible step.
generate_audio defaults true and produces audio synchronised with the new segment.
Then generation_id (paid-job handle: fixed ID with identical inputs resumes instead of re-billing; increment for a fresh generation) and request_scope (auto-assigned; a stable unique value is the headless client's job).
Outputs: video (list), files (originals, including anything non-media in the response), run id (the argument Resume Run takes).
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
Manager works: Extensions → search Protoface → install protoface-nodes → restart, reload browser. Pip with ComfyUI's own interpreter (python_embeded/python.exe on the portable build). Then paste your API key via the Protoface button, or export PROTOFACE_API_KEY. Dependencies are httpx, jsonschema, Pillow and PyAV - no model downloads at all.
Where it goes wrong
You're the editor. Segments come back separate and stitching is your job. Each hop invents its own audio, so treat audio as a per-segment asset and crossfade or replace it in post rather than expecting continuity.
Input seconds are metered here too. Extend bills the source clip alongside the output, with a two-second minimum on the input side. Chaining five hops to reach a 90-second cut means five source reads on top of the new footage, and 2.5's per-second rates are not small - roughly 23 credits a second at 720p, 59 at 1080p.
Drift over a long chain. Each hop sees only the clip you give it. Wardrobe, faces and lighting wander. Long hops mitigate this; more hops amplify it. That's the actual reason to prefer this node over the 2.0 version.
Retrying into a double charge. A poll timeout leaves a recoverable job, not a failed one. Requeue unchanged, or use the run id. Never bump generation_id to "retry" - that's a new paid job and the old one may still be running.
Wiping the cache to troubleshoot. Don't. ~/.cache/protoface-comfyui is the journal that makes recovery possible; relocate it with PROTOFACE_STATE_DIR if you need to, and keep it per-account.
Verdict
The right extend node for long-form work, with one real regression from 2.0. If your shots need to land on specific frames, keep the older node in your toolkit and accept the shorter hops.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the cinematic continuation - action, camera movement, lighting, mood. | |
| video | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | Output resolution of the new segment. |
| duration | INT | 54–30 | Length in seconds of the new segment to append (4-30). |
| generate_audio | BOOLEAN | true | Whether to generate native audio synchronized with the output video. Defaults to true. |
| 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 | — |