video performance, ar filter, 16:9, hd, sound, 1:30 minutes, 2014β2026
creating a self-portrait using images from the web, with the aid of an anonymous search engine composed in a screen-performance on my computer desktop.
%%{init: {'theme': 'base', 'flowchart': {'curve': 'stepBefore'}, 'themeVariables': {'primaryColor': '#000', 'primaryTextColor': '#fff', 'primaryBorderColor': '#fff', 'lineColor': '#fff', 'secondaryColor': '#000', 'tertiaryColor': '#000', 'background': '#000', 'mainBkg': '#000', 'nodeBorder': '#fff', 'clusterBkg': '#000', 'clusterBorder': '#fff', 'titleColor': '#fff', 'edgeLabelBackground': '#000'}}}%%
flowchart TD
START[START] --> WEBCAM[CREATE WEBCAM]
START --> SEARCH[SEARCH IMAGES]
WEBCAM --> TRACK[MEDIAPIPE FACE MESH]
TRACK --> LANDMARKS[EXTRACT LANDMARK POSITIONS]
SEARCH --> PROXY[PROXY IMAGE]
PROXY --> DETECT[DETECT FACE]
DETECT --> CROP[CROP FACE REGION]
LANDMARKS --> POSITION[POSITION OVERLAY WINDOWS]
CROP --> POSITION
POSITION --> COMPOSITE[COMPOSITE ON WEBCAM]
LANDMARKS -.-> TRACK
COMPOSITE -.-> TRACK
bundled default images are shown instantly while the search + crop pipeline runs in the background. each detected face gets its own unique set of portrait images.
- instant start: bundled face-part images display immediately β no loading screen
- multi-face: each detected face (up to 5) gets its own unique set of portrait images
- face centering: webcam auto-zooms and centers on the detected face
- screenshot: capture the ar view with overlays + "le" watermark (desktop download / mobile share)
- emoji loader: cycling ππππ indicator while images load in background
- animated favicon: matching emoji animation in the browser tab
- corner ui: reload, info panel, "le" glitch signature, camera β inspired by leandroestrella.com
- face tracking: mediapipe face mesh (468 landmarks, up to 5 faces)
- image cropping: face-api.js (ssd mobilenet + 68-point landmarks)
- image search: duckduckgo image search (server-side proxy)
- server: express (local dev) / php + apache (production)
- deploy: github actions β ftp to cpanel on push to main
npm install
npm start
# open http://localhost:3000requires camera access. works on desktop and mobile browsers.