Inspiration
When a child has been missing for years, the only photo a family has may show a face that no longer exists. Forensic artists (for example at NCMEC) create age progressions, often using photos of the child's parents and siblings. Consumer "aging" apps use one photo, keep uploads, and never say how accurate they are. I wanted to build something inspired by the forensic approach, respectful to grieving families, and honest about what it can and can't do.
What it does
- A parent uploads a photo of the child, the date of birth and when the photo was taken, and frames the child's face.
- Optionally they add photos of biological parents or siblings, and distinguishing marks (moles, scars, birthmarks). An AI can suggest marks, but the family confirms them, and it never guesses race or ethnicity.
- The app works out the child's age today and creates three possible images, never a single "this is your child" image.
- Each image says which AI model made it, with a confidence note based on real test results for that age gap, and guidance: share with police or NCMEC, always share the original photo too.
- Safety by design: no accounts, no database, no gallery, no search or matching. Photos go only to the image model and are deleted right after.
How I built it
- App: Next.js (TypeScript, Tailwind) on Vercel. The browser frames and shrinks the photo; the server checks inputs, computes ages, writes the instructions and calls the image model.
- Models: Google's Nano Banana 2 (via Replicate) is the main image model, chosen because it measurably kept identity best in my tests. The free FLUX.2 klein model on Cloudflare Workers AI is an automatic backup, so the app never breaks. A Gemma 4 vision model suggests distinguishing marks.
- Evaluation: a Python pipeline on the FG-NET research dataset. For 42 real people, I aged a childhood photo to the age of a real later photo using exactly the app's code, and compared faces with ArcFace (InsightFace). The key question: does aging beat simply using the original photo?
Challenges I ran into
- The result wasn't what I hoped. No aged image matched the real grown-up better than the original childhood photo (0 of 42). The AI "beautifies" faces. Research calls this the Age-ID trade-off: the more you age a face, the more identity you lose.
- Prompts behave in surprising ways. "Child" made results too young, "13 years older" made them look 50, and image models don't understand "no". Naming a life stage ("the age of a university student") fixed the age.
- I found mistakes in my own evaluation: a face detector missing faces on old scans, an experiment that silently did nothing, and 7 of 42 sex labels that were guessed wrong. Each time, I checked real examples, fixed it and re-ran.
- Free-tier limits: the "daily" AI allowance actually works like a rolling 24 hours, so I built a small tool to check it.
Accomplishments I'm proud of
- Tested seven approaches fairly: same people, one change at a time, 95% ranges instead of lucky examples, and prompt tuning only on separate "dev" people.
- Found a measurable improvement: Nano Banana 2 raised identity similarity from 0.173 to 0.208 (95% range of the change +0.003 to +0.070). For children missing over 10 years, the right person was found first 43% of the time instead of 14%.
- Published everything, including what failed, on an Accuracy page inside the app.
What I learned
- A face-matching score alone rewards "doing nothing": you must also check the image actually aged.
- A bigger model isn't automatically better: it followed instructions more but kept the person less.
- Check automatic labels and outputs by eye before trusting them.
- An aged image can't contain more information about how someone really grew up than the original photo. Its value is helping people picture the child, which is why the app always says to share the original too.
What's next
- A small study with people: can viewers recognise the right adult more often with an aged image?
- Measure family-photo guidance with a dataset that has children's photos over time and their parents.
- Try face-editing models built to keep identity.
AI assistance
I built this with significant help from an AI coding assistant (Claude Code), which wrote most of the code. I made the product and safety decisions, chose the experiments, tested the app and decided how to present the honest results. My decisions and lessons are logged in LEARNING.md.
Built With
- arcface
- cloudflare-workers-ai
- flux
- gemma
- insightface
- matplotlib
- nano-banana-2
- next.js
- python
- react
- replicate
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.