Free tool

Halftone generator

Turn any photo into a print-⁠style halftone: rotated dot screens, a second misregistered ink for a riso look, PNG at full resolution and vector SVG. It runs in your browser, so your image never leaves your device.

Halftone generator

or drop an image here, or paste it with Ctrl+V

The live preview needs WebGL 2, which this browser does not provide. SVG export still works.

Your image stays on this device. Nothing is uploaded.

Screen
8 px

45°
Dot shape
Tone
0
0
Inks and paper

Presets

Riso-like colours are screen approximations, not official ink specifications.

#0F1828
#F1F3F2
Second ink
Second ink settings
#E09A1A
15°
60%
+2 px
-2 px
Export

What is a halftone?

A printing press can’t print grey. Each plate either puts ink on the paper or leaves it bare. Halftoning fakes every tone in between with a grid of dots: large dots that almost touch read as dark, small dots surrounded by paper read as light. At normal viewing distance the eye blends them back into a continuous image.

Newspapers, magazines, screen-printed posters and risograph zines all rely on it. A digital halftone like this one measures the brightness of the photo under every cell of the grid and draws a dot whose area matches that tone.

0%50%100%
One grid, eleven tones: dot area grows from 0% to 100% ink. Past about 79% round dots touch, and the paper only shows through small gaps.

LPI, cell size and screen angle

LPI (lines per inch) counts the rows of dots in an inch. Typical values are around 85–100 LPI for newsprint, 133–150 LPI for magazines on coated paper and 175 LPI or more for art books. The finer the screen, the less visible the dots.

This tool sets the screen by cell size, in pixels of your image. To convert: LPI = image resolution in PPI ÷ cell size. A 12 px cell printed at 300 PPI gives 25 LPI, a bold pattern you notice on purpose. A fine 150 LPI screen would need 2 px cells at 300 PPI, which is why a visible halftone is a design choice rather than a way to reproduce a photo faithfully.

Screen angle rotates the grid. 45° is the classic angle for a single ink because diagonal rows are the least noticeable: the eye picks up horizontal and vertical lines much more easily. When inks overlap, each gets its own angle, traditionally 30° apart (for example 15°, 45° and 75°, with yellow at 0°), so the grids form small rosettes instead of a coarse moiré.

Left: one ink at 45°. Right: a second ink at 15°, shifted by a fraction of a cell, which gives the rosette and colour fringes of a two-colour print.

Why misregistration happens

Every ink is printed from its own plate, stencil or drum, in its own pass. Paper stretches with humidity, feeds a fraction of a millimetre differently each time, and every machine has mechanical tolerances. Offset printers fight this with registration marks and press checks; on a risograph or a screen-printing table the shift becomes part of the look.

A slight offset between two inks creates the overlapping fringes people associate with riso prints. The misregistration sliders reproduce exactly that: they move the whole second plate relative to the first, dots and image together.

For print

  • Export at the final print size. A finished halftone does not survive resampling: scaling it later blurs or breaks the dots.
  • Ask your print shop about the smallest dot they can hold. Tiny highlight dots disappear and nearly solid shadows fill in first, so keep the cell size comfortably above that.
  • Ink spreads on uncoated paper (dot gain), so prints come out darker than the screen. Lift Brightness a little for newsprint or uncoated stock.
  • Use SVG when the halftone will be resized, recoloured, cut or engraved. In Illustrator, Inkscape or Figma each ink is its own group of shapes.
  • For two-colour work, put the darker ink on the 45° screen and keep the second ink about 30° away.

For screen

  • Use bigger cells than you think. Dots need to be several pixels wide to survive compression and resizing on social platforms.
  • Judge the pattern in the 100% view. A scaled-down preview of fine dots can show moiré that is not in the file.
  • Turn on Transparent paper to export only the ink, so the halftone can sit on any background in a layout.

FAQ

Halftone generator questions

Is the halftone generator free? Are my images uploaded?

Yes, it is free, with no sign-up and no watermark. Your image is decoded and processed in your browser with WebGL. It is never uploaded, so there is nothing on a server to store or delete.

What is the difference between the PNG and SVG export?

PNG is a raster image at the original pixel size of your photo; very large images are scaled down to fit browser memory, and the tool tells you before you export. SVG is vector: every dot is a shape, so it stays sharp at any size and each ink can be recoloured in an editor. SVG is computed from a downscaled sample of the photo and is limited to 150,000 dots, so use PNG for very fine screens.

What LPI should I use for printing?

It depends on the press and the paper. As a rough guide: around 85–100 LPI for newsprint, 133–150 LPI for magazines on coated paper, and much coarser screens when the dots are meant to be seen. The note under Cell size shows the LPI your setting gives at 300 PPI. Check with your print shop before sending files.

How do I get a risograph look?

Keep Second ink on, pick two contrasting inks (the riso-like presets are a good start), keep the screens about 30° apart and add a few pixels of misregistration. Off-white paper and a little extra contrast complete it. The preset colours are screen approximations, not official ink specifications.

Why do I see moiré or wavy patterns in the preview?

The Fit view shrinks your image to the screen, and resampling a regular grid of dots can create interference patterns. Switch to 100% to see the real dots. The exported PNG is rendered at full size and does not contain that moiré unless the cells are only a few pixels wide.

Made by Nick Iakzhin. Free, no sign-up, nothing leaves your device.

Send a short brief

Your email app opens with the message filled in. Nothing is sent until you press send.