https://framer.com/m/Liquidmask-FEkATP.js

Io / Enhancements / EtchedPortraitReveal

EtchedPortraitReveal

EtchedPortraitReveal redraws an image as a live copperplate engraving, then lets the photograph bleed back through under the pointer or as the page scrolls.

Enhancements20 controlslive engravinghover or scroll reveal

Examples

Live specimens for every control the component exposes.

Default

The engraving is computed from the picture in real time — no pre-rendered artwork. The base image should be mid-dark and horizontal; a bright or busy source turns the hatching to noise.

Engraving density

lineCount is how many engraving lines cross the width, from 40 to 400. Fewer lines read as a woodcut, more as a banknote.

line count 60

line count 140

line count 300

Angle and hatch

lineAngle turns the whole plate. crossHatch fades a second layer of lines into the deep shadows — 0 leaves the shadows in single hatch.

angle 0°

angle 45°

cross hatch 0

Warp and wobble

warpStrength bends the lines around the tones in the picture; wobble adds the hand-cut irregularity that keeps it from looking printed.

default ink

warp 2×

wobble up

Props

The controls exposed on the instance panel.

PropTypeBehaviour
imageUrlimageThe base picture. Mid-dark and horizontal works best.
revealImageUrlimageOptional second picture shown under the reveal. Empty falls back to the original in colour.
backgroundColorcolorColour behind the plate.
lineCountnumberEngraving lines across the width, 40 to 400.
lineAnglenumberAngle of the engraving lines, in degrees.
warpStrengthnumberHow far the lines bend around the tones in the picture.
wobblenumberHand-cut irregularity along each line.
crossHatchnumberSecond line layer in the deep shadows, 0 to 1.
inkColorcolorColour of the engraving lines.
paperColorcolorColour of the ground they are cut into.
blobRadiusnumberSize of the reveal that follows the pointer.
blobFadeSpeednumberHow quickly that reveal closes again.
scrollDissolveEnabledbooleanDissolves the engraving on scroll instead of on hover.
dissolveStartnumberScroll position where the dissolve begins.
dissolveEndnumberScroll position where it finishes.
dissolveNoiseScalenumberGrain size of the dissolve edge.
dissolveEdgeSoftnessnumberHow soft that edge is.
dissolveSmoothingnumberEvens out the dissolve across the frame.
fadeInDelaynumberWait before the plate draws itself in, in seconds.
fadeInDurationnumberHow long that draw-in takes.
PropTypeBehaviour
imageUrlimageThe base picture. Mid-dark and horizontal works best.
revealImageUrlimageOptional second picture shown under the reveal. Empty falls back to the original in colour.
backgroundColorcolorColour behind the plate.
lineCountnumberEngraving lines across the width, 40 to 400.
lineAnglenumberAngle of the engraving lines, in degrees.
warpStrengthnumberHow far the lines bend around the tones in the picture.
wobblenumberHand-cut irregularity along each line.
crossHatchnumberSecond line layer in the deep shadows, 0 to 1.
inkColorcolorColour of the engraving lines.
paperColorcolorColour of the ground they are cut into.
blobRadiusnumberSize of the reveal that follows the pointer.
blobFadeSpeednumberHow quickly that reveal closes again.
scrollDissolveEnabledbooleanDissolves the engraving on scroll instead of on hover.
dissolveStartnumberScroll position where the dissolve begins.
dissolveEndnumberScroll position where it finishes.
dissolveNoiseScalenumberGrain size of the dissolve edge.
dissolveEdgeSoftnessnumberHow soft that edge is.
dissolveSmoothingnumberEvens out the dissolve across the frame.
fadeInDelaynumberWait before the plate draws itself in, in seconds.
fadeInDurationnumberHow long that draw-in takes.

Usage

Guidance carried over from the component definition.

Reach for EtchedPortraitReveal

A portrait or hero image should arrive as an engraving and resolve into a photograph.

The treatment must be computed live so any image can be dropped in.

Ink and paper colours need to sit with the rest of the palette.

The reveal should follow the pointer, or dissolve on scroll.

Reach for something else

The source is bright, pale or vertical — the hatching will read as noise.

You need a plain image treatment — use a fill and a filter.

The picture must stay legible at small sizes — the lines collapse.

Io — Enhancements

Every specimen above is a live component instance. Colour, type and radius resolve from the project theme tokens.

io

An experiment in what a design system becomes when AI can consume it.

© 2026 io

Contact me

Create a free website with Framer, the website builder loved by startups, designers and agencies.