feat(tui): the raster whisper-figure, ring starfield, sampled palette [spec 10] - #114
Open
wine-fall wants to merge 2 commits into
Open
feat(tui): the raster whisper-figure, ring starfield, sampled palette [spec 10]#114wine-fall wants to merge 2 commits into
wine-fall wants to merge 2 commits into
Conversation
Third section-6.1 by-eye round, driven by "match the concept's fineness": - The whisper-figure is machine-derived now: the designer's own figure extracted at its true 2px mesh by proper-pixel-art into a 42x44 two-tone .pix grid (cream fill, warm outline, embers as overlays). - On kitty-graphics terminals (Ghostty/kitty) the figure renders as a runtime-encoded PNG placed over the sky — integer nearest-neighbour scale from the tty's real cell pixel size, pose frames streamed under one image id, doze fading toward the ground. figurePen decides; MURMUR_TUI_FIGURE=image|sprite overrides; character terminals and the narrow band keep the text-sprite path. - The starfield is concentric ripple rings off the wave's circle — quasi-regular arc spacing, jitter, gap-broken, near-dark — plus a thin free scatter; only warm accents may be 2x2. - The palette is sampled from the mockup: warm QUIET greys (the old blue COOL is gone, name and value), peach EMBER, sage user ink, periwinkle for the listener's channel (input + note), #090e17 ground. - A near-covered two-ink cell keeps both colors (glyph + background) in the octant fold, so the two-tone figure stops muddying at edges. - The wide composition centers past 184 columns with symmetric margins. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pec 10] Three genuine codex findings: the 42x44 asset made the narrow band eat a 24-row terminal (the band now draws a 2x2-folded half-scale pet, sparkle surviving the fold); the wide composition dropped the persona (it rides the identity footer now); and the now-playing split truncated labels with a second dash (one split at the first separator, the rest kept whole). Co-Authored-By: Claude Fable 5 <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.
Implements specs/spec10/10-tui.md (section 6.1 as-built terms updated in the same change).
What this is
The third by-eye round of the quiet-constellation skin, driven by one demand: match the concept mockup's fineness. Three moves:
proper-pixel-arttool into a 42x44 two-tone.pixgrid (cream fill inside a warm outline; the drifting embers lifted into pose overlay frames). On kitty-graphics terminals (Ghostty/kitty,figurePen,MURMUR_TUI_FIGURE=image|spriteoverride) the client encodes that grid into a PNG at runtime — integer nearest-neighbour scale chosen from the tty's real cell pixel size (TIOCGWINSZvia guardedbun:ffi) — and places it over the sky with the kitty graphics protocol; pose frames stream under one image id, doze fades the inks toward the ground, cleanup deletes placements. Character terminals and the narrow band keep the text-sprite path.QUIETreplaces the blueCOOL, name and value),EMBERwent peach, the listener's own words are sage, and the listener's channel (input line + now-playing note) is periwinkle — the room's one cold ink. Ground is#090e17.Plus: the octant fold keeps BOTH inks of a near-covered two-color cell (majority on the glyph, the other behind it), which un-muddied the two-tone figure's edges; and the wide composition centers past 184 columns with symmetric margins.
Verification
Peer review
Peer review (codex gpt-5.5 xhigh): 3 findings, 3 applied, 0 dismissed — all genuine (narrow-band overflow from the 44-row asset, persona dropped from the wide composition, now-playing truncation on multi-dash labels), each fixed with a regression test in
fix(tui): review fixes. The first review run aborted on a network failure; the recorded result is the completed second run.AI coding brief
Original request. A major TUI restyle to the
04-quiet-constellationconcept, iterated by-eye against the mockup: the user rejected successive rounds as too coarse (figure outline, hand, star scatter, colors) until the terminal-cell ceiling was named, then directed a search for open-source pixel-art tooling and approved the raster-figure direction.Manual interventions. The user re-anchored the work repeatedly with screenshots of what they saw; rejected hand-transcribed sprites three times, which forced the root-cause finding (a 17px grid cannot hold a 26px design, and character cells cannot hold the design's 0.3-cell pixels at all); proposed embedding a vector/image themselves, which became the kitty-graphics path; and demanded the palette be extracted from the mockup rather than eyeballed.
Retro. Should have measured the design's pixel pitch against the terminal's character geometry in round one — five rounds of tuning character art chased a physically impossible target. The honest screenshot pipeline (real client + pty capture + byte replay) was the turning point every time: it caught a collapsed strip box, proved the figure's coarseness was the fold not the sprite, and let the user judge real frames instead of mockups. Build that pipeline first for any visual work.
🤖 Generated with Claude Code