no login, no key, every number sourced
Evidence
Bottles: 687. Gates on record: 5. Release 758634b.
Not predicted: tinted (626), powders (1), lip products (45), zinc too low to predict a cast (2), and any render more than 1 L* off its prediction (0).
0.982
blend model fit (R squared, 16 renders)
1.17
dE00 to target on a second selfie (bar 2.0)
0.355
blend strength at colorIntensity 100
19
API units spent on K1b
K1b blend strength by colorIntensity
blend strength
- 1
Read the gates
Each gate has a written pass rule, and every result stays, pass or fail. Gate 1's page notes what was looked at before its rule was written.
docs/gates on GitHub (opens in a new tab) - 2
Check the prediction
Refits the label model from the study table and recomputes Gate 1's held-out error.
curl -s https://cast-forecast.vercel.app/api/label-model - 3
Ask it as an agent
The same model, as MCP tools an agent can call.
llms.txt (opens in a new tab)curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"predict_cast","arguments":{"bottle_id":"cetaphil-sheer-mineral-face","skin_lightness":55}}}' - 4
Check the render mapping
Recomputes the K1b inverse from the published curve.
curl -s https://cast-forecast.vercel.app/api/gates - 5
The data
The 13-volunteer study table every prediction is fitted on (CC BY 4.0), and the FDA label behind each of the 687 bottles.
data/ on GitHub (opens in a new tab) - 6
Read the code
Lint, types, tests, build and a bundle scan run on every push.
StephenSook/cast-forecast (opens in a new tab)
Read from docs/gates in the repo at release 758634b. K1b used one person and one lighting condition. It tests YouCam's renderer, not any sunscreen.