Turn what a photo knows about itself — depth, faces, bodies, colours, metadata — into images. Nothing is sent: every model runs on the device.
Use: open the page on your phone, choose a photo, pick a style, adjust, save. "Add to Home Screen" to keep it as an app.
Sister project of Notus: same screen, same gestures, same single static page.
- Transform (rewrites the pixels) · Add (draws on top) · Export: each opens a drawer; pick an effect.
- The drawer closes and the bar becomes Cancel / Done.
- Hold the photo (still for a moment): a dot appears under your finger and its position sets the value, absolutely — across the photo for one option, across and up for options that go in pairs (shown normalized, 0…1 or −1…1).
- Option row (the title): drag vertically to pick another option. The zone under it describes the option and shows its values.
- Reset (top): all defaults. Choices picked by sliding a list (blend modes) apply when you release.
- Done stacks the effect as a layer. Layers: reorder (↑ ↓), blend mode (press and slide through the list, or tap for the next), opacity (drag sideways), delete (×). Tap a layer name to reopen it and change its settings; the stack is never flattened. Effects stack in order, without masks; every analysis always runs on the original photo. Undo / redo / Reset at the top.
- Tap the photo: full screen (pinch to zoom). Long press: the original.
Computed the first time an effect needs them, kept until the next photo.
| Analysis | Model |
|---|---|
| Depth (0 far … 1 near, normals derived) | Depth Anything V2 small, int8 (35 MB) |
| Faces (boxes, 106 landmarks, outline) | SCRFD-2.5G + 2d106det (InsightFace) |
| Bodies (6 people × 17 keypoints) | MoveNet MultiPose Lightning (19 MB) |
| Subject (matte) | u2netp (4.5 MB) |
| Colours (k-means palette) | — |
| Metadata (EXIF: camera, lens, exposure, date, GPS) | — |
The options set the data behind each effect (depth range, detection thresholds, joint confidence, smoothing…); the look has at most one or two options. Opacity and blend live in Layers.
- Transform — Orbit (pixels back in 3D, camera turned around them) · Scan (lines lifted by depth) · Depth sort (pixel sort inside a depth slice) · Lens (depth of field) · Relight (light on the depth normals) · Depth map · Normal map · Mesh (face landmarks triangulated) · Warp (liquify from the landmarks) · Smear (limbs dragged along their bones) · Sort (pixel sort on the subject or the background) · Matte · Isolate (keep one dominant colour) · Swap (dominant colours exchanged).
- Add — Slices (depth contour lines) · Echo (rings around the subject) · Graph (people linked to their nearest neighbours, with distances) · Face outline · Skeleton · Caption · Frame.
Exports JPEG or PNG, no EXIF.
A single static page, no build step. Inference: onnxruntime-web 1.22, WebAssembly, one thread.
index.html the app
vendor/ onnxruntime-web (MIT)
models/ ONNX models (see licences)
Serve the folder as is (GitHub Pages, or python3 -m http.server).
Depth runs at 518 × 518 single-threaded: expect a few seconds on a phone the first time a style needs it.
- Code: MIT, see LICENSE.
- onnxruntime-web: MIT, © Microsoft.
- depth.onnx: Depth Anything V2 small (Apache 2.0), ONNX export from fabio-sim/Depth-Anything-ONNX, weights quantised to int8 (MatMul/Gemm).
- movenet.onnx: MoveNet MultiPose Lightning (Apache 2.0, Google), ONNX from Kazuhito00/MoveNet-Python-Example.
- u2netp.onnx: U²-Net small (Apache 2.0), from danielgatis/rembg.
- det_2.5g.onnx, 2d106det.onnx: released by InsightFace for non-commercial research use only — same caveat as Notus, to be replaced before any stable release.