⚗ Alchemica DeGrid (VAE 2-pixel grid fix)
That 2-pixel grid on your Krea 2 images is the VAE, and it takes one node to kill
- image
- image
- report
Look at flat skin or sky in a Krea 2 render at 400% zoom and you'll see it: a faint grid, spaced two pixels apart, running along both axes. It isn't your prompt and it isn't the sampler. It's the Qwen-Image VAE (the one Krea picked on purpose, for non-photographic work) leaving a lattice in the decode. Once you sharpen or upscale, that invisible lattice becomes very visible.
This node removes it. One input, one number, done in milliseconds on CPU-grade maths - no model, no second pass.
Why it's a real thing and not a placebo
The VAE's decoder leaves a spike exactly at the Nyquist frequency (period = 2 pixels) along x and y. Measured on real Krea 2 outputs in flat areas, that spike sits 2–6× above the neighbouring frequencies, worth about half a grey level. Textured areas show no such spike - which is the tell that it's the decode, not the picture.
It's a known enough annoyance that a community GLSL "Nyquist notch" shader for it scored 300+ on r/StableDiffusion back in July 2026, with people in the comments saying the real win was upscaling afterwards without amplifying the grid. This node is a different implementation of the same idea, and the difference is the part worth understanding.
A naive notch filter kills all energy at that frequency, which includes real texture. This one demodulates the band, averages over a ~6 px neighbourhood with a Gaussian, and keeps only the part that stays phase-locked to the pixel lattice. Real detail at that frequency has random phase, so it averages out and survives. What's left is clamped to ±strength grey levels and subtracted. Mean change on the measured images: 0.2–0.4 grey levels, spike back to neighbour level.
The two inputs
image- the decoded image. Straight after VAE Decode, before anything else touches it.strength- max correction per axis in grey levels, default 2, range 0–10. 2 is the recommended value. 0 is off. Resist going higher to "be thorough": the clamp exists so that the filter can only ever move a pixel by a couple of levels, and if you raise it you're giving the filter permission to eat texture.
Outputs: image, and a report string with the mean change, which is how you confirm it actually did something (a mean change of 0.0 on an image with an obvious grid means something upstream already fixed it).
Where it goes in the graph
VAE Decode → ⚗ Alchemica DeGrid → (fill light / upscale / sharpen) → Save
The order matters more than the node does. Before an upscaler or sharpener, always. Both of those amplify the grid along with everything else, and DeGrid sitting after a 2× upscale is working on a 4-pixel lattice it wasn't built for.
The latent is never touched - this is a pixel-space filter, so it has no effect on the latent you pass to a second sampler pass. If you're doing img2img or a two-stage run, the fix belongs on the final decoded image.
If your sampler already decoded and fixed the image for you, don't stack another DeGrid on top. ⚗ Alchemica KSampler Flex defaults its own degrid widget to 2 when a VAE is connected, and the other samplers default to 0 - so check the widget before wiring this in, or you're spending time removing a grid that's already gone.
Installing
Part of the AlchemicaSampler pack, no pip dependencies, ComfyUI 0.36+.
cd ComfyUI/custom_nodes && git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
Restart the ComfyUI server (not just the browser). The node lands at ⚗ AlchemicaMente/image.
You still need the Krea 2 stack for any of this to matter: krea2_turbo_nvfp4.safetensors or krea2_turbo_fp8_scaled.safetensors in models/diffusion_models, qwen3vl_4b_fp8_scaled.safetensors in models/text_encoders, qwen_image_vae.safetensors in models/vae. None of them ship with the pack.
Common issues
You see no difference. Zoom to 400% on flat skin before and after; at fit-to-window it is invisible on purpose. The report gives you the number instead of your eyes.
You still see a grid after upscaling. Then the grid is being reintroduced or created somewhere else, or you upscaled first and filtered second. Filter first.
A slightly softer look on heavy strength. That's expected: the clamp is generous at 10. Go back to 2.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| strength | FLOAT | 2.00–10 | Max correction per axis in grey levels. 2 = recommended (removes the Krea 2 / Qwen-Image VAE grid, keeps real texture). 0 = off. Use it BEFORE any upscaler or sharpening, which would enlarge the grid |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| report | STRING | — |