DEV Community

KunStudio
KunStudio

Posted on • Originally published at headshot-studio-5h6.pages.dev

I built an AI headshot tool that keeps the actual face (flux-pulid instead of pure diffusion)

I built an AI headshot tool that keeps the actual face (flux-pulid instead of pure diffusion)

Most "AI headshot" generators run a text-to-image diffusion model conditioned loosely on your selfie, then hope the result still looks like you. It usually doesn't — noses shift, jawlines change, and the output looks like a sibling of the person who uploaded the photo, not the person themselves.

I built Crisp Headshots to solve that identity-drift problem specifically, using fal.ai's flux-pulid model instead of a standard img2img pipeline.

Why flux-pulid instead of the usual approach

Standard diffusion-based headshot generators (the kind behind most of the "$29 for 40 AI headshots" products) work like this:

  1. Fine-tune a LoRA on 10-20 uploaded selfies (slow, needs GPU minutes per user)
  2. Generate new images conditioned on that LoRA
  3. Accept that identity fidelity degrades the further the requested style is from the training photos

flux-pulid is an identity-preservation model — it takes a single reference photo, extracts a face embedding, and conditions generation directly on that embedding rather than on a fine-tuned LoRA. Practical differences for a small SaaS:

  • No per-user training step. One reference photo in, one generation call out. No LoRA training queue, no "come back in 20 minutes."
  • Identity fidelity holds up across styles. Corporate headshot, casual outdoor, studio backdrop — the face embedding stays anchored even as background/lighting/outfit change.
  • Cost and latency are predictable. A single inference call instead of a training job plus inference.

The pipeline

selfie upload → face embedding extraction (fal flux-pulid)
             → style prompt (corporate / casual / creative presets)
             → generation (multiple variants per style)
             → user picks favorites → download
Enter fullscreen mode Exit fullscreen mode

No account required to try it, no stored face data beyond the session needed to generate the images, and checkout is a flat one-time fee — no auto-renewing subscription pattern, since this is a pay-per-batch tool for people who need a headshot before a Monday interview or a LinkedIn refresh, not a recurring need.

What I'd tell anyone building on fal for identity-preserving generation

  • Test with photos that have inconsistent lighting/angles early — that's where embedding-based models separate from LoRA-based ones in quality.
  • Budget for variant generation, not single-shot. Users pick their favorite out of 4-6 options, they don't want one roll of the dice.
  • Preset prompts (corporate/casual/creative) outperform a free-text prompt box for this use case — most people don't know how to prompt for headshot photography and get better results from constrained choices.

Live tool: https://headshot-studio-5h6.pages.dev/

Happy to go deeper on the fal integration code or the variant-selection UX if useful — drop a comment.

Top comments (0)