Nodes/FrameFuse/FrameFuse
ComfyUI Node

FrameFuse

Prepend one edited frame and your whole video edit falls in line

By headline-design·Created 4 months ago·Updated 4 months ago· 5
FrameFuse
  • video_frames
  • frame
  • audio
  • STITCHED_VIDEO
  • AUDIO
  • FRAME_COUNT
  • REPORT
frame_index-1
repeat_count1
placement_modeappend_end
resize_frame_to_videotrue
fps24.00
extend_audio_with_silencetrue

FrameFuse looks like a two-line utility - take a frame, glue it onto a video batch - but the reason it exists is a genuinely sneaky workflow trick. Its author built it for what he calls temporal scaffolding: prepend an edited still to the start of a clip so a downstream video pass (Edit Anything LoRA, LTX, whichever) gets to see the look you want in its first frames instead of reconstructing it from a text prompt. That's the difference between a video model half-following your edit and actually holding the wardrobe, the accessory, the whole intended state. Nail one image in Flux.2 Klein or even Photoshop, fuse it in, and let the rest of the pipeline take it from there.

What it actually does

Under the hood it's pure tensor math, no video container, no ffmpeg. Your video arrives as a ComfyUI IMAGE batch - the thing VHS_LoadVideo.IMAGE hands you - which is a torch tensor shaped [B, H, W, C], frames stacked on the batch axis. FrameFuse picks one frame out of a second image input, repeats it, and torch.cats it onto the front or back of that batch. If the frame doesn't match the video's resolution, it bilinearly resizes it (clamped to 0–1, dtype preserved) before stitching.

The audio half is what makes it smarter than a hand-rolled ImageBatch node. ComfyUI AUDIO is a little dict of waveform + sample_rate; FrameFuse appends (or prepends) a run of zeros to the waveform exactly long enough to match the stitched frames - repeat_count / fps seconds of silence - so your clip stays in sync when you recombine. No audio connected? It skips the math and just passes None through. Nothing breaks.

The inputs that matter

  • video_frames - your source IMAGE batch. This is the clip you're extending.
  • frame - a still or another batch to sample from. frame_index (default -1) picks which frame; negative counts from the end, so -1 means "the last frame," which is what you want for a hold-on-the-ending shot.
  • repeat_count - how many copies of that frame to stitch in. The author's own demo uses 10 prepended frames at 30 fps as a reference window.
  • placement_mode - append_end (hold on a final frame) or prepend_start (scaffold at the front).
  • resize_frame_to_video - default on. Leave it on unless you know the sizes match; off with mismatched sizes is a hard error.
  • fps and extend_audio_with_silence - only matter when you wire in audio; fps drives how long the silence is, so match it to the video's real rate.

Outputs: STITCHED_VIDEO feeds straight into VHS_VideoCombine.images, AUDIO into its audio input, FRAME_COUNT if a downstream node needs the length, and REPORT is a plain-English string ("Appended 10 frame(s) from frame index 0…") - patch it into a text node when something looks off and you'll know instantly what it did.

Installing it

ComfyUI Manager is the easy route: search "FrameFuse", hit install, restart. Or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/headline-design/comfyui-framefuse

Restart ComfyUI and grab the node from the search. That's the whole install - the requirements.txt is empty and the only import is torch, which ComfyUI already ships. No model downloads, no version pinning, nothing to fight. (Same pack gives you the Trim End node below.) An example workflow lives on the author's Hugging Face if you want to see the scaffold idea wired up end to end.

Where people get burned

  • Wrong fps drifts your audio. The silence is computed as repeat_count / fps seconds. Type 24 when the clip is really 30 and by the end your audio is visibly late.
  • Negative frame_index indexes the frame input, not the video. -1 grabs the last frame of whatever you fed in - the intended last still, not the video's last frame.
  • Size mismatch with resize_frame_to_video off throws instead of silently warping. Keep the resize on; it's the friendly default.
  • Audio errors when silence is on but the input isn't valid AUDIO. If your audio source isn't a proper VHS-style AUDIO dict, either fix the source or just disconnect the input.

It's a small node with a specific job, and honestly the "prepend an edited reference frame so the model stops drifting" trick is the reason to install it. If that sounds like your workflow, this is the cleanest way to do it.

CategoryFrameFuse

Inputs (9)

NameTypeDefaultDescription
video_framesIMAGEVideo represented as a ComfyUI IMAGE batch, such as VHS_LoadVideo.IMAGE.
frameIMAGEStill frame or IMAGE batch. The selected frame is stitched onto the video batch.
frame_indexINT-1-100000–100000Frame index to use from frame. Use -1 for the last frame in that batch.
repeat_countINT11–1024How many copies of the selected frame to add.
placement_modeCOMBOappend_endAdd the selected frame(s) to the end or the beginning of the batch.
resize_frame_to_videoBOOLEANtrueResize frame to match video_frames before stitching.
fpsFLOAT24.001–240Frame rate used when extending audio with silence.
extend_audio_with_silenceBOOLEANtrueAdd matching silence to the audio in the same direction as the stitched frames.
audiooptAUDIOOptional audio to pass through or extend with silence.

Outputs (4)

NameTypeDescription
STITCHED_VIDEOIMAGE
AUDIOAUDIO
FRAME_COUNTINT
REPORTSTRING