Oli Yeates · 5 November 2026

Eye Contact

Move your cursor and she watches it go. One photograph, 547 still pictures of her and no video playing: an experiment from Sprint in making a web page look back at you.

Eye Contact

Move your cursor across the picture below and she watches it go. Left, right, up, down... take it far enough to one side and she turns her head to keep up. Stop, and she holds your eye. It's a slightly odd feeling, being looked at by a web page.

Have a go. On a phone, touch the picture and she'll watch your finger instead. And when you've had enough of being stared at, rest the cursor on the end of her nose.

Open it full screen

What you're looking at

A studio portrait of a woman who doesn't exist, and 547 still pictures of her, most of them just her eyes. That's it. There's no video playing and nothing is modelled in 3D. Each of those pictures is filed under the exact direction she's looking in, two degrees apart, and the page blends the nearest few to wherever you're pointing.

Only the area around her eyes ever changes, about a tenth of the picture. The rest is one photograph that never moves, which is why it feels like a person holding still and not a film being scrubbed back and forth.

Why this one was hard

The hard part of these experiments is always the thing that sounds easiest. Here it was "her eyes follow the cursor". Ask an AI video model for a woman looking to her left and you get a head turn with the eyes locked on the lens. Ask for the eyes to lead and you get a flick and a blink. Give her something to look at, a bird say, and the model helpfully draws you a bird.

What worked was asking for less. Head still, face still, only the eyes move, slowly, all the way across. Then pinning each clip to a frame we'd chosen at both ends, so her gaze travels in a straight line at one height. Six rows of that, from looking down to looking up, and we had the makings of a grid.

The second problem was the gaps. Six rows aren't enough for a smooth look upwards, so the rows between had to be worked out from their neighbours, and our first go at that tore her eyelashes and gave her two catchlights in each eye (not a good look). The fix was to measure her face properly first and let the measurements guide every in-between picture.

Oh, and she flatly refused to go cross-eyed. Every attempt, both eyes went the same way. So that one is a cheat: one eye from a look to the left, the other from a look to the right, joined down the bridge of her nose.

How we made it

Here's the whole thing, step by step, with the pictures from the build.

1. Film her eyes, one row at a time

The video model was given the photograph and asked for one thing: her eyes crossing from one side to the other while nothing else moves. The eye-level row starts from the photograph itself. The other rows are pinned at both ends to frames we picked, so her eyes travel in a straight line at one height.

Seven clips cover six heights, from looking down to looking up. Two more turn her head.

Six frames from one clip: her eyes travel from one side to the other while her head stays still
Six frames from one five-second clip. Only her eyes move.

2. Measure where she is looking

A face-tracking model, Google's MediaPipe, lays a mesh of 478 points over her face in every frame. We use a handful: the two corners of each eye and the centre of each iris. How far the iris sits from the middle of its eye, as a share of the eye's width, gives the angle she is looking at.

Her portrait with a mesh of 478 points drawn over her face, her eyes and irises outlined in blue
The mesh MediaPipe finds on every frame.

The same mesh gives the turn of her head, which is how a frame where she moved gets caught.

Her eyes looking −32°, with the eye corners, lids and iris markedHer eyes looking 0°, with the eye corners, lids and iris markedHer eyes looking +32°, with the eye corners, lids and iris marked
Three looks from the finished set. Top to bottom they are filed under −32°, 0°, +32°, and measure −32.3°, +0.6°, +32.3°.

3. Take one frame for every two degrees

Her eyes do not move at an even speed. They drift, then jump. So frames are picked by angle, never by time. Frames where she blinked, or where her head moved more than 2.5 degrees, are thrown away first.

Where her eyes point through one clip124 frames in five seconds. A frame is kept for every two degrees: 33 of them here.Where her eyes point in each frameThe frame kept for each two degrees−40°−20°0°+20°+40°looking rightlooking left0s1s2s3s4s5s
One clip from the build, measured frame by frame. Her eyes drift, then jump, so frames are picked by angle and never by time.

4. Pin every frame to the photograph

From clip to clip her head sits a few pixels differently and the light drifts. Each frame is lined up to the photograph using the skin around her eyes, matched for tone, and then only what moved is kept: irises, lids and brows.

The portrait dimmed, with a bright rectangle over her eyes and brows: the only area that changes
The lit rectangle is all that changes: 9.8% of the picture.

Everything else you see is the one photograph, pixel for pixel. That is why her face holds still while her eyes move.

5. Fill the grid

Six filmed rows are too few for a smooth look up or down, so a computed row goes between each pair. The mesh says where every lid and iris sits in the row above and the row below, and the picture between is built from both.

That makes 11 rows of 41 looks: 451 pictures of her eyes, two degrees apart. With 96 whole frames for the head turn, 48 each way, that's the 547.

A sheet of her eyes in 11 rows, from looking up at the top to looking down at the bottom, and from left to right across each row
Every sixth look of every row. The blue bars mark the rows that were filmed; the rows between were computed.

6. Turn her head

Past 40 degrees her eyes run out of travel, so two more clips turn her head, one each way, slowly. A head speeds up and slows down as it turns, so these frames are picked by distance, never by time: one for each steady step her nose travels across the picture.

How far her head has turned through one clip192 frames in eight seconds. 48 are kept, at steady steps of how far her nose has travelled.How far her nose has travelled across the pictureA frame kept for the head turn0%10%20%30%0s1s2s3s4s5s6s7s
The turn to one side, measured frame by frame, as a share of the picture's width. Her head starts slowly, speeds up and settles, so frames are picked by distance and never by time.

That's 48 frames each way, close enough together that the page can blend from one to the next without a double image. Each one is matched back to the photograph's tones, and the backdrop stays the photograph's own, so nothing dims as she starts to turn.

7. Blend it on the page

The page works out the angle from her eyes to your cursor, finds the four nearest looks and blends them. A spring carries her gaze there, so it glides. When you stop, she settles on one sharp picture. Take the cursor past the reach of her eyes and the head frames take over, blended two at a time in the same way.

Her eyes crossed, both looking in towards her nose
The cheat: one eye from a look to the left, the other from a look to the right, joined down the bridge of her nose.

AI made the pictures. We chose her, directed every clip, measured every frame and threw away the ones where she blinked.

What it's for

Attention, mostly. A page that reacts to you in the first second is a page you stay on, and a face is the thing we're all wired to look at. This one is a portrait, but the same trick makes a mascot that watches you scroll, a model in your glasses who looks straight at whoever's shopping, or a campaign page that turns to follow you round the screen.

It's also light. There's no video to buffer and nothing clever for the phone to work out, just a set of small pictures that load from the middle outwards, so she's looking back at you almost as soon as the page opens.

Built by Sprint

Eye contact is an experiment from Sprint, the web development studio that's part of Clicky Group. It's one of a series we're building to show what we can make when we stop starting from a template.

Want a page that looks back?

If you'd like something on your site that people can't help playing with, talk to Sprint. We'll show you what it could look like with your brand in the frame.