Nodes/ComfyUI Frame Maker/πŸ…“ Frame Maker Batch
ComfyUI Node

πŸ…“ Frame Maker Batch

The same pan-and-zoom, but over frames you already have

By diStyAppsΒ·Created 2 years agoΒ·Updated 2 years agoΒ· 23
πŸ…“ Frame Maker Batch
  • frames
  • subject_image
  • subject_alpha
  • frames
  • subject_image
  • width
  • height
  • frame_count
β—„frame_count4β–Ί
β—„invert_alphafalseβ–Ί
β—„movement_presetsleft to centerβ–Ί
β—„movement_presets_distance50β–Ί
β—„movement_directionbackβ–Ί
β—„x_pos_start0β–Ί
β—„x_pos_end0β–Ί
β—„y_pos_start0β–Ί
β—„y_pos_end0β–Ί
β—„scale_start1.00β–Ί
β—„scale_end1.00β–Ί
β—„scale_anchor_pointβ–Ύβ–Ί
β—„resize_frame_inputtrueβ–Ί
β—„frame_input_width768β–Ί
β—„frame_input_height768β–Ί
β—„resize_frame_outputfalseβ–Ί
β—„frame_output_width512β–Ί
β—„frame_output_height512β–Ί
β—„invert_orderfalseβ–Ί

FrameMakerBatch is FrameMaker's "you already have an animation" sibling. The regular FrameMaker pastes a subject over one or a few backgrounds and generates the motion from scratch. This one takes an existing batch of frames, composites your subject over each of them, and applies the same pan-and-zoom camera move on top. Same math, same author, same pack - the only structural difference is that frames is a required input here instead of an optional override.

So the workflow flips: instead of "make keyframes, then animate," it's "I have a clip (from AnimateDiff, LayerDiffusion, a video load, whatever), now drop a character into it with a matching camera move." The sample batch workflow that ships with the pack shows the real use case - a FrameMaker feeding keyframes, plus three FrameMakerBatch nodes (one per subject) compositing onto the same sequence, then RIFE VFI to smooth and VHS_VideoCombine to export. That's a clean way to get multiple moving elements in one shot without re-running a diffusion model for every layer.

How it works

Under the hood it's the same interpolation math as the base node: subject_image is joined with subject_alpha (if given) into an RGBA matte, then pasted at a position and scale that lerp from start to end values across frame_count frames. The frames input just becomes the list of backgrounds - each output frame is one of your input frames with the subject composited on top. Backgrounds cycle if you feed fewer than frame_count, and invert_order reverses the whole batch for a free reverse-play.

The two silent overrides are inherited, so don't forget them: movement_presets replaces your manual x_pos_start/end and y_pos_start/end when set (with movement_presets_distance as the travel percentage), and movement_direction wipes out scale_start/scale_end - front forces 0.3β†’1.3, back forces 1.3β†’0.3. Want your own zoom? Set movement_direction to None.

The inputs that matter

  • frames - the clip you're compositing onto. Required.
  • subject_image - what you're pasting in, ideally already cut out.
  • frame_count - default 4; how many output frames you get.
  • invert_alpha - flips the alpha matte. Ghost/hole subject? Flip it.

Outputs match the base node: frames (the composited batch), plus subject_image, width, height, and frame_count. Wire frames into RIFE VFI, your video combine node, or back through the sampler.

Install

Identical to FrameMaker - same pack, no dependencies, no model downloads.

cd ComfyUI/custom_nodes
git clone https://github.com/diStyApps/ComfyUI_FrameMaker
# restart ComfyUI

Or install via ComfyUI Manager by searching "Frame Maker" (the README's recommended route).

Troubleshooting

Mostly the same traps, plus one new one: because you're compositing onto a pre-existing batch, resolution mismatch is the common failure - resize_frame_input defaults to true and forces subject and frames to 768Γ—768, so if your clip is a different size, either change frame_input_width/frame_input_height or set resize_frame_input to false and keep everything the same dimensions. And same as the base node: keep frame_count β‰₯ 2 (a value of 1 divides by zero), and remember movement_direction and movement_presets override your manual scale and position values - set them to None to take control.

CategoryπŸ…“ diSty/FrameMaker

Inputs (22)

NameTypeDefaultDescription
framesIMAGEβ€”
subject_imageIMAGEβ€”
frame_countINT4β€”
invert_alphaCOMBOfalse2 options: true, false
movement_presetsCOMBOleft to center25 options: None, left to center, right to center, center to left, center to right, left to right, +19
movement_presets_distanceINT50-10000–10000β€”
movement_directionCOMBOback3 options: None, front, back
x_pos_startINT0-10000–10000β€”
x_pos_endINT0-10000–10000β€”
y_pos_startINT0-10000–10000β€”
y_pos_endINT0-10000–10000β€”
scale_startFLOAT1.000.05–10β€”
scale_endFLOAT1.000.05–10β€”
scale_anchor_pointCOMBO7 options: center, top center, bottom center, top left, top right, bottom left, +1
subject_alphaoptMASKβ€”
resize_frame_inputoptCOMBOtrue2 options: true, false
frame_input_widthoptINT76816–8192β€”
frame_input_heightoptINT76816–8192β€”
resize_frame_outputoptCOMBOfalse2 options: true, false
frame_output_widthoptINT51216–8192β€”
frame_output_heightoptINT51216–8192β€”
invert_orderoptCOMBOfalse2 options: true, false

Outputs (5)

NameTypeDescription
framesIMAGEβ€”
subject_imageIMAGEβ€”
widthINTβ€”
heightINTβ€”
frame_countINTβ€”