How to Dither a Gradient in Aseprite: 4 Manual Methods

APP TUTORIALDESIGNER

Aseprite gives you four real ways to build a dithered gradient: hand-painted pixels, a reusable pattern brush, the native gradient tool's Bayer matrix and…

01/ ARTICLE

How do you hand-paint a dithered gradient pixel by pixel?

Grab the Pencil Tool (B) and place your two palette colors in an alternating pattern across the transition zone. More of color A near one end, more of color B near the other, blending gradually in the middle. No algorithm. You decide, pixel by pixel, which color goes where.

This is the right call for small transitions — a few pixels of banding between a highlight and a midtone, or a palette shape the built-in Bayer patterns just don't suit. It's also the clearest way to see what "ordered dithering" is actually doing before you hand the job to a tool. Every automated method below is the same alternating-pixel idea, just applied by a matrix instead of by eye.

Split your time between Aseprite and a vector tool? The same alternating-pixel logic carries over directly. See the native method for hand-dithering in Illustrator for the equivalent workflow there.

How do you turn a dither pattern into a reusable Aseprite brush?

Hand-painting doesn't scale past a handful of pixels, so once you've got a pattern you like, turn it into a brush. Draw the pattern with the Pencil Tool, select it with the Rectangular Marquee (M), press Ctrl+B to generate a brush from the selection, and save it to a quick-access slot (Alt+1 through Alt+9). The Paint Bucket (G) then fills any region with that exact pattern, consistently, at any size.

It solves the scaling problem. But it trades away gradation — a brush built this way holds one fixed pattern density. It repeats a checkerboard or a specific dot arrangement across a fill; it doesn't taper from mostly-color-A to mostly-color-B the way a real gradient does. Use it for a flat dithered fill, not a smooth transition.

How does Aseprite's gradient tool dither automatically?

Press Shift+G to open the Gradient tool, then switch the Dithering option from "No Dithering" to a Bayer matrix or Error Diffusion. Pick Linear or Radial as the gradient type. Hold Shift while dragging to snap the angle, hold Alt to draw the gradient outward from its center point.

One catch: dithering only produces a visible pattern in Indexed color mode with a small palette. In RGB mode, with millions of colors available, the same matrix still runs under the hood — there's just nothing left for your eye to blend, so it reads as a plain smooth gradient. Set your palette first.

Dithering modePattern characterBest for
Bayer 2x2Coarse, highly visible checkerboard2-3 color palettes, hard retro look
Bayer 4x4Medium regularitySmall-to-mid palettes, balanced detail
Bayer 8x8Fine, regular, screen-likeLarger canvases, subtle retro texture
Error Diffusion (Floyd-Steinberg)Organic, irregularPhotographic source art, avoiding visible repetition

Bayer matrix dithering places each pixel's color based on a fixed, repeating threshold grid — that's why it looks regular. Floyd-Steinberg error diffusion works differently: it pushes each pixel's rounding error onto its neighbors, which is why the result looks organic and doesn't repeat.

Building a fully custom Bayer matrix

The built-in 2x2/4x4/8x8 presets aren't the ceiling. Aseprite's own issue tracker documents a manual path for a custom matrix: build a grayscale tileable texture where brighter tones mean lighter pressure, sort and convert it to Indexed color, save it as a lowercase, single-word .bmp, then hand-edit the Bayer Matrices extension's package.json to register the new file. Even the maintainers call the process "incredibly overcomplicated and user unfriendly".

This isn't a decorative side feature, either. Dithering-matrix support in the gradient tool is maintained closely enough that Aseprite shipped and fixed a critical v1.3.2 regression that broke the matrix-to-gradient pipeline outright.

Want a texture that isn't a regular grid at all? Blue-noise stippling is the non-Bayer alternative — organic look, no Floyd-Steinberg directional streaking.

How do you fake a dither gradient with layer opacity and blend mode?

Add a new layer with a dither texture on it, drop the layer's opacity (50% is a reasonable starting point), and set its blend mode to Overlay. The texture integrates with the colors underneath instead of replacing them. You get the illusion of extra shades without touching your indexed palette at all — handy when the palette is locked and you can't add colors to it.

It's a compositing trick, not a true indexed-color dither. Looks right on screen, but it won't survive a flatten-to-indexed export the way a gradient-tool dither does, since the "extra" shading only exists as long as the overlay layer is composited live.

Which of these four methods should you actually use?

Match the method to the constraint, not the other way around. Transition only a few pixels wide? Hand-paint it. Pattern you need to repeat across a large fill? Build a brush once, bucket-fill it everywhere. Real gradient over a small, known palette? The gradient tool, Bayer or Error Diffusion depending on canvas size and how photographic the source is. Palette locked and can't grow? The opacity/overlay layer trick.

Would rather skip building matrices or brushes from scratch? tliad's "101 Dither and Pattern Brushes" pack is a premade fifth option worth knowing about.

Frequently Asked Questions

What's the fastest way to dither a gradient in Aseprite without any setup?

Use the Gradient tool (Shift+G), switch Dithering from No Dithering to a Bayer matrix, and drag. No custom brush or extra layer needed.

Why does my Aseprite gradient look too smooth to be dithered?

Dithering only reads as dithering in Indexed color mode with a small palette. In RGB mode Aseprite still applies the pattern, but with millions of colors available your eye doesn't need to blend anything, so the effect disappears visually.

Which Bayer matrix size should I use?

8x8 for a fine, regular retro-screen look on larger canvases, 4x4 for a middle ground, and 2x2 once you're down to two or three palette colors and want the most visible checkerboard blend.

Can I use my own custom dithering pattern instead of the built-in Bayer matrices?

Yes, but it's manual: build a grayscale tileable texture, convert it to Indexed color, save it as a .bmp, and register it in the Bayer Matrices extension's package.json. Aseprite's own bug tracker calls this workflow user-unfriendly, so most artists stick to the built-in 2x2/4x4/8x8 presets or a premade brush pack.

Conclusion

Four ways to get a dithered gradient in Aseprite, from fully manual to fully automated: hand-painted pixels, a pattern brush, the gradient tool's Bayer matrix and Error Diffusion modes, and an opacity/overlay layer. Which one fits comes down to how wide the transition is, whether the pattern needs to repeat, and whether your palette can grow.

kott runs the equivalent matrix and error-diffusion math live on a real photo, so you can compare Bayer 2x2 through 8x8 and Floyd-Steinberg against your own source image without rebuilding the gradient by hand each time. Try it at kott.io/studio with a dithering preset already loaded.

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