Methods & provenance

The models behind the numbers, and where the data comes from

Every figure this product shows you is a computed estimate. This page names the methods that compute them and the data they run on, so you can judge the numbers instead of trusting them. The short companion piece, the determinism receipt, draws the exact line between the engine and the language model.

The catalog

The engine runs on a catalog of roughly 260 materials: naturals and aroma chemicals, each carrying descriptor profiles, olfactive family, usage guidance, and physical data (boiling point, molecular weight, vapor pressure, density), keyed to CAS numbers.

That data is hand-curated, and the word is doing real work. Early on we tried bulk-filling physical data from public chemistry databases. It quietly poisoned the engine: reduced-pressure boiling points and modeled vapor pressures made tenacious base materials read as volatile tops. We stopped. Catalog physics is curated by hand against a CAS-keyed master file, and disagreements are settled against primary references rather than whichever database answers first.

The volatility model

How a material behaves over time is modeled with a three-factor volatility index:

FactorWeightWhy it matters
Boiling point45%The strongest single predictor of evaporation behavior at skin temperature
Molecular weight30%Heavier molecules leave the skin more slowly; the classic BP-MW framework after Calkin and Jellinek
Vapor pressure25%The direct measurement, used where a trustworthy figure exists

When a curated vapor pressure is missing, the model falls back to the two-factor form rather than inventing one. When physical data is missing entirely, the material falls back to its curated catalog role rather than wearing a guess dressed as a measurement. Metrics that cannot be computed show no data, and a material with no curated density is flagged on the lab sheet.

Roles in context

A material's top, heart, or base reading is not a fixed label. The engine computes the formula's weighted center of volatility and shifts the role thresholds around it, bounded to a small range, so lemon at half a percent in a heavy amber reads as the accent it is, not the driver it is not. If you pin a role by hand on the edit screen, your pin wins and the engine leaves it alone.

Performance estimates

Projection, longevity, and sillage are computed estimates derived from the volatility model and the composition. They are honest about being estimates: the formula page carries a standing note that the numbers are starting points and the bench wins. Studio Pro lets you record your own bench reading beside the estimate; your reading is displayed and exported, and it never feeds back into the engine's math.

Lab math

Lab sheets convert between percentages, grams, and milliliters using a mass-weighted density computed from the actual composition, not an assumed 1.0. Materials with no curated density are flagged on the sheet rather than silently assumed.

Where the language model sits

In a handful of places, each labeled in the interface. Two can propose composition: the plain-language brief box, where the model reads your words and proposes a palette with starting proportions, and the inventory advisor, where it drafts formula ideas from what you own. The rest is prose and naming: the optional AI Insights commentary on a formula (its suggestion changes percentages only when you choose to apply it), scent stories, and name and accord-name suggestions. The structured generator, the computed read-back, and the craft tooling, meaning substitution ranking, the cost optimizer, reformulation, build-check, and the lab math, run with no model in the loop. The full boundary, and how to verify it yourself, is on the determinism receipt.

Engine said, bench said

A model is only worth what the bench confirms. This is a standing public log of computed estimates against real bench readings, hits and misses both, from us and from the perfumers reviewing the product.

Log opened June 2026 · no entries yet

The first entries land here as bench reviewers run formulas at the bench and report back. Misses get logged with the same prominence as hits, alongside what we changed because of them.

Benched something the engine got right or wrong? Send the formula and your reading to [email protected] and it goes in the log, credited if you want.

The limits, stated plainly

Related reading: the determinism receipt · your formulas are yours · the changelog