FL Halftone
Turn any image into newsprint-style dots
- images
- IMAGE
Halftone is the old newspaper-print trick: instead of continuous tones, you print a grid of dots that vary in size - big dots where the image is dark, tiny dots where it's light - and your eye blends them back into gray from a normal viewing distance. FL_HalftonePattern does the digital version of that, and it's a genuinely fun finishing effect for anything that wants a retro-print, comic-book, or Ben-Day-dot look layered over a generated image.
How it works
It converts your image to grayscale internally, then walks it in a grid, drawing a circular dot at each grid cell sized proportionally to how dark that region of the source image is. Bright regions get small dots (or none), dark regions get dots big enough to nearly fill their cell. The output is still a full RGB image - this doesn't reduce your image to a mask or a 1-bit pattern, it just re-renders the tones as dots.
The inputs and outputs that matter
Only one required input: images. Everything else is tuning:
dot_size(1–20, default 5) - the maximum dot diameter. Bigger numbers mean chunkier, more obviously "printed" dots.dot_spacing(5–50, default 10) - how far apart the grid cells are, i.e. dot density. Tighter spacing with a small dot size gives a fine, almost photographic halftone; wide spacing with big dots gives you the exaggerated comic-panel look.
Output is a single IMAGE, ready to save or feed into a compositing chain.
How to install it
FL_HalftonePattern ships inside the ComfyUI_Fill-Nodes pack alongside a big grab-bag of other image, VFX, and API nodes. Easiest path is ComfyUI Manager: search ComfyUI_Fill-Nodes, install, restart ComfyUI. Manual install works the same as any custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart. This particular node is pure PIL/grayscale math - no model download, no extra Python dependency beyond what ComfyUI already ships with.
Common issues & troubleshooting
Dots look muddy or barely visible. That's almost always dot_spacing set too wide relative to your image resolution - at 512px, a spacing of 50 only gives you ~10 dots across the whole frame, which reads as blotchy rather than as a pattern. Scale spacing down for smaller images, or upscale the source first.
Effect feels too subtle at default settings. The defaults (dot_size=5, dot_spacing=10) are conservative on purpose - they read as a light texture rather than a full stylistic overhaul. Push dot_size toward the top of its range and drop spacing a bit if you want the loud, unmistakable comic-print look.
It's a one-way effect. Like any halftone process, this throws away smooth gradients in exchange for the dot pattern - there's no "undo" short of re-running on the original source. Keep the pre-halftone image around if you're not sure you'll like the result, and try it on a duplicate branch of your workflow rather than in place.
If you like this family of effect, it's worth knowing FL-Nodes ships a whole shelf of similar pattern/mosaic generators in the same VFX section - FL_HexagonalPattern for a mosaic-tile version, FL_ImageCollage for photomosaics, and FL_PixelArtShader for a quantized pixel-art look - so if halftone isn't quite the texture you want, one of its siblings probably is.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| dot_sizeopt | INT | 51–20 | — |
| dot_spacingopt | INT | 105–50 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |