XWAVE JPEG Artifacts
Real JPEG sludge — it actually re-compresses the image
- image
- IMAGE
Most "JPEG artifact" filters fake it by drawing blocky noise on top of the image. XWAVE JPEG Artifacts cheats properly: it actually compresses the image to a real JPEG in memory and loads it back - over and over, at progressively brutal quality. What comes out is genuine 8×8 block artifacts, mosquito noise, and color bleeding, the exact degradation a photo gets from being screenshotted and re-uploaded ten times. If you want the "this was obviously a real photo pulled off a low-res forum" look, nothing fake comes close.
How it works
The single intensity slider (0–1) maps to two things under the hood:
- quality - from 90 (mild) down to 1 (catastrophic).
- iterations - 1 to 30 round-trips of
save as JPEG → reload.
At intensity 0.5 that's roughly 15 recompressions at quality ~45. At intensity 1.0 you're re-encoding 30 times at quality 1, which is where images turn into soup with visible blocking. Each pass re-quantizes, so artifacts compound rather than stay constant - that compounding is what makes it look like a genuinely degraded JPEG rather than a one-pass filter.
Inputs: just image and intensity. Output: a single IMAGE, into Preview/Save.
Where to use it
- Lo-fi realism: intensity 0.2–0.4 on a clean render gives that "compressed for upload" feel without destroying it.
- Found-footage / web-ripped aesthetics: 0.6–0.8, then slap on some film grain (XWAVE Noise Effect works well) for the full "recovered from an old hard drive" mood.
- A weird flex on high-res posters: the blocking actually reads as texture at a distance.
Installing it
Part of 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
Dependencies are Pillow, numpy, scipy - no model downloads, no keys. The whole pack installs together; if you have any other XWAVE node, this one's already on disk.
Gotchas
- It's genuinely slow at high intensity. 30 sequential JPEG encodes on a large image takes a while; on a video batch it's brutal. Keep it on single images, or keep intensity under ~0.5 for sequences.
- Alpha channels get flattened. RGBA input is composited onto a white background before compression, so transparency is gone on the output. Fine for RGB, surprising if you fed it a logo.
- Intensity 0 isn't zero. The formula floors at 1 iteration and quality 90, so even at 0 you get a subtle one-pass JPEG crunch. For a truly untouched image, don't use this node.
- There's no "just one light pass" control beyond the slider. Quality and iteration count are both derived from the same dial, so you can't do high-iteration/gentle-quality combos. It's one knob, take it or leave it.
The pack is new with no community signal behind it, so this is a "test on your own image" node - but the mechanism is real, which is more than most artifact filters can say.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| intensity | FLOAT | 0.500–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |