Upload a portrait to check it against US Visa (DS-160, 2×2 in) or Schengen / ICAO (35×45 mm) requirements — head geometry, pose, background, lighting and expression — then auto-crop it to a print-ready, DPI-tagged file. Everything runs in your browser.
Choose a portrait to begin — nothing is uploaded.
Passport & Visa Photo Validator — ICAO 9303 / DS-160 compliance
A privacy-first biometric photo checker that inspects a portrait against the US Department of State (DS-160, 2×2 inch) and Schengen / ICAO Doc 9303 (35×45 mm) requirements — head size and position, pose, background colour and lighting — and auto-crops it to a print-ready file with the correct DPI. Every pixel is measured in a Web Worker in your browser; the photo never leaves your device and no server is contacted.
What it measures
- Geometry: crown-to-chin head height, eye-line height and horizontal centring as exact fractions of the frame, with the standard’s acceptable bands.
- Head pose: roll, yaw and pitch via a weak-perspective POS solver against a canonical 3-D head model, with roll cross-checked exactly from the eye line.
- Background: chromatic uniformity as CIE76 ΔE*ab spread, mean L* brightness, a Sobel edge-energy pattern scan and a cast-shadow gradient check around the head silhouette.
- Illumination: left/right facial symmetry via SSIM and luminance-histogram divergence, plus specular hotspot detection.
- Expression: eyes-open and neutral-mouth checks — measured Eye/Mouth Aspect Ratios when an offline mesh model is present, honest image heuristics otherwise.
On honesty and the face model
There is deliberately no bundled face-mesh model and no CDN download — that would send the photo, or fetch megabytes, off-device and break the local-only guarantee. Anchors are seeded automatically with the browser’s own face detector where available and refined with drag handles, which is enough for exact ICAO geometry. For full 468-point automation and measured eye/mouth ratios you can register your own offline model (MediaPipe or ONNX) via globalThis.__ORILAMI_FACEMESH_MODEL__; it still runs locally and uploads nothing. This tool is a pre-submission screen — the issuing authority makes the final decision.
