π Frame Maker Batch
The same pan-and-zoom, but over frames you already have
- frames
- subject_image
- subject_alpha
- frames
- subject_image
- width
- height
- frame_count
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.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | β | |
| subject_image | IMAGE | β | |
| frame_count | INT | 4 | β |
| invert_alpha | COMBO | false | 2 options: true, false |
| movement_presets | COMBO | left to center | 25 options: None, left to center, right to center, center to left, center to right, left to right, +19 |
| movement_presets_distance | INT | 50-10000β10000 | β |
| movement_direction | COMBO | back | 3 options: None, front, back |
| x_pos_start | INT | 0-10000β10000 | β |
| x_pos_end | INT | 0-10000β10000 | β |
| y_pos_start | INT | 0-10000β10000 | β |
| y_pos_end | INT | 0-10000β10000 | β |
| scale_start | FLOAT | 1.000.05β10 | β |
| scale_end | FLOAT | 1.000.05β10 | β |
| scale_anchor_point | COMBO | 7 options: center, top center, bottom center, top left, top right, bottom left, +1 | |
| subject_alphaopt | MASK | β | |
| resize_frame_inputopt | COMBO | true | 2 options: true, false |
| frame_input_widthopt | INT | 76816β8192 | β |
| frame_input_heightopt | INT | 76816β8192 | β |
| resize_frame_outputopt | COMBO | false | 2 options: true, false |
| frame_output_widthopt | INT | 51216β8192 | β |
| frame_output_heightopt | INT | 51216β8192 | β |
| invert_orderopt | COMBO | false | 2 options: true, false |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | β |
| subject_image | IMAGE | β |
| width | INT | β |
| height | INT | β |
| frame_count | INT | β |