Premium apps Part of Flipline

Halftone & Riso Separation Maker

Split an image into CMYK halftone or 1–3 riso-style ink plates.

More options

Try an example: Newsprint-style CMYK rosettes · Blue and pink riso grain

More about this tool

How it works

Separate a photo into CMYK with black generation, or into one to three spot inks by bounded least squares, then screen every plate with rotated round, diamond or line dots or a blue-noise grain. Preview the overprint on paper with misregistration and download printable grayscale plates.

  • The source is area-resampled in linear light (transparency over the paper colour) and developed. CMYK: C = 1 − R, M = 1 − G, Y = 1 − B on sRGB values; K = GCR × min(C, M, Y) and the remaining colour is rescaled by 1 / (1 − K).
  • Riso: for each colour, ink amounts 0–1 minimise the squared optical-density error (−ln of linear transmittance relative to the paper). Every combination of inks at 0, 1 or free is solved exactly and the best feasible one is kept (bounded least squares, exact for up to three inks).
  • Screening: each plate is rotated to its screen angle and split into cells of the given size; coverage is sampled at the cell centre from a cell-sized blur and drawn as a dot of equal area (round dots invert to round holes above 50 %), 4 × 4 supersampled. Grain compares coverage with a blue-noise threshold map.
  • Preview: plates are shifted by seeded misregistration (plate 1 stays fixed) and overprinted by multiplying ink transmittances in linear light. Plates are exported unshifted as grayscale PNGs (black = full ink).

Screen preview with authored ink colours and no ICC profile, dot gain or press calibration. Check plates with your print shop before production.

Sources

Part of Flipline

  • Flipline Drawing, storyboards & animation

    A few drawings. A little life. Make a flipbook in your browser.

    Open Flipline

How to use the Halftone & Riso Separation Maker

Split a photo into CMYK halftone plates or one to three riso-style spot inks, preview the overprint with misregistration and download printable plates.

What it is for

Printed pictures are made of dots. This tool shows how a photo breaks apart into ink plates and how those plates look when they are printed on top of each other. In CMYK halftone mode it separates cyan, magenta, yellow and black and screens each plate at its classic angle, which creates the familiar rosette pattern of newspapers and comics. In Riso-style spot inks mode it splits the picture into one to three inks of your choice, the way risograph and screen printers work.

You get a preview of the overprint on paper, a ZIP with one grayscale PNG per plate (black means full ink) and a table with each plate's ink, angle, coverage and registration offset. It is a design and learning tool: the ink colours are screen approximations, and there is no ICC profile, dot gain or press calibration. Ask your print shop before you send plates to production.

Worked example

I uploaded a 1600 × 1068 px alpine photo, chose Print process "CMYK halftone", a 480 px working width, Output scale 2 and a Screen cell size of 7 px, and kept 60 % black generation and 2 px misregistration. The answer was "4 CMYK halftone plates at 960 × 640 px." The plate table read: cyan at 15° with 45.4 % coverage, magenta at 75° with 36.4 %, yellow at 0° with 33.9 % and black at 45° with 28.9 %. The cyan plate stays in place; the others were offset by one or two pixels (for example yellow by −1, 2), which gives the slightly misaligned look of cheap print.

For riso, I chose two inks, #2f5aa8 (blue) and #ff7a33 (orange), with Riso screen "Blue-noise grain". The blue plate covers 58.3 % and the orange plate 36.5 % of the page. With grain, the angle column shows 0, because grain has no screen angle. A single teal ink with a line screen gave one plate at 15° and 48.8 % coverage.

How to read the result

  • Download overprint preview PNG shows all plates multiplied onto the paper colour, including the registration offsets.
  • Download printable plates ZIP contains plate-1-cyan.png and so on, unshifted, plus separation.json with inks, angles and offsets, and the look recipe.
  • Ink coverage (%) is the average ink area of each plate. It hints at ink use and at plates that barely matter.
  • Offset X/Y is the simulated misregistration in pixels. Set Misregistration to 0 for perfect alignment.

Tips and common mistakes

  • Choose the cell size for the final print size. At 300 pixels per inch, a 7 px cell is about 43 lines per inch: visible, poster-like dots. Smaller cells look smoother but are harder to print.
  • Black generation (GCR) moves neutral greys from the three colour plates to black. More GCR means cleaner greys and less colour ink; 0 % keeps all shading in cyan, magenta and yellow.
  • Riso inks cannot mix colours they do not contain. Blue and pink cannot make green, so pick inks that cover the important colours of your image.
  • Inks are separated by least squares in optical density, so dark areas often use more than one ink at full coverage.
  • Use Diamond dots or Line screen for a stronger graphic pattern; round dots turn into round holes above 50 % coverage.
  • Light paper colours keep the preview realistic; a dark paper makes every ink look darker, just like on real paper.

FAQ

Why are the CMYK plates rotated?

Rotating the screens to 15°, 75°, 0° and 45° keeps the dot rows of different plates from interfering, which would cause moiré. Choose "All plates at 45°" to see what happens without rotation.

Can I print the plates directly?

They are ordinary grayscale PNGs at the output size. Check the resolution, dot size and registration marks your printer needs; the tool does not add marks or bleed.

Are the riso ink colours official?

No. They are authored screen colours that describe a hue, not manufacturer ink data. You can enter your own HEX values.

Can I make an animation?

Not with this tool. In Flipline's Era effects, several frames with misregistration use a new seed per frame, which makes the plates wobble.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://fliplinehalftoneriso.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://fliplinehalftoneriso.usefulweb.app/mcp · tool name flipline_halftone_riso
Example request
curl -s -X POST https://fliplinehalftoneriso.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'
Feedback · ideas & bug reports welcome