Not a folder of pictures. A function.
Milo's image identity is procedural: a credited source, a named recipe, a theme and an intensity produce one deterministic interpretation. Derivatives are a cache, not a master — deleting them and re-rendering must reproduce the package exactly.
MILO / SUBLIME and MILO / TRACE — knowing when not to transform.
For source photography or art that is already extraordinary. The source stays dominant: one localised field, and everything outside it untouched to the byte.
The band is a V1.1 mask mode: a soft-edged field that begins and ends inside the frame, so the intervention reads as a deliberate plate rather than a cut at the trim edge. Measured on this image: 8.8% of the frame changed; 0 pixels outside the band differ from the source. grain is 0 by design — the engine applies grain frame-wide after the mask, so any grain at all would break the untouched claim.
Parameters, and how to place the band
{ "effect": "selective-dither", "matrix": "atkinson", "strength": 0.78, "grain": 0,
"contrast": 1.02, "levels": 4,
"stops": [ {"at":0,"color":"#0B0C09"}, {"at":0.3333,"color":"#5A6D2A"},
{"at":0.6667,"color":"#F04A24"}, {"at":1,"color":"#F3EFE6"} ],
"mask": { "mode":"band", "axis":"y", "from":0.04, "to":0.13, "feather":0.045 } }
Placement is art direction, not a constant. Put the band where the source carries tone; a dark sky takes almost no treatment, which is correct. Record from / to / axis per image. Target intervention 5–10%. Above 12% it is not SUBLIME — use national-park, nous or paint and say so.
Source + recipe + theme + intensity.
Four values, one result, every time. The same four always produce the same pixels — there is no unseeded randomness anywhere in the engine.
source+recipe+theme+intensity=rendered interpretation
Why procedural rather than baked, and what the four values look like
{ "source": "assets/nature/originals/nat-library-half-dome.jpg",
"recipe": "sublime",
"theme": "dark",
"intensity": 0.09 }
- Honest. The derivative in the package and the render in the browser come from the same engine/core.js. ORIGINAL → PROCESS → OUTPUT is reproducible, not a claim.
- Small. A new surface needs a config, not a new asset.
- Correctable. Re-tuning a recipe re-renders everything that uses it; no drift between an old asset and a new one.
- Attributable. Every render records source, recipe, engine version and parameters into the manifest, so provenance survives transformation.
Originals are masters. Derivatives are cache.
Two sizes ship so the package is viewable without running the engine, and so there is a fallback when Canvas is unavailable. Everything else is rendered on demand.
| Original | stored, immutable — it is the credited work |
| Derivative 1200px + thumbnail 480px | stored — viewable offline, and the no-Canvas fallback |
| Every other size, theme and intensity | rendered on demand, cached per (image, recipe, size), bounded to 24 frames |
Treatment may eventually follow context.
The inputs are named here and demonstrated by hand. Production routing belongs to the application, not to the design system.
| Context | Leans toward |
|---|---|
| Turner + Today + QUIET + light | archive, low intensity |
| Yosemite + campaign poster + dark | national-park, full intensity |
| A photograph that is already extraordinary | sublime, 0.05–0.10 |
| A generated image | labelled; never archive, never passed off as a photograph |
Inputs: surface intensity · workspace type · theme · source type · task state.