All work

( 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
FIFI · CUT 02
Fifi: from predicted body composition to a rendered body, compared with real scans DXA predictions → 29 shape keys; 29 shape keys → Anny mesh (MCP); Anny mesh (MCP) → Blender render (MCP); Blender render (MCP) → Compare with SHAPY scans; Compare with SHAPY scans → Adjust; Adjust → DXA predictions. DXA predictions 29 shape keys Anny mesh (MCP) Blender render (MCP) Compare with SHAPY scans Adjust Fifi: from predicted body composition to a rendered body, compared with real scans DXA predictions → 29 shape keys; 29 shape keys → Anny mesh (MCP); Anny mesh (MCP) → Blender render (MCP); Blender render (MCP) → Compare with SHAPY scans; Compare with SHAPY scans → Adjust; Adjust → DXA predictions. DXA predictions 29 shape keys Anny mesh (MCP) Blender render (MCP) Compare with SHAPY scans Adjust

( 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.

Fifi: seven validation hooks decide every experiment by exit code Experiment → 7 validation hooks; 7 validation hooks → exit 0 accept; 7 validation hooks → exit 1 block; 7 validation hooks → exit 2 flag. Experiment 7 validation hooks exit 0 accept exit 1 block exit 2 flag Fifi: seven validation hooks decide every experiment by exit code Experiment → 7 validation hooks; 7 validation hooks → exit 0 accept; 7 validation hooks → exit 1 block; 7 validation hooks → exit 2 flag. Experiment 7 validation hooks exit 0 accept exit 1 block exit 2 flag
FIFI · 02 · Guards
Fifi: eight Claude Code subagents research the biology; the verifier and the adversary go last Endocrinologist → Integration analyst; Epidemiologist → Integration analyst; 3 specialists → Integration analyst; Integration analyst → Source verifier DOI via CrossRef; Source verifier DOI via CrossRef → Adversarial reviewer; Adversarial reviewer → Finding enters the model. Every finding needs an effect size; the adversarial reviewer has to find something. Endocrinologist Epidemiologist 3 specialists Integration analyst Source verifier DOI via CrossRef Adversarial reviewer Finding enters the model Fifi: eight Claude Code subagents research the biology; the verifier and the adversary go last Endocrinologist → Integration analyst; Epidemiologist → Integration analyst; 3 specialists → Integration analyst; Integration analyst → Source verifier DOI via CrossRef; Source verifier DOI via CrossRef → Adversarial reviewer; Adversarial reviewer → Finding enters the model. Every finding needs an effect size; the adversarial reviewer has to find something. Endocrinologist Epidemiologist 3 specialists Integration analyst Source verifier DOI via CrossRef Adversarial reviewer Finding enters the model

Every finding needs an effect size; the adversarial reviewer has to find something.

FIFI · 03 · Research swarm
Fifi: math first, biology second, before a feature enters the model Math valid? → Biologically plausible?; Biologically plausible? → Pathway · direction · effect size · indirect; Pathway · direction · effect size · indirect → Proceed; Pathway · direction · effect size · indirect → Monitor; Pathway · direction · effect size · indirect → Block; Pathway · direction · effect size · indirect → Research swarm. Math valid? Biologically plausible? Pathway · direction · effect size · indirect Proceed Monitor Block Research swarm Fifi: math first, biology second, before a feature enters the model Math valid? → Biologically plausible?; Biologically plausible? → Pathway · direction · effect size · indirect; Pathway · direction · effect size · indirect → Proceed; Pathway · direction · effect size · indirect → Monitor; Pathway · direction · effect size · indirect → Block; Pathway · direction · effect size · indirect → Research swarm. Math valid? Biologically plausible? Pathway · direction · effect size · indirect Proceed Monitor Block Research swarm
FIFI · 04 · Decision gate

How these numbers were measured

  1. 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). ↩
  2. 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). ↩
( Next cut ) Predictive maintenance at Makasa Sun