( FIFI · CUT 02 )
A virtual fitting room that became a research pipeline for reconstructing bodies from medical data, run by agents whose guardrails are written in code.
- Role
- Founder & lead ML developer
- Timeline
- 2025 → 2026-10
- Status
- PAUSED
- Stack
- Python
- MediaPipe
- SMPL
- Render
- Blender
- NHANES (DXA)
- Claude Code subagents
- Claude Agent SDK
- MCP
- NAVER Anny
( 01 — Overview )
Overview
Fifi started with a question that kept bothering me. Online sizing is still unreliable, and most "3D try-on" avatars look fine at a glance but miss what decides fit: whether weight is muscle or fat, how a body carries it. Could I build a body model faithful enough to compare with a real one? Get the body right, and dressing it becomes the smaller problem.
( 02 — The startup (2025) )
The startup (2025)
- The MVP shipped. Fifi started as a virtual fitting room: a few inputs, a body-shape estimate, and a 3D model rendered in the browser. The MVP used MediaPipe pose detection and SMPL body models on a Python backend deployed to Render; Render's default Python 3.13 broke MediaPipe in production.
- iLaunch. Pitched Fifi at Texas Tech's iLaunch competition (did not win), with 3D assets and a logo animation built in Blender, after talking to retail professionals at Austin FC and boutiques in Lubbock. The pitch didn't win, but it taught me the real value. Reducing returns matters, but not every retailer pays for returns. Every retailer wants to turn a shopper who clicked an ad into a buyer.
( 03 — The pivot: from silhouettes to biology (2026) )
The pivot: from silhouettes to biology (2026)
A body is more than its outline. Pivoted to a hierarchical biological model that predicts body composition (DXA measurements from NHANES) before shaping a 3D mesh. That changed the problem from computer vision to research: which measurements actually drive body shape, and how much?
- Research by agents, checked by agents. Eight Claude Code subagents with distinct roles research the biology: an endocrinologist, an epidemiologist, a source verifier that checks every DOI via CrossRef, an integration analyst, an adversarial reviewer and three specialists. Two hard rules: every finding needs an effect size, and the adversarial reviewer has to find something, or it didn't do its job.
- Math first, biology second. A feature that improves the statistics but has no biological pathway gets blocked. A contradiction with the literature needs a population-specific explanation and a falsification test, or it's blocked too.
- Guardrails as code. A 260-line rules file held for about an hour; by hour five the agent had approved an experiment that broke two rules. That is why the rules became code. Seven validation hooks enforce the pipeline's rules in code, exiting 1 to block an experiment or 2 to flag it. Hard blocks: cross-validated R² below 0.60; copula condition number above 1,000; a feature present in under 90% of training or 80% of inference data.1 Soft flags: distribution shift over 5 standard deviations; calibration ratio outside 0.5–1.5 or 90% interval coverage under 80%; any subgroup R² under 0.50 or more than 0.10 below overall; a null test every fifth experiment.2 The agent doesn't interpret the rule. It reads the exit code.
- Giving the agent a body. An MCP server wraps NAVER's Anny body model with 15 tools, mapping DXA body composition to 29 shape-key weights and exporting, measuring, comparing and fitting meshes. A Claude Agent SDK agent connects that server to Blender's MCP to render the predicted bodies and compare them with SHAPY scans of real people.
( 04 — Where it stands )
Where it stands
Fifi is paused (October 2026): going further needs paired 3D body scans with DXA data, which haven't been available.
( 05 — What failed )
What failed
- Production broke what worked on my laptop. Render's default Python version didn't support MediaPipe. The fix was easy; the lesson was to treat deployment as part of the design.
- Rules in a prompt drift. By hour five, an agent following a 260-line rules file approved an experiment that broke two of them. Rules that matter now live in hooks.
- Statistics said yes, biology said no. Features that raised R² with no mechanism behind them would have quietly made the model worse on new people.
- The data ran out. The next step needed paired 3D scans and DXA data that I couldn't get.
( 06 — Credits )
Credits
Built by Jovi Ukwade. iLaunch, Texas Tech University.
Every finding needs an effect size; the adversarial reviewer has to find something.
How these numbers were measured
- Hard blocks: cross-validated R² below 0.60; copula condition number above 1,000; a feature present in under 90% of training or 80% of inference data. Method: Thresholds as written in the hook code (LinkedIn, 9 Apr 2026). ↩
- Soft flags: distribution shift over 5 standard deviations; calibration ratio outside 0.5–1.5 or 90% interval coverage under 80%; any subgroup R² under 0.50 or more than 0.10 below overall; a null test every fifth experiment. Method: Thresholds as written in the hook code (LinkedIn, 9 Apr 2026). ↩