Difforum · Guide Frames
Turn One Picture Into a Video Model's Camera Move
- anchor_image
- direction
- params
- camera
- depth
- guide_frames
- masks
- info
Video models are wonderful at inventing motion and terrible at doing the motion you asked for. Guide Frames is the blunt fix: it warps your anchor picture along the camera path you drew, and hands the result to any model that accepts control or guide frames - LTX guides, Wan VACE, H3's first/last-frame and reference paths.
This is the node that makes Difforum's claim about H3 real. The official Multiframe Reference template anchors pictures you place by hand; this anchors frames that come from your camera move, so H3 performs the dolly, orbit or crane you drew.
How the warp works
It runs the same camera engine as the Feedback Sampler - no diffusion, just the geometry. Every frame, the anchor image is warped by the camera delta. Where the camera reveals area that wasn't in the original picture, there's nothing to sample, so that region gets filled with something neutral and recorded in a mask.
That faithful-but-empty region is the whole game. It's why the node has both hole_fill and mask_convention, and it's why Fill Reveal exists as a separate node.
The three inputs you actually set
mask_convention-1 = generate (VACE / LTX / H3)or1 = keep. Different ecosystems invert the mask polarity, and getting it backwards means the model regenerates everything except the part you needed and preserves the gray. If your output is a clean plate with a weird gray blob, this is the switch you flipped wrong.hole_fill-gray(neutral, what Fill Reveal and H3 want),stretch edge(bleeds the border pixels outward, which a video model can interpret as real continuation), orblack. Gray is the default and the safest.translation_scale- strength of 3D translation vs. the depth range. This is the one to tune when a 3D move is either too subtle to read or slurring the image apart.
anchor_image is your first frame (or any plate). direction, params and camera supply the move; depth is the anchor's depth map and is required for real parallax in 3D mode. Without it, 3D moves become pseudo-3D and the info string tells you so.
Outputs
guide_frames, masks and info. The frames go to LTX's guide conditioning, to Wan VACE, or into Keyframes (which picks keyframes out of them on the target model's grid). The masks travel alongside - into Fill Reveal to repaint the revealed area, or into Keyframes so the tooling downstream knows which pixels are invented.
That masks convention is worth keeping straight: internally the engine tracks valid pixels, and the node flips that to the "which value means generate" convention you selected. So the mask you get out always means what its label says, for the target you picked.
Install
Manager → search "Difforum", or:
cd ComfyUI/custom_nodes && git clone https://github.com/chillithebillis/Difforum.git difforum
Restart. numpy and torch only - the warp is a torch grid_sample, not OpenCV, so nothing extra to install here.
Where people get burned
Keep the moves modest on the first pass. A guide frame that travels a long way sideways leaves a huge gray region, and the video model then has to invent most of the frame and hold it consistent over time. It'll try; the result will wobble. Small, motivated moves read as camera work; big ones read as a warp.
The related trap is scale mismatch. The guide frames come out at your Setup resolution, and the target model wants its own size on its own grid (H3 at 32-pixel multiples, LTX on 8k+1 frames). Snap before you send, or the model resamples your carefully-aligned guides and your camera path arrives slightly wrong at the edges.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| anchor_image | IMAGE | The image the camera travels over (usually your first frame). | |
| mask_convention | COMBO | 1 = generate (VACE / LTX / H3) | Which value the mask uses for 'generate': 1 = generate (VACE / LTX / H3 / Fill Reveal) or 1 = keep. |
| hole_fill | COMBO | gray | What goes into the area the camera uncovers before AI fills it: gray (neutral, best for Fill Reveal and H3), stretched edge, or black. |
| directionopt | DIFFORUM_DIRECTION | The Director's wire: camera, energy curve, scene prompts, keys and look in one cable. | |
| paramsopt | DIFFORUM_PARAMS | From Setup: frame count, fps, width and height. Plug the same Setup everywhere. | |
| cameraopt | DIFFORUM_CAMERA | A camera track from Camera (keys), Camera (expressions) or Camera Import. Overrides the Director's camera. | |
| depthopt | IMAGE | Depth of the anchor, for real parallax in 3d mode. | |
| translation_scaleopt | FLOAT | 1.000–20 | Strength of 3D translation vs. the depth range. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| guide_frames | IMAGE | — |
| masks | MASK | — |
| info | STRING | — |