How to Halftone in Krita: The Index Color Filter Mask Fix for Grey Dots

APP TUTORIALDESIGNER

Krita's Halftone filter anti-aliases its own dots, leaving grey fringe that ruins a print-ready screentone. Here's the exact non-destructive filter-mask stack…

01/ ARTICLE

What does the Halftone filter do in Krita, and what are its three modes?

Halftone in Krita is a filter that converts an image's continuous brightness values into dots, lines, or shapes whose size — not color — represents tone. That's the whole mechanism. A bright area gets small dots, or none at all. A dark area gets dots large enough to nearly touch.

Krita's implementation lives under Filter > Artistic > Halftone, and it ships three modes. Intensity converts the image to grayscale before halftoning — the classic black-and-white newspaper look. Independent Channels halftones each color channel on its own, which gets you the colored, magazine-print or CMYK-style result you'd expect from separating an image into process colors. Alpha only halftones the transparency channel; useful for texturing the edge of a semi-transparent layer, not for the image content itself.

Resolution, Pattern, and Rotation angle are what actually drive the look. Resolution is dot pitch — turn it up or down until the pattern size matches your target LPI. Pattern gives you Dots, Ellipse, Diamond, Square, or Lines. Print workflows commonly rotate each separation to a different angle — 0°, 45°, 90° — specifically to dodge moiré between overlapping screens. Underneath those sit a Screen Generator (the fill-layer pattern source), Hardness (how soft or crisp each dot's edge is), an Invert toggle, and Foreground/Background color and opacity for the pattern itself.

Done this same job in Affinity Photo? The mental model transfers directly — Krita's Halftone filter is doing the same intensity-to-dot-size conversion, just under different parameter names. And if what you actually searched for was a dither, not a halftone, worth knowing dithering and halftoning solve different problems: dithering distributes noise to fake extra tonal levels at a fixed dot size; halftoning varies dot size to represent tone directly.

How do you set up a non-destructive Halftone filter mask in Krita?

Add Halftone as a filter mask, not through the Filter menu directly. The difference matters. A Filter menu pass bakes the effect into your pixels for good. A filter mask stays live — double-click it any time to change Resolution or Pattern, or delete it and get your untouched original back.

Working from a photograph, here's the setup: desaturate first if you want the classic grayscale look (BT.709 luminosity-based desaturation is the recommended method for photos — it weighs channels the way human vision actually perceives brightness), run a Levels pass so your midtones aren't clumped before halftoning distorts them further, then right-click the layer and add a Halftone filter mask. Set Mode to Intensity for a single-color screentone, pick your Pattern, and dial Resolution until the dot pitch matches what you're after — fine for a small print, chunky for a poster or riso pull.

There's a concrete reason to do this as a mask rather than a texture overlay. On the krita-artists.org forum, someone described a manual halftone method built from a texture image, and another user flagged the real limitation: "you can't resize the texture" once it's applied that way. The built-in filter's Resolution, Pattern, and Rotation controls stay adjustable indefinitely — and because it's a mask, a third user in the same thread pointed out you can target it to specific regions instead of the whole canvas, same as any other Krita mask.

Filter masks can also legally stack on top of each other on the same layer. A non-destructive halftone-gradient tutorial shows this directly: a Halftone filter mask goes on first, then a Gradient Map filter mask sits directly above it to recolor the dot pattern. The Gradient Map reads the halftoned result, not the flat gradient underneath it. That's the exact mechanism the next section leans on — just with Index Color standing in for Gradient Map.

Why do Krita's halftone dots come out grey instead of pure black?

Here's the failure mode. Krita's Halftone filter anti-aliases the edges of every dot it draws. On screen, at normal zoom, that looks fine — arguably better, since it reads smoother. Zoom in, or send the file to a press, and you'll find the dot edges are made of semi-transparent grey pixels instead of a hard black-to-white transition.

For a photographic halftone staying on screen, none of this matters. For anything that needs to be a true 1-bit image — screen printing, riso printing, a flat black-and-white comic panel — it's a real problem. A press expects pure ink or no ink at each point. A grey fringe pixel either prints as an unwanted soft grey, if your process even supports that, or gets rounded unpredictably by the RIP. Chasing a dither instead of this dot-size effect? The manual dithering method in Illustrator sidesteps the anti-aliasing problem entirely by working in fixed-size cells from the start. But if you specifically want halftone's variable dot size, that's not a substitute — you need the fix below.

How do you stack an Index Color filter mask on top of Halftone to fix it?

Index Color is a filter that maps grayscale brightness values to a chosen color ramp or palette. Its normal job is turning a grayscale image into flat, indexed color bands for palette-based or pixel-art work. Stacked in the right place, it also fixes the halftone anti-aliasing problem — a technique documented by illustrator Konayachi after running into exactly this issue while prepping screentone art for print.

The stack, bottom to top, on one layer: your base art (painted or desaturated to greyscale), a Halftone filter mask, then an Index Color filter mask directly above it. Set the Index Color ramp so anything above pure black maps to a single flat color — white, or whatever background you want. Because a filter mask reads the composited output of what's below it on the same layer rather than the original artwork, the Index Color mask sees the halftone's grey-fringed dots and collapses every non-black pixel to your flat color in one pass.

Order is the whole trick. An Index Color mask placed below the Halftone mask, or added to a different layer, has nothing halftoned to act on — it does nothing useful. It has to sit directly above Halftone, on the same layer, to inherit the dotted result. In Konayachi's own words, stacking "an Index Color filter mask on top of Halftone/Screentone filter mask" converts "all non-black pixels to white" — precisely the anti-aliasing fix, achieved without flattening or destroying either mask.

How do you get a transparent, print-ready halftone in Krita?

For riso, screen printing, or any process where the halftone needs to sit on colored paper rather than white, add one more filter mask above the Index Color mask: Color to Alpha, targeting the flat background color the Index Color step just created. That turns the flat white (or whatever color you chose) into transparency, leaving only the solid black dots.

Three filter masks, in this order — Halftone, Index Color, Color to Alpha — is what turns Krita's native filter into output a print shop can actually use, without flattening the image or losing the ability to go back and change the dot resolution later.

Which Halftone mode should you use: Intensity, Independent Channels, or Alpha?

ModeBest forWorks with the Index Color stack?
IntensitySingle-color, black-and-white or riso-style screentoneYes — this is the documented use case above
Independent ChannelsColored, magazine or CMYK-style separationsRarely — you're deliberately keeping multiple channel colors, so flattening to one flat color defeats the point
AlphaTextured, semi-transparent edge effectsNo — there's no grey dot fringe on solid content to fix

How does this compare to kott's halftone effect?

Doing this by hand in Krita is free, works fully offline, and hands you total control over every mask in the stack — you're never limited to whatever a tool exposes as a slider. The tradeoff: you're rebuilding the two- or three-mask stack from scratch on every new piece, and it's easy to get the mask order wrong the first few times.

kott® applies the same halftone-then-flatten logic as one effect, with Resolution, Pattern, and the black/white cleanup already wired together and previewable live before you commit to anything. It won't replace Krita for someone who wants to keep working non-destructively inside a larger illustration. But if you just need a clean, print-ready halftone fast, try the halftone effect in kott's studio with a test image already loaded.

Frequently Asked Questions

Do I need Krita's Index Color filter to use Halftone at all?

No. Halftone works fine on its own for a soft, photographic screentone. You only need to stack an Index Color filter mask on top when the halftone dots need to be pure, flat color — for screen printing, riso, or 1-bit comic output — because Krita's Halftone filter anti-aliases its dot edges by default.

Does stacking Index Color on top of Halftone destroy my original image?

No, as long as both are added as filter masks rather than applied through the Filter menu directly. Filter masks read the composited result of whatever sits below them on the same layer, so you can double-click either mask any time to change its settings, or delete the Index Color mask and keep the softer halftone underneath.

Which Halftone mode should I use for a colored print, Intensity or Independent Channels?

Intensity converts the image to grayscale first and gives a single-color newspaper look. Independent Channels halftones each color channel separately for a colored, magazine-print or CMYK-style result. Stack the Index Color fix on Intensity output when you want pure black dots; it's less useful on Independent Channels, since you're deliberately keeping multiple channel colors.

Why are my halftone dots grey instead of solid black even after using Index Color?

Set the Index Color filter mask's ramp so anything above pure black maps to your background color, and make sure the mask sits directly above the Halftone mask on the same layer — not below it, and not on a different layer. Order determines what each filter mask actually reads.

Can I get a transparent halftone for printing on colored riso paper?

Yes. Add a third filter mask, Color to Alpha, above the Index Color mask, targeting the flat background color you just created. That converts the flat color to transparency and leaves only the solid dots — the format a riso or screen-printing shop expects.

Conclusion

Halftone gives Krita its dot pattern. Index Color, stacked as a filter mask rather than applied flat, is what turns that pattern from anti-aliased grey into the pure black a press actually needs. The same principle — each filter mask reads whatever is composited below it — applies to any other Krita filter stack, once you know to check the order.

02/ OUT

Try it in the studio

Every setting described above is a real control. Open your own image and sweep it.

All journal entries