Protoface FLUX.3 Video · Extend Video
Adding Twenty Seconds to the End of a Shot
- video
- files
- run id
The first generation is never long enough. FLUX 3 Extend takes an existing clip and appends more of it - the continuation inherits the motion, framing and lighting of what you hand it, and your prompt describes where it goes next. Five to twenty seconds per pass.
Why this exists when 20-second generations exist
Because 20 seconds is still short. The KB's video coverage is one long record of this exact problem on the local side: five-second windows on Wan, 81-frame chunks, SVI recycling, VACE joins - the ceiling moved from five seconds to twenty or thirty and the underlying issue, that any single generation is finite, did not move at all. Extend is the API-shaped version of that: you chain passes rather than engineering one giant generation.
The difference from stitching local chunks is that the model sees your existing video as input rather than starting from an empty latent, so continuity is its job, not yours.
The mechanism
Generated from the bundled Protoface catalog at startup - black-forest-labs/flux-3 × video.extend - and running the same shared adapter as every Protoface node: encode inputs, upload what's new (content-hash cached), validate against the schema before spending, submit, poll, download, decode into a native VIDEO.
The journal is doing quiet, expensive work in the background here. Every submitted request has its identity recorded locally first, keyed on account, scope, node id, generation_id, model, schema fingerprint and a hash of the payload - which includes the bytes of your input video. So if the browser drops during a long extension, requeueing the unchanged graph resumes the recorded job. Increment generation_id and you've bought a different one.
Practical consequence: a large input video hashes slowly. That's Fine - it's the mechanism that stops you re-paying.
Inputs
video - the clip to continue. It's a mode field: choose Video for a native ComfyUI video socket, or References to point at an existing Protoface asset by ID or URL via Protoface Asset Reference. If you generated the source in this same graph, the FLUX.3 I2V node's video output connects straight in - no reupload, no re-encode.
prompt - the continuation, not a re-description. "She turns and walks toward the window, camera holds, overcast light continues" beats restating the scene from scratch. Restating it invites the model to interpret "continue" as "start over with these elements".
duration - 5 to 20 seconds, and it means the length of the new segment, not the total. A 20-second source plus a 15-second extend gives you 35 seconds of timeline.
resolution - 720p or 1080p. Match the source where you can; upscaling is a different, better-supported problem.
aspect_ratio - optional. Leave it on Default unless the source is an unusual shape.
generate_audio - default true, which is genuinely interesting for extensions: a jointly-trained video/audio model produces sound that fits the new footage instead of a hard splice of two separate tracks. If you need one continuous music bed, mute both and lay the track afterwards; per-segment generation has a seam by construction.
Outputs
video - a list of native VIDEO objects. files - the original downloaded MP4 for Protoface Save File. run id - a string, and you should keep it: a four-pass extension chain is four separately billed jobs, and you'll want the trail.
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 alternative: search Protoface → install protoface-nodes → restart ComfyUI → reload the browser. Needs ComfyUI 0.41.0+ and Python 3.10+, and installs httpx, jsonschema, Pillow, av - PyAV is what decodes downloaded MP4s, so it's load-bearing for this node specifically. Windows portable users must install with python_embeded\python.exe -m pip; a system Python won't touch the portable environment.
Then click Protoface in the lower-right, paste your key, done. The key is memory-only and never lands in an exported workflow - good hygiene, one extra step after every restart. For servers, set PROTOFACE_API_KEY_FILE.
Where a chain breaks
Drift, then a jump. Two extensions deep, subject identity starts to slide. Local users hit the same wall across chunk boundaries, and no amount of prompt discipline fully fixes it. Plan shots that end where a small change is invisible.
Queueing five passes at once. The pack allows two concurrent requests by default. Five extends in one graph serialise behind the semaphore - fine, but budget the wall time; the default job timeout is two hours per job.
A 19-second extend of a 19-second clip, four times, and a surprise bill. Every pass is a separate paid job. Decide the target length before you start chaining.
Assuming FLUX 3 has a seed. It doesn't - no node in the FLUX 3 family exposes one. Fixed generation_id plus an unchanged graph is your only reproducibility path.
Cancelling because it's slow. Best effort, no promised refund. If you need out, check the run status in your Protoface account rather than assuming the cost went away.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The text prompt describing the video you want to generate. | |
| video | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | Resolution of the generated video. |
| duration | INT | 55–20 | Video length in seconds (5-20). |
| aspect_ratio | COMBO | The aspect ratio of the generated media. | |
| generate_audio | BOOLEAN | true | Whether to generate audio for the video. |
| 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 | — |