AIMZ Freeze Frame Pad
Stick a still-frame lead-in on your video without a pile of nodes
- image
- images
- count
Some video models want a few frozen frames before the action starts. MiniMax H3's motion buffer wants a still lead-in so the first real motion has something to animate from - 15 frames is the number this pack keeps coming back to. To build that by hand you'd chain GetImageFromBatch (grab the first frame), RepeatImages (duplicate it N times), ImageBatchMulti (stitch it back on), and then repeat the whole thing for the tail. That's five nodes doing one idea. AIMZ Freeze Frame Pad does the same thing with two numbers and one wire.
How it works
It takes your frame batch - a tensor shaped [B, H, W, C], which is what every video loader and video node in ComfyUI emits - and does the obvious thing: takes image[0], repeats it pad_start_frames times, concatenates that onto the front; takes image[-1], repeats it pad_end_frames times, concatenates that onto the back. You get your original frames intact, with hard freeze frames bookending them.
The word "hard" matters. These are literal duplicated frames, not interpolated holds - the model sees the exact same pixels repeated. For a motion buffer that's what you want: the model uses the still to establish the scene, then animates off it. If you need a live hold (where the content keeps subtly moving), this isn't it.
Inputs and outputs
Two inputs to set: pad_start_frames and pad_end_frames, both integers, both defaulting to 15, both capped at 1000. The optional image input takes the frame batch.
Outputs are images - the padded batch - and count, the total frame count after padding. That count output is quietly useful: it feeds straight into anything that needs to know how long the video is, so you don't have to add a separate GetImageCount node after padding.
Installing it
Part of the ComfyUI_AIMZ pack. In ComfyUI Manager → Custom Nodes Manager, search comfyui_aimz or AIMZ, Install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/AIMZ-GFX/ComfyUI_AIMZ.git
No models to download, no extra dependencies. One restart and it's there.
Where it fits and where it bites
The standard placement is after your video loader and before whatever node cares about frame count - for a MiniMax H3 setup, you pad 15 frames on the front, let the model do its thing, and optionally pad the tail for a clean ending. If you pair it with the AIMZ Audio Silence Pad from the same pack, the audio side gets padded by the same frame count, so the audio and video stay in sync after you've lengthened the video. That's the intended combo, and it's a genuinely tidy workflow.
It's None-safe like the rest of the pack: feed it None and it returns None plus count = 0 instead of throwing a TypeError mid-graph. That's the behavior that lets you build branches where the pad is sometimes there and sometimes not. Just remember that a count of 0 downstream means the branch is empty, so anything consuming it should tolerate that too.
One honest limitation: the two padding values are hard numbers on the node, not inputs you can drive from elsewhere. If your workflow needs a variable lead-in, you're converting that widget to an input and wiring it yourself.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| pad_start_frames | INT | 150–1000 | Number of freeze frames to prepend to the start |
| pad_end_frames | INT | 150–1000 | Number of freeze frames to append to the end |
| imageopt | IMAGE | Input video frames [B, H, W, C]. If None, returns None without error. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| count | INT | — |