Protoface Seedance 2.0 Fast · Edit Video
Change the Shot You Already Shot
- video
- files
- run id
Video editing - take existing footage and change it - is the operation that made 2026 interesting. Locally, the answer was Bernini (ByteDance's own open model, ironically built on Wan 2.2 and doubling the compute because the source clip becomes part of the input sequence). Remotely, it's Seedance 2.0 Fast, which takes a clip plus a prompt plus reference images and gives you a new clip back.
When to reach for it
The honest use case is fixing footage you can't reshoot: change the weather, replace a product, swap a wardrobe, add a prop. It's also good for a specific kind of iteration - you got the motion you wanted out of an i2v pass and now you want a different colour grade applied to that exact motion, not a new sample.
Keep expectations calibrated. These models are prompt-following editors, not compositors. If the change is "the sign says OPEN and it should say CLOSED", expect the lettering to wobble. If it's "make it dusk", that's squarely in range.
Mechanism
Protoface generates this node at startup from a bundled catalog of request schemas - bytedance/seedance-2.0-fast × video.edit - and every generated node in the pack shares one HTTP adapter. On queue: encode your input video to H.264 MP4, upload it unless that exact content is already cached, validate the payload against the schema before spending, submit, poll, download, decode to a native VIDEO.
Journal first, always. Each request's identity - account, request_scope, node id, generation_id, model, schema fingerprint, payload hash - is written to local SQLite before submission, so an unchanged requeue resumes the recorded job and the API idempotency key is reused on ambiguous failures rather than burned on a duplicate.
The practical wrinkle: your input video gets re-encoded to MP4/H.264 on the way up. So a ProRes master becomes an H.264 intermediate, and it hashes by content - a slightly different encode is a different upload and a different request. Pick your source and leave it alone.
Inputs
video - the clip being edited. Mode field: Video for a native socket, or References to point at an existing Protoface asset via Protoface Asset Reference.
prompt - the edit, phrased as a change. "Change the sky to heavy storm clouds, keep the buildings and camera move identical" will get you a different result from "a stormy city".
reference_images - optional, up to nine. This is how you do "put this jacket on him" or "this logo on the mug": supply the thing, name its position in the prompt. Reference images are identified by array order, so "image 1" means the first one you connected.
reference_audios - optional, up to three. Less obvious, more useful than it sounds for voice or ambience replacement.
duration - 4 to 15 seconds, default 4, and the tooltip says it's auto-detected from the input video when not specified. So there's usually no reason to touch it.
resolution - 480p or 720p. aspect_ratio - optional, adapts to the input if unset.
generate_audio - default true, with a detail worth quoting because it changes your workflow: when set to false, the input video's audio track is preserved on the output instead of being regenerated. That's the setting you want when the dialogue is the point and you're only changing the picture.
No seed on this model.
Outputs
video - a list of native VIDEO results. files - the original download as a PROTOFACE_FILE for Protoface Save File. run id - a string; hold onto it, video edits are the kind of job you'll want to trace.
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: search Protoface → protoface-nodes → restart → reload. ComfyUI 0.41.0+, Python 3.10+, and httpx, jsonschema, Pillow, av - PyAV matters doubly here, since it's involved in decoding what comes back. Then paste your Protoface key in the Protoface panel bottom-right; for a persistent server, PROTOFACE_API_KEY_FILE. Nothing is downloaded locally; the model runs on Protoface's side.
Where it goes wrong
References ignored. They're positional. If your prompt says "the woman in the red jacket" and you supplied three images, the model may pick any of them. Say "the jacket from image 2".
Ten reference images. Nine is the cap, and batch items count toward it.
Expecting frame-exact preservation. Prompt-following editors re-render. If a frame must be untouched, do that part in your compositor, not in a generative node.
Editing a re-encoded file every run. Encode once, upload once, reuse through an asset ID. Different encodes cost different uploads and can cost different jobs.
Cancelling an expensive edit to save money. Best effort, no promised refund. Also: the pack will stop and ask rather than silently retry a different paid request under the same idempotency key - that's a feature, and the error is telling you to go find the run in your account.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the edit you want applied to the input video. | |
| video | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | Output video resolution. |
| duration | INT | 44–15 | Output video length in seconds (4-15). Auto-detected from the input video if not specified. |
| aspect_ratio | COMBO | Aspect ratio of the output video. Adapts to the input if not specified. | |
| generate_audio | BOOLEAN | true | Whether to generate native audio for the edited output. Defaults to true. When set to false, the input video's audio track is preserved on the output instead. |
| reference_audios | COMBO | Public URLs, data URIs, or asset ids. | |
| reference_images | COMBO | Public URLs, data URIs, or asset ids. | |
| 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 | — |