Free · open source · runs in your browser
Pick the country and the document. Choose a photo, or take one. OpenPhotoId finds your face, separates you from whatever was behind you, paints the background the document requires, crops to the official head and eye positions, and checks the result against the rules before you download it.
There is nothing to sign up for, no watermark, no price after you have done the work, and nothing is uploaded — the whole pipeline runs inside the browser tab.
Works best on a phone, where the front camera is one tap away. On a computer, choose a photo you already have — any background at all.
The core is written in Rust and compiled to WebAssembly. Two small neural networks — a face detector and a portrait matting model — run through your browser's own graphics hardware where it has any, and on the CPU where it does not. Nothing here has a server to talk to.
Five landmarks — eyes, nose, mouth corners — locate the head, measure its tilt, and anchor every rule that follows.
A matting model produces a soft edge, then a second pass zoomed in on your head resolves hair at full resolution. Sold as an upgrade elsewhere; on by default here.
White for a US passport, light grey for the UK, the exact colour each document names. Or a gradient, a studio sweep, or your own picture, for a photo that is not for a form.
Head height, eye line and centring each have an allowed band. The crop lands in the middle of every band at once, and three sliders let you move within them.
Eleven checks run on the finished file — and the face is detected again on the output rather than trusted from the crop, so the checklist describes the photo you will actually submit.
A JPEG inside the portal's size window — 20 to 50 KB for India's PAN, under 240 KB for a US visa — a lossless PNG with the right DPI, or a 4×6, 5×7, A4 or Letter sheet tiled with cutting guides.
A checklist is only worth trusting if it says what it measured. Every check names its value and the band it was judged against, and the same eleven run on every document. This is what a US passport photo made from a typical portrait reports.
1 face57.0% · band 50–69%62.4% · band 56–69%0.4% · tolerance 5%2.7° · max 5°98 px · min 90variance 1147 · min 808.8% · warn from 17%ΔE 0.0 vs #FFFFFF600 × 600200 KB · max 240Every entry carries the government page its rules came from and the date they were last checked; the app shows both. If the one you need is not here, it is not here — you should not have to find that out after making the photo.
| Country | Document | Output | File |
|---|---|---|---|
| United States | Passport · Visa (DV lottery) | 600 × 600 px · 51 × 51 mm | ≤ 240 KB |
| United Kingdom | Passport | 413 × 531 px · 35 × 45 mm | ≥ 50 KB |
| European Union | Schengen passport | 413 × 531 px · 35 × 45 mm | — |
| China | Passport · Visa online · 1-inch ID · 2-inch ID | 390 × 567 px · 33 × 48 mm | 40 – 120 KB |
| India | Passport · Passport Seva digital · PAN · OCI | up to 900 × 900 px | 20 – 50 KB (PAN) |
| Canada · Brazil | Passport | 591 × 827 px · 50 × 70 mm | — |
| Australia · Japan · Russia · South Korea | Passport | 413 × 531 px · 35 × 45 mm | 100 – 500 KB (KR) |
| Singapore | ICA digital | 400 × 514 px | — |
| Saudi Arabia | eVisa | 200 × 200 px | 5 – 100 KB |
| United Arab Emirates | ID card | 472 × 709 px · 40 × 60 mm | — |
The full list, with sources and check dates, is in the app under "Documents covered". English and Simplified Chinese.
Every passport-photo site says your photo is safe with them. Here there is no "them": open your browser's developer tools, switch to the Network panel, and make a photo. After the app and its models have loaded, nothing else is requested.
Hair-level edge detail, unlimited batches, backgrounds beyond a flat colour, print sharpening, a drawn jacket for a photo taken in a T-shirt: the five features this category sells by subscription are all on and all free. Every one of them runs on your own device, which costs nothing to provide — so there is nothing to meter.
The source is MIT or Apache-2.0. If that ever stopped being true, the version where it was true would still be there to fork.