Nodes/ComfyUI XWAVE Nodes/XWAVE RGB Channel Shift
ComfyUI Node

XWAVE RGB Channel Shift

Cheap channel fringing for glitch and VHS looks

By XWAVEart·Created about a year ago·Updated about a year ago· 2
XWAVE RGB Channel Shift
  • image
  • IMAGE
shift_amount10
direction
centered_channel
mode

Split the color channels, shove them apart, and you get that analog-video color misregistration look - the red and blue ghosting you see on bad VHS transfers and old arcade monitors. XWAVE RGB Channel Shift does exactly that with four knobs and nothing else. It's the quick-and-dirty sibling of the pack's dedicated XWAVE Chromatic Aberration node: this one is simpler, faster, and great for glitch, while the other does realistic lens fringing.

How it works

The image is split into R, G, B. One channel - your centered_channel - stays put. In shift mode, the other two get pushed a fixed number of pixels: the red channel shifts one way and the others shift the opposite way along the direction axis, leaving a gap where the un-shifted channel shows through. In mirror mode, the non-centered channels are flipped (fliplr for horizontal, flipud for vertical) instead of slid.

Important nuance from the source: the shift is one-directional per channel, not symmetric. Red goes right, the others go left. That's the signature of this node - you get the lopsided analog misregistration look, not a clean symmetric double-image. If you want the realistic lens-style fringing that fades with distance, that's what XWaveChromaticAberration is for.

The inputs that matter

  • shift_amount (0–100, integer) - how many pixels the non-centered channels move. This is your whole effect.
  • direction - horizontal or vertical.
  • centered_channel - R, G, or B; the channel that stays anchored. In shift mode this also decides which side the red channel lands on.
  • mode - shift (slide) or mirror (flip).

Output is a single IMAGE, into Preview/Save.

Setting it

  • Subtle (5–15 px): slight color fringing on edges - reads as cheap-lens or old-camera.
  • Medium (20–40 px): obvious channel separation; classic glitch poster look.
  • Large (50–100 px): the channels barely overlap; this is full VHS corruption energy.
  • mirror mode is where it gets weird fast - flipped channels create symmetrical distortion that looks nothing like normal aberration. Try it on faces for an instantly unsettling result.

Installing it

It's in ComfyUI XWAVE Nodes. ComfyUI Manager → search "XWAVE" → install ComfyUI XWAVE Nodes → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/XWAVEart/comfyui-xwave-xlitch-nodes
cd comfyui-xwave-xlitch-nodes
pip install -r requirements.txt

Pillow, numpy, scipy - no models, no keys, pure CPU.

Gotchas

  • No seed, no randomization - it's fully deterministic given the inputs, so the same settings always give the same image. Good for reproducibility, but you can't jitter it for variation.
  • The one-directional shift catches people. Because red moves one way and the others the other way, at large shifts you get a big dark gap on one side where no channel covers. That's not a bug - it's the glitch - but if you wanted symmetric separation, the Chromatic Aberration node is the better tool.
  • mirror ignores direction's "shift" semantics - actually no, it uses it: horizontal mirrors left-right, vertical mirrors up-down. Pick accordingly.
  • Per-frame Python loop. Single images instant, batches slower.

New pack, zero community footprint, so tune by eye. Start at 10 px horizontal with green centered, preview, and slide up until it breaks in the fun way.

CategoryXWAVE/Color

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
shift_amountINT100–100
directionCOMBO2 options: horizontal, vertical
centered_channelCOMBO3 options: R, G, B
modeCOMBO2 options: shift, mirror

Outputs (1)

NameTypeDescription
IMAGEIMAGE