MakeupMe

How it works

The two models, what our code does with them, what is measured, and what stays on your device.

Finding the hair

MediaPipe Tasks Vision, Google's library for running vision models in the browser, under the Apache 2.0 licence, version 0.10.21, with its hair segmenter model (0.8 MB): for every pixel, how likely it is to be hair. The runtime is WebAssembly; on browsers that allow it the models run on the graphics processor, otherwise on the processor. Sources: the MediaPipe image segmenter page, the licence, and the files themselves at /vendor/ and /models/.

Finding the lips

The same library's face landmarker model (3.8 MB) places 478 points on a face; twenty of them trace the outer edge of the lips and twenty the inner edge. Source: the MediaPipe face landmarker page; the file is at /models/face_landmarker.task.

Changing the colour

Our own code, about 180 lines, in /js/makeupme.js. The picture is drawn to a canvas; the hair likelihoods become a soft mask; a copy of the picture takes the chosen colour's hue and saturation while keeping its own lightness (the browser's "color" blend), with a lift for light colours and a deepening for dark ones; the copy is cut to the mask and laid over the picture at the strength you set. Lips are the same, cut to the ring between the outer and inner lip edges, softened at the edge. The "Hold to see your own" button shows the untouched picture. "Save the picture" writes the canvas to a PNG on your device.

Measured

On a MacBook Pro (Apple M1 Pro), Google Chrome 155, 21 October 2026: 28 ms to find the hair and the lips in a 900 by 1200 picture (GPU delegate), measured 40 times and the middle value taken. "Copy the speed" puts your own numbers on your clipboard with the date and your browser's name. We have not measured how well the models find hair and lips; MediaPipe publishes its figures on the pages linked above.

What stays on your device

All of it. The page's content rule forbids any request to another host, and there is no server of ours behind it: the site is static files. Cloudflare, which serves the pages, adds its own analytics tag to them; the content rule makes your browser refuse it, so it loads nothing and sends nothing. Opening your camera asks the browser's permission in the usual way; the stream is drawn to the page and nowhere else. A photo you open is read by the page through a local address the browser makes for it and never sent.

Where the idea comes from

SeeDeep, a computer-vision project by the same owner, showed a live hair-colour changer in 2025 (its post is kept at seedeep.ai/posts). makeupme.ai was registered in October 2025 and answered nothing until October 2026, when a first page promised: "When something runs here, this page will say what it does and what it keeps, before it asks anyone to try it." This page, built 21 October 2026, is that something.

Credits

Contact: moe@sevenskyconsulting.com.