Skip to content

Mio: the inner line the artwork always had - #761

Merged
AllTerrainDeveloper merged 1 commit into
trunkfrom
mio/inner-line
Sep 4, 2026
Merged

Mio: the inner line the artwork always had#761
AllTerrainDeveloper merged 1 commit into
trunkfrom
mio/inner-line

Conversation

@AllTerrainDeveloper

@AllTerrainDeveloper AllTerrainDeveloper commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

The reference Mio wears a crisp white line between the black body and the chroma. The renderer never drew one — and everything about the ring measured correct the whole time it was missing (the hues, the endpoints, the falloff), because nothing measures the thing that is not there. What came out was a coloured outline around a shape rather than a lit tube seen edge-on.

Before black body → chroma ring → glow
After black body → white line → chroma ring → glow

The pass

A sixth pass, liner, between sheen and core, with two keys to drive it:

  • linerWidth — px, 0 draws none, range 0–12.
  • linerColor — ships as Starlight #fffbff, the same white as the eyes and now the third flat palette colour Mio uses.

It reaches inward, from the ring's own inner edge further into the body. Thickening the line eats into the black rather than widening the ring, so outlineWidth keeps meaning the coloured band alone — the same "two sliders must not multiply" rule the glow reach was given when it stopped scaling off the outline. The silhouette does not move when you drag it.

The pair splits the artwork's own stroke. Miomesh's Mio is a 13-unit ring on a body of roughly 240 — 5.4%, or 6px on the shipped radius — and that 6 is the whole drawn ring, chroma and line together. So they ship two to one: outlineWidth 34, linerWidth 2.

It meets the ring exactly. The band's outer boundary is computed as core computes its inner one, so the two share their edge coordinates bit for bit and tile with neither seam nor overlap — the anti-beading invariant applied between two passes rather than between two cells. mio-render.test.ts asserts that pairing directly, control points included.

Like core it keeps the normal offset (a line has to be an even width, and a dilation's is not), so it inherits the same folding limit — which is why linerWidth stops at half of what outlineWidth allows. Flat colour, drawn over the sheen: the hue sweep and the glint belong to the tube, and a line catching either would read as a second, dimmer ring.

Everywhere it had to be mirrored

  • types.ts, config.ts (defaults, limits, sanitize), look.ts whitelist, and the PHP twins in includes/mio.php (defaults, whitelist, limits, colour clamp).
  • Style panel — the Ring section gains Inner line and Inner line colour. The panel-completeness test requires every appearance key be reachable, so a knob added to the config cannot quietly stay unreachable.
  • Portraits — agents wear Mio looks, and an avatar without the line would be a different face. An SVG stroke is centred on its path and cannot be offset to one side, so it is stroked at the full width it would need reaching both ways and a clipPath throws the outer half away; the chroma stroke over it covers the inner reach, leaving the same band the live renderer fills. Both twins changed, fixture regenerated, clipPath added to both tag allowlists.
  • "Surprise me" derives the line from the ring it rolled rather than rolling one of its own. Not only because the two only look right in proportion — a draw taken there would shift every number after it and re-roll the face of every agent that has a seed and no portrait yet.
  • docs/mio.md — a new The inner line section, plus the passes list, the panel table, the config reference and the brand section.

Tests

  • mio-render.test.ts — a new the inner line block driving a whole frame through drawMio with a recorder behind every layer: one flat colour, the bit-identical seam with core, that thickening it leaves the core's geometry untouched, and that 0 draws nothing.
  • mio-brand-fidelity.test.ts — the line is the third named palette colour, and it is really there.
  • Fixture cases and both portrait tag allowlists.

Green: typecheck, lint (0 errors), test:js (5862), lint:php (0 errors), test:php (2925), build.

🤖 Generated with Claude Code

Open WordPress Playground Preview

The reference Mio wears a crisp white line between the black body and
the chroma, and the renderer never drew one. Everything about the ring
measured correct the whole time it was missing — the hues, the
endpoints, the falloff — because nothing measures the thing that is not
there. What came out was a coloured outline around a shape rather than
a lit tube seen edge-on.

So a sixth pass, `liner`, and two keys to drive it: `linerWidth` (px,
`0` draws none) in `linerColor`, which ships as Starlight, the same
white as the eyes and the third flat palette colour Mio uses.

It reaches INWARD, from the ring's own inner edge further into the
body. Thickening the line therefore eats into the black instead of
widening the ring, which keeps `outlineWidth` meaning the coloured band
alone — the same "two sliders must not multiply" rule the glow reach
was given when it stopped scaling off the outline.

The pair splits the artwork's own stroke. Miomesh's Mio is a 13-unit
ring on a body of roughly 240 — 5.4%, or 6px on the shipped radius —
and that 6 is the whole drawn ring, chroma and line together. They ship
two to one: `outlineWidth` 3 -> 4, `linerWidth` 2.

The band's outer boundary is computed exactly as `core` computes its
inner one, so the two share their edge coordinates bit for bit and tile
with neither seam nor overlap — the anti-beading invariant applied
between two passes rather than between two cells. The test asserts that
pairing directly, control points included. Like `core` it keeps the
normal offset, because a line has to be an even width and a dilation's
is not, and so it inherits the same folding limit; `linerWidth` stops
at half of what `outlineWidth` allows.

Flat, and drawn over the sheen: the hue sweep and the glint belong to
the tube, and a line catching either would read as a second, dimmer
ring.

Portraits draw it too — agents wear Mio looks, and an avatar without
the line would be a different face. An SVG stroke is centred on its
path and cannot be offset to one side, so it is stroked at the full
width it would need reaching both ways and a clipPath throws the outer
half away; the chroma stroke over it covers the inner reach, leaving
the same band the live renderer fills. Both twins changed, fixture
regenerated.

"Surprise me" derives the line from the ring it rolled rather than
rolling one of its own. Not only because the two only look right in
proportion — a draw taken there would shift every number after it and
re-roll the face of every agent that has a seed and no portrait yet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@AllTerrainDeveloper
AllTerrainDeveloper merged commit bd976c3 into trunk Sep 4, 2026
5 checks passed
@AllTerrainDeveloper
AllTerrainDeveloper deleted the mio/inner-line branch September 4, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant