Nodes/PopNow/Seedance 2.0 · Video Extend
ComfyUI Node

Seedance 2.0 · Video Extend

Keep the shot going instead of re-rolling it

By popnow-ai·Created 24 days ago·Updated about 20 hours ago· 0
Seedance 2.0 · Video Extend
  • video_url
  • last_image_url
  • video
  • task id
◄prompt►
◄resolution720p►
◄duration_seconds5►
◄generate_audiotrue►
◄seed0►
◄bitrate_modestandard►
◄watermarkfalse►

Every text-to-video clip you've ever made ends too early. You get four seconds of something good and the obvious next move is to roll again, hope the model finds the same shot, and burn the credits when it doesn't. Video Extend is the other move: feed it the clip you already have and it generates the next segment from that clip's final frame, then joins the two together. Same character, same light, same camera - because it started from your actual last frame rather than a description of it.

How it works, mechanically

The source is video_url - a VIDEO socket, so you wire in a loader or a clip you already saved. There's also an optional closing image. The node uploads the file, the model takes its last frame as the opening state of the new segment, renders forward, and returns the source clip with the new segment already appended. You don't concatenate anything yourself.

last_image_url is the interesting extra: give it an IMAGE and the new segment is aimed at that picture, so the extension lands where you want instead of wherever the model felt like stopping. Leave it empty and the model decides how the shot ends.

Prompt field is optional here, which is unusual for a video node - and mildly misleading. It's optional in the schema, not in practice. Ask for the next beat ("she turns toward the window as the light changes, camera holds") and you'll get a continuation. Give it nothing and you'll often get drift.

Inputs worth setting

  • video_url - MP4, MOV or WebM, up to 60 seconds. This is a socket, so it takes ComfyUI's VIDEO type; point a loader at a file you already saved.
  • resolution - match your source. 480p, 720p, 1080p or 4k. The new segment is rendered at this size, so a mismatch means a visible quality seam even though the frame itself lines up.
  • duration_seconds - length of the new segment, and the billed quantity. The source clip is appended on top and is not billed for it. -1 hands the duration decision to the model.
  • generate_audio - sound for the new segment only; your source keeps its own audio either way. On a source with dialogue, this is where lip-sync-ish continuity can start to wobble; the model isn't listening to the original track.
  • bitrate_mode, watermark, seed - the usual trio. High bitrate for finals. Seed starts fixed.

Rates start at 10.5 credits per second of new footage (~$0.105/s), so extending by 5 seconds costs roughly what a fresh 5-second text-to-video run costs - same rate, but you're not gambling on getting the shot back.

Outputs

video (the full extended clip - feed Save Video) and task id. Note there's no last frame output on this node, unlike the text-to-video and reference-to-video ones. If you want to chain extensions, save the video and load it back in, or pull the frame with a separate node.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui

or search PopNow in ComfyUI Manager and click Install. Restart, then set the key in Settings > PopNow (or POPNOW_API_KEY in the environment) and restart once more so the catalog loads. Nothing to pip install - the pack declares no dependencies and leans on what ComfyUI already ships.

Getting it wrong, the usual ways

  • "PopNow 40004" on a source that should be fine - check the container. MP4/MOV/WebM only, 60 seconds max.
  • A visible cut mid-clip - almost always a resolution mismatch between source and resolution, or generate_audio on where the soundtrack restarts. Extend from footage of the same resolution you're rendering to.
  • Chaining three extensions and drifting off-model - normal. Each hop is a fresh generation seeded by one frame, so identity erodes. Two hops is about where most people stop and start a new shot.
  • Cancelling mid-run - stops your wait, not the job. It finishes on PopNow, bills if it succeeds, and the result waits in your API console.

Because the metering here is per second of new footage, this is one of the cheaper ways to build up a longer clip on a cloud video model. It's also the least glamorous. If you've ever wanted a B-roll library without a graphics card, this node is most of the pipeline.

CategoryPopNow/Video/ByteDance

Inputs (9)

NameTypeDefaultDescription
promptSTRINGWhat happens next: the action that follows, the camera move and the sound. Optional.
video_urlVIDEOThe clip to continue: MP4, MOV or WebM, up to 60 seconds. Its last frame opens the new segment, and the result is your clip with the new segment joined on.
resolutionCOMBO720pResolution of the new segment. Match your source clip.
duration_secondsCOMBO5Length of the new segment in seconds. This is the billed quantity; the source clip is added on top and is not billed. Pass -1 for smart duration: the model picks the length itself.
generate_audioBOOLEANtrueGenerate a native soundtrack for the new segment. The source keeps its own sound either way.
seedINT00–2147483647Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed.
bitrate_modeCOMBOstandardEncoding bitrate of the delivered file: standard, or high for crisper detail and a larger file.
watermarkBOOLEANfalseAdd the model’s visible "AI generated" watermark to the video.
last_image_urloptIMAGEOptional closing image: the new segment lands on this picture. Leave it out and the model decides how the shot ends.

Outputs (2)

NameTypeDescription
videoVIDEO—
task idSTRINGThe PopNow task id, for the API console logs or support.