outlines
Contour, not rectangle
The black hairline is the flattened glyph outline the fuel bed was derived from — the same loops, in canvas space. If the outlines can’t be read, the mark gets no fire at all.
product · pdf-fire · 0.84
light
it up
Markdown → Vector pdf. On fire.
every mark reports tuning=production
outlines
The black hairline is the flattened glyph outline the fuel bed was derived from — the same loops, in canvas space. If the outlines can’t be read, the mark gets no fire at all.
offset
Zoomed to the bowl of the p: the contour rides outside the glyph body by a fixed outset, so the flame front starts off the ink rather than on it. Stroke width is the base thinned by 1/φ.
specimen · dev-view
figure · domain
seeds
The domain is a lattice sized to the mark — roughly four cells per point in the page plane. Every seed carries a fuel intensity; marker area tracks it, so a stronger drop reads larger.
Nothing here is classified by text rank. A title, a list dash and an inline bold run differ only by coverage geometry and seed.
Same view as above, projected into the volume. The page is the back face; k comes toward the camera. Each cell is a wireframe cube with a dot at its centre. Outlines and the 38 + 18 seeds ride the fuel bed.
layer 1 · --fire-debug
Every number below is what the binary reported for the h1
pdf-fire on page 1 — read back out of the painted
FireSpec, not copied from the source.
| quantity | value | note |
|---|---|---|
| grid | 56 × 88 × 29 | 142,912 cells · 5.20 × 5.17 pt each · 29 deep |
| domain | 291.2 × 454.9 | pt — the crop the sim runs in, for 217.5 × 68.8 pt of ink |
| particles | 428 | Lagrangian swarm carrying tongues and sparks |
| warmup | 92 · dt 0.22 | steps integrated before the frame is taken |
| seeds | 56 | edge 38 · stem 18 · balance 0 · 0.258 per pt of ink width |
| turbulence | 0.70 | curl-strength · vorticity ε 8.00 · local curl 2.60 |
| forces | 8.00 | buoyancy · cooling 0.75 · drag 0.08 |
| seed | 5bd390dd | …94a7ab75, from glyph-key f91627326266e104 — same glyph, same fire |
layer 2 · depth slabs
The camera is orthographic and fixed, so the 29-cell depth axis collapses onto the page plane. Emission integrates as Screen, absorption as Multiply — the volume integral becomes a blend stack the viewer evaluates on display.
Operator stack from the fluid sim: four cached depth panels, each an image of that band, skewed onto its plane. Screen and Multiply fold the stack onto the sheet.
| emission field | value | stage |
|---|---|---|
| min | 0.017 | after the raised-balance continue |
| p25 | 0.454 | — |
| median | 0.726 | the gate the column probe measures against |
| p75 | 1.056 | — |
| max | 2.055 | hot core |
| at measure | 0.733 | median before balance — the pass moved it 0.007 |
layer 3 · 16 nested levels
The field is cut at sixteen emission thresholds and each level-set is traced to a closed contour. The levels are nested, so the core takes all sixteen Screen layers while the outer haze takes one.
Same isolines, now sliced along k and stacked in front of the
page — not laid out in the plane. Threshold for level li is
f2.2 where f = 0.12 + 0.88·li/15 —
0.009 at L00, 1.000 at L15. Fifteen of the sixteen carried a contour on
this mark; the top level found no pixel that hot. Smoke is a separate
absorption isoline at 0.084.
emit · counted from the file
What actually lands in the PDF, counted by decompressing the content
streams of the three-page fire-control.md render.
| object | count | role |
|---|---|---|
| bézier | 305,687 | c — contour and tongue geometry |
| lines | 219,400 | l |
| subpaths | 56,857 | m — one per traced level-set component |
| fills | 56,752 | f |
| axial gradients | 2,650 | ShadingType 2 — tongue bodies and spark tails |
| radial gradients | 2 | ShadingType 3 — glow halo |
| blend modes | 3 | Screen · Multiply · ColorDodge |
| file | 8.3 MB | 3 pages, all vector — no raster anywhere |
figure · gate
Below the domain, one bar per column of the lattice: measured emission energy against the median. Green clears the gate; red is weak, and weak columns are what the raised balance pass goes back and feeds.
sheets · pdf-fire dev-view
One live simulation per specimen, two sheets each — measure (edge + stems settle) and balance (after the raised pass continues). Same profile every time; only the glyph changes.
L001 · measure
h1 text
L002 · balance
H2 heading
L003 · balance
H3 heading
L008 · measure
inline bold
specimen · page 2
specimen: examples/fire-control.md
axis R
| topic | R | fact |
|---|---|---|
| contract | 0.95 | one production profile · no rank variants |
| coverage | 0.92 | real glyph outlines · no rect substitute |
| relation | 0.90 | sibling of Fold · same A4 geometry |
| tuning | 0.88 | intensity 0.65 · smoke 0.30 · sparks 0.30 · blueshift 0.06 |
| pipeline | 0.85 | coverage → sim → slabs → vector |
| output | 0.82 | 2D vector · paths · gradients · blend modes |
| determinism | 0.80 | seeded per mark · reproducible, not physical |
| inspect | 0.72 | dev-view sheets · runtime fire report |
| legibility | 0.35 | reservation pass · TBD |
| api | 0.20 | TBD |
| bench | 0.15 | TBD |