# Halftone & Riso Separation Maker > Split an image into CMYK halftone or 1–3 riso-style ink plates. 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. Part of usefulweb.app (https://usefulweb.app/). Part of [Flipline](https://flipline.usefulweb.app/) (ownerApp: flipline). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://fliplinehalftoneriso.usefulweb.app/ (interactive tool at https://fliplinehalftoneriso.usefulweb.app/tool) - JSON API: POST https://fliplinehalftoneriso.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://fliplinehalftoneriso.usefulweb.app/api/v1/tool) - OpenAPI: https://fliplinehalftoneriso.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://fliplinehalftoneriso.usefulweb.app/mcp - tool `flipline_halftone_riso` ## Inputs - image (file, required): Image (PNG, JPEG or WebP) - effect (select): Print process - resolution (select): Machine resolution - width (integer): Working width (px) - fit (select): Image fit for machine resolutions - scale (integer): Output scale (whole pixels) - pitch (number): Screen cell size (px) - shape (select): Dot shape - angles (select): Screen angles - gcr (integer): Black generation (GCR, %) - inks (text): Riso inks (1–3 HEX colours) - screen (select): Riso screen - misregistration (integer): Misregistration (px) - paper (text): Paper colour (HEX) - seed (integer): Registration seed - brightness (number): Brightness - contrast (number): Contrast - gamma (number): Gamma - saturation (number): Saturation (%) ## Method - 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). ## Limits - Screen preview with authored ink colours and no ICC profile, dot gain or press calibration. Check plates with your print shop before production.