Mio: the inner line the artwork always had - #761
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
The pass
A sixth pass,
liner, betweensheenandcore, with two keys to drive it:linerWidth— px,0draws 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
outlineWidthkeeps 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:
outlineWidth3→4,linerWidth2.It meets the ring exactly. The band's outer boundary is computed as
corecomputes 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.tsasserts that pairing directly, control points included.Like
coreit 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 whylinerWidthstops at half of whatoutlineWidthallows. 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.tswhitelist, and the PHP twins inincludes/mio.php(defaults, whitelist, limits, colour clamp).clipPaththrows 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,clipPathadded to both tag allowlists.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 newthe inner lineblock driving a whole frame throughdrawMiowith a recorder behind every layer: one flat colour, the bit-identical seam withcore, that thickening it leaves the core's geometry untouched, and that0draws nothing.mio-brand-fidelity.test.ts— the line is the third named palette colour, and it is really there.Green:
typecheck,lint(0 errors),test:js(5862),lint:php(0 errors),test:php(2925),build.🤖 Generated with Claude Code