ComfyUI Node

Gate Weave

Analog gate weave without renting a projector

By criskb·Created 7 months ago·Updated 5 months ago· 0
Gate Weave
  • image
  • mask
  • image
  • mask
  • gate_weave_info
settings_json{"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}

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 (gaussian is 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.

CategoryMKRShift Nodes/VFX/Stylize

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"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}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
gate_weave_infoSTRING