# I Built an AI Face-Analysis Suite From Scratch — Here's What I Learned

> Source: <https://dev.to/star_doppel_b782d4e097c70/i-built-an-ai-face-analysis-suite-from-scratch-heres-what-i-learned-35mk>
> Published: 2026-07-17 22:21:37+00:00

If you've ever searched for a celebrity look-alike tool, you've probably noticed most of them fall into one of two camps: quiz-style pages that ask you five vague questions about your own face ("is your jaw pointed or round?"), or apps that quietly outsource the heavy lifting to a third-party face recognition API and slap a UI on top.

Neither approach sat right with me. Self-assessment is unreliable — people are bad at judging their own proportions, especially in a mirror where everything is flipped and inconsistently lit. And outsourcing the model means you're limited by whatever a generic library was trained to do.

So I built ** StarDoppel**, a suite of AI-powered face-analysis tools, with the matching engine written entirely in-house in Python rather than wrapped around an off-the-shelf face recognition library.

The idea is simple in concept, harder in execution: read a photo, extract measurable structure, and turn that structure into a comparable score.

Once the landmark-detection pipeline existed, extending it to other structural questions was a natural next step. StarDoppel now includes:

A few choices that came up repeatedly during development:

**No account requirement.** Every tool works with zero signup. This meant designing the backend to be fully stateless per-request — no user session tied to a stored photo, no persistence layer for images at all.

**Photos are deleted immediately after processing.** Each image exists on the server only long enough to generate a result. This shaped a lot of the architecture: no caching of uploaded images, no logging of raw photo data, and processing pipelines that explicitly discard the file reference once a result object is returned.

**Handling ambiguous input gracefully.** If more than one face is detected in a frame, the system doesn't try to guess which one the user meant — it returns an error and asks for a new photo. Same behavior when no face is detected at all (blur, extreme angle, poor lighting). Silent wrong guesses are worse than an explicit "please try again."

**What doesn't break the model.** Interestingly, makeup and facial hair don't meaningfully affect results, since the underlying bone/cartilage structure is what's being measured rather than surface texture. Masks are a different story — they remove too many reference points for a reliable read.

The celebrity database currently reflects the actor set it was built with, sourced from IMDb — expanding and refreshing that dataset is an ongoing task, along with extending coverage beyond actors. If you're interested in the technical side of facial landmark detection, distance-based similarity scoring, or just want to see the tools in action, you can try them at [stardoppel.com](https://stardoppel.com).

Happy to answer questions about the implementation in the comments.
