Gate Weave
Analog gate weave without renting a projector
- image
- mask
- image
- mask
- gate_weave_info
Real film projection isn't steady. The gate that holds each frame wobbles a fraction of a pixel, the film stretches, the whole image breathes - it's called gate weave, and it's one of the most reliable "this is real celluloid, not a digital file" tells there is. x1GateWeave adds that instability to your image procedurally, which sounds like a gimmick until you animate a video and realize it's the difference between "AI footage" and "old film."
It's part of MKRShift Nodes by Cris K B, under MKRShift Nodes/VFX/Stylize - the analog-degradation corner of the pack alongside x1Film, x1FilmDamage, and the rest.
How it works
The node applies small, time-varying transforms to the frame: shift_x_px (default 2.0) and shift_y_px (default 1.4) are the base horizontal and vertical offsets in pixels, rotation_deg (default 0.35) adds a tiny rotation, and scale_jitter (default 0.01) makes the image subtly breathe in size. The jitter_mode (default gaussian) controls how the values wander frame to frame - Gaussian gives the organic, slightly-drifting instability of real film; other modes give steadier or choppier patterns. seed (default 2048) sets the pattern, and mix blends the woven frame against the original.
The key detail: this is a temporal effect. On a single still, a 2px shift and 0.35° rotation is just a slightly-crooked image. It's the frame-to-frame instability - the weave - that reads as projection, which means this node earns its keep on video, animated sequences, and anything where you can see motion. Re-seed or let the Gaussian mode wander and you get the organic, non-repeating drift that static noise can't fake.
The inputs that matter
Inside the settings_json:
shift_x_px/shift_y_px- the base frame offset (defaults 2.0 / 1.4).rotation_deg/scale_jitter- the tiny rotation and breathing.jitter_mode- how the values vary (gaussianis the default and the most convincing).seed- the weave pattern's seed.
Optional mask input with mask_feather / invert_mask, plus outputs image, mask, and a gate_weave_info string.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI, or install via ComfyUI Manager (search MKRShift_Nodes). No requirements.txt, no models, no keys.
The take
Where this shines is the "restored old footage" or "found tape" genre - stack it with the pack's x1FilmDamage (scratches, burns) and a touch of x1Film grain and you've got a one-graph analog-look generator. The honest caveat: on a static image it does almost nothing you can see, and overdoing the shifts (above ~4px) turns "film" into "nausea." Keep the shifts in the 1–3px range, let jitter_mode stay on gaussian, and for video make sure the seed produces steady-but-wandering motion - that steady drift is the whole effect.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"shift_x_px":2.0,"shift_y_px":1.4,"rotation_deg":0.35,"scale_jitter":0.01,"jitter_mode":"gaussian","seed":2048,"mix":1.0,"mask_feather":12.0,"invert_mask":false} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| gate_weave_info | STRING | — |