Apply a two-colour duotone effect to any photo. Pick shadow and highlight colours, adjust intensity and blend mode, then download a PNG. 100% client-side.
Duotone is a printing technique that replaces every tone in an image with a position on a gradient between two colours. The darkest shadows map to one colour; the brightest highlights map to the other; every midtone lands somewhere between them. The result is a graphic, high-contrast look used in editorial design, album covers and social media headers. This tool applies the effect entirely in your browser using the Canvas API — the image is never uploaded anywhere.
Upload any JPEG, PNG, WebP or GIF up to 10 MB, or click Try with demo image to see the effect immediately. Adjust the two colours using the colour pickers or the preset chips, then download the result as a lossless PNG. The before and after canvases update in real time as you change any setting, so comparing a Classic purple-gold scheme against an Ocean blue-cyan scheme takes two clicks.
The Shadow colour replaces pixels at luminance 0 (pure black). The Highlight colour replaces pixels at luminance 255 (pure white). Every tone in between is linearly interpolated: a pixel at 50% luminance lands exactly halfway between the two colours in RGB space. Picking a very dark shadow and a very bright highlight produces the strongest contrast; two similar colours produce a monochromatic tint rather than a true duotone. The Copy CSS button outputs a CSS filter approximation plus an SVG feColorMatrix reference — CSS filters cannot fully replicate pixel-level luminance mapping, so the note inside directs you to the PNG download for pixel-perfect results.
The 10 MB limit covers the compressed source file. In memory the image is decoded into a raw RGBA pixel array (4 bytes per pixel), so a 4000x3000 JPEG at 3 MB occupies roughly 48 MB of Canvas memory — very large images cause a brief processing pause indicated by the Processing… badge on the Duotone panel. GIF source files use the first decoded frame only; animated output is not supported. SVG files are rasterised at their natural size before the effect is applied, which may differ from their rendered CSS size on the page.
Apply a two-colour duotone effect to any image — download as PNG, no upload
Drop an image or click to browse
JPEG, PNG, WebP, GIF · max 10 MB
Colour Presets
Colours
Adjustments
Blend mode
Upload an image to see the effect
Upload an image to see the effect
How it works
Each pixel's brightness (BT.601 luminance) is mapped onto a gradient from the shadow colour to the highlight colour. Dark pixels take on the shadow colour; bright pixels take on the highlight.
The intensity slider blends between the original image (0%) and the full duotone (100%). At 50%, you get a natural desaturated look with a colour cast.
PNG download preserves the original alpha channel. CSS output is an approximation — for pixel-perfect results use the download.