XWAVE RGB Channel Shift
Cheap channel fringing for glitch and VHS looks
- image
- IMAGE
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-horizontalorvertical.centered_channel-R,G, orB; the channel that stays anchored. Inshiftmode this also decides which side the red channel lands on.mode-shift(slide) ormirror(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.
mirrormode 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.
mirrorignoresdirection'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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| shift_amount | INT | 100–100 | — |
| direction | COMBO | 2 options: horizontal, vertical | |
| centered_channel | COMBO | 3 options: R, G, B | |
| mode | COMBO | 2 options: shift, mirror |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |