Make Portrait Walk
Turns a single portrait into a 'walking' animation — with zero walk-cycle models
- image
- IMAGE
- MASK
Feed this node a single portrait of a person and it spits out a batch of frames that read as walking. No walk-cycle model, no video generation, no AnimateDiff, no GPU inference - it's a vertical bob, and it works way better than it has any right to.
The mechanism is simple and you can see all of it in the source. The image gets shifted vertically in steps across the batch: a handful of standing frames, then shifting down pixel by pixel, back up, back down, repeated. walk_yoffset controls how far the bob goes (7–35 px, default 7, in steps of 7), and walk_cycles how many times it loops (1–50, default 2). Do the arithmetic and you land at roughly 40 frames per cycle, so defaults give you ~80 frames - a couple of seconds at 30fps.
The part that matters: the vacated strip at the top of each frame is transparent, not black. The node converts to RGBA, shifts, and the emptied pixels come out with alpha zero. That's deliberate - this node is meant to feed a compositing node (the pack chains it into Move Left_Or_Right or Move In_Or_Out in its own portrait_walk_* workflows), where the transparent band lets the moving background show through and your brain reads the bounce as a gait. On its own it's a person doing a weird vertical hop.
Inputs and outputs
- image - a single portrait. It'll take a batch, but the intended use is one image.
- walk_yoffset - bob amplitude in pixels. Default 7 is subtle; crank toward 35 for a more exaggerated strut.
- walk_cycles - loops. More cycles = longer clip.
Outputs are IMAGE (the frame batch - wire it into a compositing node or a video encoder like VHS_VideoCombine) and MASK. Fair warning about that mask: it's an all-zero placeholder, the source literally says "Assume a default zero mask for simplicity." Don't wire it anywhere expecting a usable subject silhouette - grab the mask from your background-removal node instead if you need one.
Installing it
It's one of eight nodes in ComfyUI-Animation_Nodes_and_Workflows by Isi-dev. Install the pack once:
- ComfyUI Manager → search
ComfyUI-Animation_Nodes_and_Workflows→ install, restart. - Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Isi-dev/ComfyUI-Animation_Nodes_and_Workflows
cd ComfyUI-Animation_Nodes_and_Workflows
pip install -r requirements.txt
The requirements (torch, opencv-python, numpy, plus mediapipe for the pack's other node) are the only dependency. This node itself is pure numpy/OpenCV - no model file, no download, works on CPU.
Common gotchas
- Preview the IMAGE output on its own and you'll see a black or empty band at the top of each frame. That's the transparency, and it's expected. The illusion only lands once the frames are composited over a moving background.
- If it looks like a hop instead of a walk, the missing ingredient is the background motion - this node supplies the bounce, the Move nodes supply the parallax. They're halves of one trick.
- For a genuinely animated walk with legs moving, you'd want LivePortrait or a video model instead - this is the cheap trick, and it's good at being cheap.
It's the kind of node that makes you smile when you see it in action: one portrait in, a walking clip out, no video pipeline required.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| walk_yoffset | INT | 77–35 | — |
| walk_cycles | INT | 21–50 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |