Brief descriptions of user experience changes, newest first.
-
Fewer checkerboard flashes on old Intel MacBooks: Enabled the X driver's TearFree so every screen update is a full-frame flip, which stops the panel from briefly scanning out a half-updated frame during navigation, modals, and the power screen. Complements the existing PSR/FBC kernel fix; both target the display engine, not per-screen styling.
-
Audio "checking..." now actually resolves on silent-codec MacBooks: The prior fix covered the unkillable-probe hang but missed the known-silent path: a CS8409 Mac with no USB audio fails the first probe, vetoes retries, and the warmup loop breaks early, which skipped setting the audio result and stranded the Support screen on "Audio: checking..." forever. The result is now assigned unconditionally, so these Macs settle on "not working" and prompt for a USB speaker.
-
Audio no longer gets stuck on "checking..." on T1/T2 MacBooks: A wedged CS8409 codec could leave the probe unkillable, so audio status never resolved and the Support screen read "Audio: checking..." forever. The probe is now abandoned at its deadline and status always settles, so these Macs report "not working" and prompt for a USB speaker instead of hanging in limbo.
-
Install time estimate stops overpromising, and the bar stops shifting: The "time left" estimate used to assume time tracks the bar percentage, so it could say "1 minute left" and then grind for several more minutes on a slow disk (the verify and boot-setup tail is a thin slice of the bar but a big slice of time). It now reads the real time shape of each phase and calibrates to how long this computer has actually taken, floored by the measured disk speed, and rounds up, so it errs toward over-estimating rather than promising too soon. Estimate text also drops its trailing periods ("About 3 minutes left", "Almost done", "This usually takes 10 to 15 minutes"), and the percentage is fixed-width so the centered bar no longer nudges sideways as the number grows from 1 to 2 to 3 digits.
-
Install progress bar no longer looks frozen: During install the bar used to sit at 12% for the whole disk write, then again at the verify and boot-setup steps, looking hung. Three causes are fixed:
pvis now installed so the write shows real byte-level progress (10 to 70%), the disk verify read-back now reports progress too (72 to 85%), and the boot-setup stage markers (which never matched the log text) are corrected and fleshed out so every late step advances the bar. For the short steps with no measurable progress, a creep timer fills the gap smoothly, paced to how fast the write actually ran on this computer, so a slow disk creeps slowly and a fast one creeps quickly. The bar never reaches a step's ceiling until the real step finishes. -
Inaudible Mac codecs now say "plug in a USB speaker" instead of "Audio: working": On some MacBook Pros the CS8409 codec initializes cleanly but drives no speakers, so the mixer probe wrongly reported audio as working. Audio now checks the codec name: when a known-silent codec is the only output and no USB adapter is present, it reports not-working and points the parent to a USB speaker. Plugging one in clears it without a restart.
-
Parent Menu version moves into the border: The version line (e.g. "Version 1.0", "Dev build: abc1234") now renders centered in the modal's bottom border instead of as a separate footer line, reclaiming two rows (the version line and the blank margin above it) inside the dialog.
-
Volume Lock modal wording, less confusing: The first option now reads "No Lock" instead of "Off" so it isn't mistaken for "sound off", and the description now reads "Pin the volume at one level. The volume keys won't change it until you remove the lock." instead of the previous wording that overloaded "off" for both the volume keys and the lock state.
-
Volume keys flash the lock state instead of doing nothing: When Volume Lock or Silent Mode is on, pressing the volume up/down/mute media keys now briefly shows the locked bars with "Locked" (or empty bars with "Silent") in the corner notification, so a kid pressing the keys gets feedback that the keys aren't broken — they're locked. The level still doesn't change.
-
Room switcher shows "Locked" when volume is locked: With a Volume Lock on, the room picker's Volume slot now reads "Locked" with a volume icon matching the locked level, instead of the misleading "No Sound" (which still appears only when audio actually isn't working). Silent Mode keeps its "Silent" label.
-
Volume Lock shows bars, space tests the level: The Volume Lock picker now lists each option as a 10-cell bar (e.g.
██████░░░░) instead of a percentage, with "Off" still labeled. Pressing Space plays a short glockenspiel note at the selected level so a parent can hear how loud the lock will be before confirming. Cancelling restores the original speaker level. The parent menu line also reads "Volume Lock: ██████░░░░" instead of "Volume Lock: 60%". -
Footer arrow hints: every room now shows an arrow-key hint at the bottom right, not just Art. Music gets
[←][→]"Arrows change key" and Play gets stacked[↑]/[↓]"Arrows scroll". Art keeps its existing inverted-T "Arrows move". -
Play room: typing a digit run flush against a letter run (or vice versa) now gets an automatic space at submit time, so
5x5 ducksis heard as "5 times 5 ducks equals 25 ducks" again (was just "5 times 5 ducks", no result spoken),5+5dinos!says "dinos" cleanly instead of espeak fusing it into "deenos", andsay5+5triggers speech the same assay 5+5. The "Ask →" history line shows the spaced form (e.g.5 x 5 ducks), which also matches the multiplication rendered just below it. -
Play hints: rotating "Try:" hints now sprinkle
sayand trailing!into almost every example (14 of 15 lines), so kids stumble onto speech without needing to land on the one or two hints that used to mention it. Two hints (say 4 + 3 cats,say 5 x 5 ducks) let kids discover that the spoken answer includes the computed result, "4 plus 3 cats equals 7 cats", "5 times 5 ducks equals 25 ducks", by hearing it themselves rather than being told. -
Art code: any permutation of color, distance, and direction now works in one line.
green 10 down,10 green down,down green 10, andgreen down 10all draw 10 green squares going down (previously the first two painted the letters1 0 d o w nas colored characters). Multi-motion lines bind each color and number to its nearest motion verb, sored down 5 blue right 5draws down in red and right in blue instead of painting both blue. Side effect:down 5 up 5now actually moves down 5 then up 5 (was: wrote "up 5" as text after the down move). A line with no motion verb still falls through to the existing leading-color peel and paint-as-text behavior. -
Word matching: typing a word now prefers an exact match over a fuzzy guess everywhere.
whitemakes a white swatch (was the ✍️ emoji),coppermakes copper (was 🚁), and real words liketree,school,applekeep their emoji in Play and paint as letters in Art (were silently coerced into lookalike colors like green/brown). Misspelled colors still autocorrect (yelow→ yellow), andorange/rosestill mix as colors in expressions while showing as fruit/flower on their own. Loose typo-guessing is now limited to the explicitcolor Xcommand, so it can never silently swap a word you meant to paint. -
Code mode: pressing any arrow key now briefly pulses the "Hold Space: close code" border hint (a few gentle flashes, then settles), nudging a kid who is reaching for a way out toward the real exit.
-
Music room: the "Letters" mode label now reads "Say Letters" in the top bar and notifications, and the Tab hint reads "Tab to say letters" / "Tab to stop saying letters" so it's clear what the mode does.
-
Play: division and subtraction now count a noun the same way multiplication does, e.g.
6/2 dogsand5 - 2 dogsshow 3 dogs, and6/2 red dogsshows 3 red dogs.+still combines groups (2 + 3 dogsshows the two groups summing to 5). -
Play: count plus color plus noun now works everywhere, e.g.
2 red dogsand3 + 2 bright red dogsrender colored dogs instead of stray letter blocks and swatches. The count binds to the noun and the color tints it, and in2 + 3 dark red dogsthe color carries to all 5 dogs (a different emoji stops the carry, sored dog catleaves the cat untinted). -
Play:
*and/now auto-space to×and÷as you type (matching the existing+and-behavior), so5*3becomes5 × 3instead of5×3. -
Color + noun multiplication: "red dino x 5" (also "red 5 x dinos", "red dino × 5") now produces 5 red dinos instead of treating "x" as a literal label.
-
Hold thresholds: bumped Space-hold (code panel) and Enter-hold (loop mode) from 0.5s to 0.8s so kids leaning on Enter to switch instruments or Space between notes don't accidentally fall into a power feature. Intentional holds still feel responsive.
-
Art room: typing past the right edge now wraps to the next row (was: stopped at edge — kids got stuck in the corner). Pressing ↓ or ↑ right after a stamp returns to the stamp column, so
a, ↓, a, ↓, amakes a vertical line instead of a diagonal. Enter is now an alias for ↓ so the big labeled key gets the same smart-snap. Holding an arrow past ~8 repeats accelerates the cursor to 4 cells per repeat (smooth, can stop anywhere) instead of teleporting. Holding backspace also accelerates to 4 cells per repeat — the previous "hold 1s clears the whole canvas" behavior is gone, since kids were accidentally nuking their drawings. Parents can still clear via the parent menu. -
Music room: replaced Xylophone with Accordion (sustained two-reed synth with gentle bellows tremolo — distinct timbre family from Marimba/Ukulele/Music Box, and less stiff than the organ pass). Boosted Marimba's 4× bar partial so it sounds woody instead of thumpy. Low-octave samples now normalize hotter and push more energy into upper partials (mid range, ear-sensitive band) so the bottom row no longer feels quiet next to the top row.
-
Music room: holding a key plays one note (piano semantics) instead of repeating at the OS key-repeat rate. Tapping fast still overlaps notes. In letters mode the instrument is ducked under the spoken letter clip so the letter is foreground. Marimba retuned (dropped sub-octave rumble that smeared pitch); xylophone and music-box high partials gated below Nyquist so top-octave samples stop aliasing; percussion peak-normalized to match instrument loudness.
-
Install: optional name prompt before confirmation (e.g. "Mia's Computer", capped 24 chars), shown afterward in the title bar in place of "Installed". Progress bar now moves smoothly during the long write phase (pv-driven %) instead of jumping 12 → 82, and the "10-15 minutes" hint is replaced by a rolling ETA based on actual elapsed time.
-
Parent menu: Added "Allow Music Looping" toggle (mirrors "Allow Code Panel"). When off, hold-Enter no longer starts recording and the "Hold Enter: record a loop" hint disappears from the music room border.
-
Music room: Space tap toggles note labels on/off; loop control moved off Space to hold-Enter (linear advance: idle → recording → looping → stop). Tap Enter still cycles instruments; hold Space still opens code panel. Tab/Esc/any arrow exits a loop early. Recording auto-cancels if no notes are pressed within 2s. 3yo can mash freely without falling into loop mode.
-
Music room: Left/Right arrows cycle through 5 friendly keys (C, D, F, G, A) with an animated horizontal "slide" — note labels appear and swap as a wave passes across the grid, home-note tint stripe slides to the new column. Diatonic only, so every cell still sounds in-scale (3yo-mash safe). Header shows current key. Up/Down intentionally unbound — the 3 grid rows already give bass/mid/treble.
-
Global key remap:
/now produces÷and*now produces×everywhere (joining the existing=→+remap), so kids see math symbols directly on their keys. -
Audio diagnostics: when audio fails, the message now tells parents to plug in a USB speaker or USB audio adapter and notes that sound should start within a few seconds, so they know a reboot isn't needed.
-
Art/Music: mode indicators now centered in the top bar with a dim "↹ Tab to switch" hint to the right, so Tab no longer reads as a third mode.
-
Art: bottom hint is now mode-aware: "Type to paint! Every letter is a color, mix them together. Arrow keys move." in paint mode, "Type to write! Arrow keys move. Enter for a new line." in write mode.
-
Play: division by zero now shows 🤷 instead of silently echoing the expression.
-
Play: rounded results prefix with ≈ (e.g. 321111/321120 → ≈ 1) so near-integers aren't mistaken for exact answers.
-
Play: leading zeros in numbers are stripped (01 → 1) so expressions like
321132 / 01evaluate instead of being treated as text. -
Boot speed: removed 1s sleep in xinitrc (xinit already guarantees X readiness), faster font size polling (20ms intervals instead of fixed 300ms sleep), deferred display brightness probe to after first frame. Total savings ~1.2-1.5s.
-
Parent menu: new "Support info" item shows Purple version, device summary, and audio status, with scrollable Device info and Audio info sub-screens for diagnostics. When audio is detected as broken at boot, the entry label gains "(audio not working)" and the live-boot splash adds a matching one-line warning.
-
Littles mode: long-hold Escape now shows a dedicated "Exit Littles Mode?" screen instead of silently exiting and opening the parent menu. Options: Yes exit, No go back (default), Parent Menu.
-
On charger with lid open, computer now shuts down after 60 minutes idle instead of staying on forever. Battery (10 min) and lid-closed (10 min) timers unchanged.
-
Title bar shows boot mode on the left: "USB" (blinks while caching, then "USB · ⏏ Remove OK" when safe) or "Installed" with disk icon.
-
Hold backslash (
\) for 3 seconds to open parent menu. Alternative to Escape long-hold for keyboards where Escape is unreliable. -
Install failure screen now shows the specific error and "Press Enter for technical details" to view the last 10 log lines (photographable for support).
-
Post-install reboot: after install completes, Textual exits and a plain-text screen shows "All done! You can remove the USB drive now. Press Enter to restart." Runs from a static binary on tmpfs so it works even after USB removal.
-
Parent menu and terminal mode now show whether Purple Computer is running from USB or installed on the computer.
-
Art room: movement commands accept trailing color ("down 5 blue", "go 10 red"). Color-then-number draws forward ("blue 5" = 5 blue squares). Direction + text writes/paints in that direction ("left hello" writes "hello" going left). Turn/spin accept a distance ("turn 5" = spin then go 5, "turn left 10" = face left then go 10). Removed numeric angle support (90/180/270) from turn.
-
Play room repeat is now inline-only ("repeat 3 dog, cat"), matching music/art rooms. Removed multi-line block syntax (repeat/end).
-
Sleep screen status messages shortened and use emojis (lid, battery, USB).
-
Boot: eliminated GRUB error message and gray screen flash. Boot goes straight from black to purple "Starting up..." screen with no intermediate states.
-
Sleep screen: stays visible when lid is reopened (press any key to wake, same as idle sleep). Shows dynamic power status: how long lid was closed, charger state, auto-shutdown timing, and USB context on live boot. Helps parents understand power behavior at a glance.
-
Install confirmation modal: "Yes, install" / "No, go back" bordered buttons matching Clear Rooms modal pattern, with up/down navigation.
-
All rooms: centralized typo tolerance. Emoji/color lookups auto-correct typos ("dinno" shows dinosaur, "purpel" shows purple). Play room: "sya" triggers speech, "repet 3" starts repeat, "3 timess cat" works. Music room: "chooze xylaphone" switches instrument. Corrections shown in recall hint.
-
Art code REPL: "turn left/right" is now absolute (matches parent intuition). "spin"/"rotate" for relative 90° CW. "face" for explicit absolute. "back N" moves opposite heading. Bare color names ("blue", "dark red") switch colors. "paint hello"/"write hello" for inline text. Fuzzy matching on typos ("forwrd" runs forward, "bleu" switches to blue) with correction hints. Unrecognized text does nothing instead of painting individual letters.
-
ESC picker shows full-width "Open Code"/"Close Code" in Music/Art when code panel is allowed.
-
Parent menu: "Code Panel: On/Off" renamed to "Allow Code Panel: Yes/No". Disabling fully closes the code panel and removes subtitle. Re-enabling in Music/Art immediately shows "hold space" subtitle.
-
"Hold space" subtitle only appears when code panel is allowed.
-
Power button shutdown is now near-instant (was ~10 seconds waiting for services to stop).
-
Installer powers off after completion instead of rebooting (no more hanging on "press Enter to restart").
-
Art room: "color red", "color blue", etc. sets brush color by name. "color t" sets by key mapping.
-
Art room: "lift" toggles pen up/down. "pen up"/"penup" and "pen down"/"pendown" for explicit control.
-
Art room: color autocomplete shows named colors after typing "color " in REPL.
-
Art room: brush color persists across paint commands (typing "t" then "forward 5" paints in t's color).
-
Code panel: viewport no longer shifts up by 1 row when opening (viewport growth now matches freed indicator space).
-
All rooms: commands on a single line (e.g. "turn right turn right") are now split and executed individually; one failing command no longer breaks the rest.
-
Art room: cursor stops at canvas edges instead of wrapping to the other side (typing, painting, and code mode).
-
Art room: paint mode in code follows heading direction (turn down, then paint chars go downward).
-
Art room: new turn commands: turn up/down/back/backward/around and turn 90/180/270/360.
-
Art room: forward synonyms: go, move, walk, step (e.g. "go 5" = "forward 5").
-
Art room: hint text changed from "Hold Space + arrows to paint" to "Type to paint."
-
Art room: paint/write selector stays visible when code panel is open.
-
Art room: holding space to open code panel no longer types spaces in write mode.
-
Art room: write mode works when code panel is open (text goes to canvas, not code input).
-
Code panel: canvas no longer changes size when panel opens/closes (pinned height).
-
Code panel: breathing room added above code input row.
-
Code panel: escape no longer closes the panel (clears input only). Type "exit" or hold Space to close.
-
Code panel mode persists across room switches. Switching rooms auto-opens panel in Music/Art. Play shows compact indicator (already a REPL). Mode ends on explicit close only.
-
Code panel: room picker (Esc tap) shows "Close Code" option as a third row when code panel is open. Space key is a shortcut to close from the picker.
-
Code panel: compact 1-row room indicator shown instead of hiding indicator entirely.
-
Space-hold REPL toggle: typing another key while space is held now flushes the space immediately, fixing character ordering when typing fast (e.g. "left 10" no longer becomes "left1 0").
-
Art code panel: heading arrow integrates into existing cursors. Paint mode: arrow replaces one edge of the 3x3 ring. Write mode: arrow appears one cell away in the heading direction. Arrows always visible in code mode (default: right). Bare direction commands (e.g. "down 5") implicitly turn to face that direction before moving.
-
Music code panel: "choose instrument" now updates the instrument name in the header.
-
Parent menu: "Code Panel: On/Off" toggle controls whether space-hold opens the code panel in music/art rooms. Littles mode always disables it.
-
Littles Mode: added "No-Screen Music" option. Screen stays dark with minimal text, keys still play sounds. For kids who should focus on the sounds, not the screen.
-
"Try" hints now cycle on Enter instead of Tab. Removed "Tab: more hints" text.
-
REPL code panel: removed letters on/off, paint on/off, write on/off keywords (now controlled via Tab).
-
REPL panel (music/art) now uses the same input widgets as Play room: "Code \u2192" prompt, keyword underlining, tab completion, recall hint (Enter to try again), and cycling Try hints. Tab completes keywords or falls through to mode switch (music/letters, paint/write). Single-line repeat syntax:
repeat 3 forward 10, turn right. -
Removed Code Space (multi-line editor with font switching). Play room now supports
repeat N/endblocks directly in the prompt. Music and Art rooms get a REPL overlay panel (hold Space ~0.5s to toggle). Enter runs each command live. No font changes. -
All rooms reset to defaults when leaving or clearing: music resets instrument to piano and letters mode off, art resets to paint mode with default color.
-
Code space: title bar hidden (slightly larger font), room headers no longer show "letters off"/"paint on"/"write on" labels (were confusing in code context).
-
Closing code space (via menu X or room switcher) now stops any currently running code, matching Esc behavior.
-
Title bar rebuilt as single render_line widget: room title always centered, indicators always right-aligned to viewport border. Consistent positioning in both normal and code mode. Code panel uses bright purple border, hints panel has light background with "Code to try:" in gutter. "Press Tab for Menu" and "Space: Run" use orange background for visibility. No divider between code editor and hints (gutters touch).
-
Esc now stops demo playback in any room and opens the room switcher. Music room loop hint changed from "Space+Space: stop" to "Esc: stop" (both still work). Looping state now shows red "Looping and recording // Play on top" instead of green "Looping!".
-
Music room code runner: key colors now cycle properly (purple, blue, red, off) instead of all staying blue.
-
Shutdown confirm screen now auto-dismisses after 3 seconds with a visible countdown. Power button must be tapped twice within that window to shut down.
-
Volume steps redistributed for more even perceived loudness: 0/15/35/60/85/100 instead of 0/25/50/75/100. Labels: Sound Off, Whisper, Quiet, Medium, Loud, Full.
-
Color legend no longer shifts the viewport off-center; it floats to the right of the border independently.
-
Pressing brightness media keys now shows a toast: "Go to the Parent Menu to change brightness" (shown once, not repeated while visible).
-
Power management overhaul: simplified from 3 states (sleep face, screen off, shutdown) to 2 states (sleep face, shutdown). Removed DPMS screen-off. Timers now adapt to charger: on charger with lid open, 5 min to sleep face, no auto-shutdown. On battery, 2 min to sleep face, 10 min to shutdown. Lid close shows sleep face immediately and shuts down after 10 min (was 30 sec). Lid reopen resets all timers.
-
Live boot awareness: splash screen on first USB boot explains Purple will need the USB again after shutdown. Sleep face and parent menu also show USB reminders during live boot.
-
Music Room: looping hint now says "Play on top, keep recording!" so kids know it's still recording. Hint text responds to caps/double-shift changes immediately (was only updating on room switch).
-
Music Room loop layers now preserve their instrument: previously recorded layers play back with the instrument they were recorded with, not the currently selected one.
-
Parent menu: "Install on this computer" is grayed out with "(re-insert USB)" when the USB drive has been removed. Updates live if USB is re-inserted while menu is open.
-
Boot now waits for the GPU display to be ready before starting, fixing black screen on older hardware (MacBook 2014, some ThinkPads). Removed forced DPCD backlight parameter that could turn off the screen on unsupported panels.
-
Live USB safe-to-remove indicator: when booted from USB, a blinking USB icon appears in the title bar while the system caches to RAM. Once done, it changes to a green eject symbol meaning the USB can be safely removed.
-
Littles Mode music: space bar no longer triggers the loop station. Loop hints are hidden. Kids just press keys to play sounds.
-
Art Code Space hints: replaced individual direction commands with a square-drawing example using repeat/turn/forward. Removed tilde (~) as shortcut for repeat template (backtick still works).
-
Code Space tab menu: "Tab: Menu" changed to "Press Tab for Menu" with higher contrast color when inactive, so users can discover how to open the menu.
-
Modal hint text: standardized format across all modals (consistent arrow symbols, "Esc cancel" everywhere escape works, no "to" filler words, uniform spacing). Fixes "Esc to cancel" wrapping onto two lines in Code Space and Littles Mode dialogs.
-
Littles Mode: parent menu option to lock the app into a single activity (Music or Art) for young kids. Disables room switching, Tab, Code Space, and the room picker. Long-press Escape still opens the parent menu.
-
Code Space toggle: parent menu option to enable/disable Code Space entirely. When off, Code Space is hidden from the room picker and can't be activated.
-
Clear Rooms confirmation: fixed dialog max-height so the "No, go back" button and Escape hint are no longer clipped off-screen. Added Escape hint.
-
Play mode "Tab: more hints" text now replaced with equal-width spaces instead of hidden when autocomplete is active, preventing hint text from shifting due to center alignment.
-
Power button tap now shows "Press power button again to shut down" confirmation screen. Any other key cancels back to normal. Idle sleep screen unchanged.
-
Debug ISO: every build now produces a
.debug.isoalongside the normal ISO. Debug ISO shows GRUB menu, kernel messages, systemd startup, X11 errors on screen, and drops to a debug shell if Purple crashes. -
Music Code Space: added "letters on" / "letters off" commands to toggle letter sounds mid-code, matching art mode's "paint on" / "write on" pattern. Header shows current letters state in code mode.
-
Code Space: Tab+Enter now runs code (same as Tab+Space). Menu label changed from "x: close" to "x: exit code" to clarify it exits the entire code space.
-
Code Space tab menu is now an inline bar in the bottom gutter instead of a modal popup. Shows "tab space: run · c: clear · x: close" dimmed when inactive, lights up when Tab is pressed (sticky tab).
-
Play mode "Try" hints auto-cycle every 60 seconds and on room switch. Tab also cycles them when no autocomplete is active. "Tab: more hints" shown when Tab is available for cycling.
-
Code Space editor bottom border shows "Shift Space: run Tab: menu" hint text.
-
Code Space toggle in Esc switcher now shows "Press Space or Enter" when selected, matching other buttons.
-
Volume adjustment no longer freezes: removed per-step mixer reinit and made amixer call non-blocking.
-
Display settings (brightness/contrast) no longer freeze: made xrandr calls non-blocking and cached display outputs.
-
Music room header: when code space is open, shows just the instrument name (hides "Tab" and "Letters" toggle since letters aren't programmable from code mode).
-
Art room header: when code space is open, shows "paint on" / "write on" labels instead of "Tab".
-
Art room cursor: when code space is open, cursor is a gold ☺ smiley instead of the 3x3 paint ring. Doesn't blink unless there's text underneath (blinks to reveal the text).
-
Code space tab menu: added "Clear (C)" option to clear the code buffer. Close shortcut changed from C to X.
-
Volume modal: Tab key now dismisses the modal (previously got stuck).
-
Room switching no longer flickers: room content swaps under the picker overlay before it dismisses, so you never see the old room flash.
-
Room picker redesigned: Code Space toggle is now a wide button spanning the full width of the 3 rooms with a toggle indicator (● on / ○ off). Volume and Clear Rooms (renamed from Start Fresh) are side by side below at 50% width each. Clear Rooms shortcut changed from Enter to C. "Extras" label added above the non-room options. Bottom hint simplified to "Arrow keys to move, Enter to pick" (removed "Space: Code Space" and separate arrow labels). Confirmation dialog updated to say "Yes, clear rooms."
-
Code mode: removed 2 wasted rows below the compact indicator by removing margin and adjusting font ratio from 0.667 to 0.69, allowing a slightly larger font in code split mode.
-
Code space: scrollbar appears in right gutter when content overflows the visible area. Scrollbar is visual only, arrow keys control scrolling.
-
Code space: 1-cell gutter padding around text editor and hints panel so text isn't against the border. Keywords (repeat, end, choose, fast, slow, etc.) are underlined in the editor across all rooms. Music hints corrected to show real instruments (marimba, xylophone, ukulele, musicbox). Instrument names autocomplete after "choose" or "instrument". Fast/slow tempo difference widened (fast: 40ms, slow: 600ms, was 80ms/400ms).
-
Volume knob now reinitializes the audio system when adjusted, recovering from stale audio connections (fixes sound randomly stopping in VMs).
-
Room picker redesigned: Code Space, Volume, and Start Fresh are now 3 equal boxes in a row (same size as room boxes) with icons (robot for code, volume icon, broom for clear). Code Space toggle shows robot icon. Start Fresh confirmation dialog uses up/down navigation (consistent with brightness adjust) and is properly sized. Sticky shift banner replaced with a small shift icon (⇧) near the caps lock indicator in the title bar. Code editor is now 2/3 width with an adjacent 1/3 hints panel showing room-specific code examples. Room hints ("Try pressing letters...") hidden when code space is open. Play room input stays visible when code space opens but cursor blink is disabled.
-
Code Space improvements: Art mode autocomplete for paint/write/left/right/up/down commands. Music mode autocomplete for choose/instrument/fast/slow. Art mode defaults to paint on, unrecognized text paints characters on canvas. Music code supports "fast" and "slow" line prefixes for tempo control. Play mode code results aggregated into single block with compact display (no "= N emoji" labels). Code header changed from "Ask → Your code says:" to "Your code says...". COLOR_RESULT tokens in code output now render as color swatches. Art canvas clears before code runs, music colors reset before code runs. Play room scrolls to bottom when closing code space. Removed art mode "Keep drawing / New drawing" confirmation dialog when switching rooms. Added "Start Fresh" option in room picker (with "Are you sure?" confirmation) to clear all rooms and code buffers at once.
-
Music room loop station: replaced invisible space-replay with a loop pedal. Space starts recording (progress bar + countdown), Space again starts looping with a cycling position indicator. Notes played on top are automatically added to the loop (no explicit merge step). Space or Escape stops. 20s max recording with auto-loop when full. Hint bar shows state-specific instructions.
-
Code Space polish: restored 3-row room indicator as default (compact 1-row only when code space open). Removed line numbers and tildes from code editor for kid-friendliness. Added inline autocomplete ghost text near cursor. Viewport border dims when code space open, bright purple border on code editor. Room picker hint now shows "Space: Code Space". Volume modal supports left/right arrows.
-
Code Space overhaul: replaced block-based code panel with per-room text editor. Kids type code and run it with Shift+Space. Each room has its own buffer that persists across room switches. Room picker redesigned with 3 rows: rooms, code space toggle, and volume button. Removed Code room, watch-me recording, pane switching, and shift+space/shift+enter shortcuts.
-
Code panel: removed diagonal zoom effect during open transition. Changed color scheme from blue/navy to dark purple (space theme). Code is now a proper button in the room picker (press 4 or C) instead of a dashed text option. Added focus indicators: focused panel gets a purple border, unfocused panel is dimmed. Code panel auto-focuses when opened.
-
Shift actions: sticky shift timeout increased to 8s with a full-width yellow banner showing contextual hints (e.g. "Letter: UPPERCASE", "Space: play", "Enter: switch pane"). Shift+Space replays code panel, Shift+Enter toggles focus between viewport and code panel. Escape picker shows a pane row (Main/Code) when code panel is open, with up/down to switch between pane and room rows.
-
Autocomplete suggestions ranked by kid-likelihood (e.g. "tr" suggests tree before triangle) instead of alphabetically. Rankings defined in rankings.txt, unified across emojis and colors.
-
Expanded profanity filter with 17 new words. Filtered speech now shows a muted speaker icon (🔇) that fades after 1.5 seconds instead of showing "··" forever.
-
Inline code panel: press C in room picker to toggle a live code trail below the viewport. Blocks appear as you play music, draw in art, or evaluate expressions. Arrow down to edit, backspace to delete, space to replay. Font shrinks to 2/3 with a zoom-perspective curtain transition. Each room has its own panel content. Room picker now shows 3 rooms (Play, Music, Art) with Code as a separate dimmer option below a divider. Held keys produce only one block in music. Escape in panel returns to room (doesn't open picker). Character keys in music/art exit panel focus and pass to room. Switching rooms closes the panel. Panel scrolls with up/down arrows when focused, showing scroll indicators. Art panel has a Logo-like guided flow (Move/Paint, direction, distance) that executes turtle commands on the canvas. Play panel has an expression input with
itvariable for accumulating results. -
Viewport widened from 112 to 134 columns, using more horizontal screen space on all displays. Font size calculation now fills both dimensions evenly instead of leaving wide black bars on the sides.
-
Volume keys now control actual system volume (via ALSA). Previously they only showed a visual toast. Sounds are also louder overall: instrument synthesis uses 90% peak level (was 50%) and per-sound volume caps removed.
-
Installer: post-install reboot now uses a 30-second countdown instead of waiting for Enter (which was unreliable across hardware). Confirmation input loop simplified from dd/od pipeline to bash read.
-
Sleep screen: removed countdown timers and lid-closed warnings (kids don't need them). Lid shutdown delay reduced from 2 minutes to 30 seconds. Idle shutdown reduced from 30 to 25 minutes, removed the separate "dim" and "shutdown warning" stages.
-
Code room: adjustment mode now dims non-active blocks and shows a solid gold frame (with ▲▼ arrows) instead of blinking. Repeat blocks use Scratch-inspired brackets that visually wrap the repeated section, with "Repeat block" (one block) and "Repeat line" (all blocks) options in the Tab menu. While adjusting a repeat, left/right arrow resizes the bracket scope and up/down changes the repeat count.
-
Play room: speech indicator shows
··while generating TTS audio, then🔊while playing, so it no longer looks frozen during synthesis. -
TTS cache: punctuation and case no longer cause cache misses (e.g. "hello!" and "Hello" now share the same cached audio).
-
Speech filter: blocked content is silenced instead of speaking a random silly word, fixing TTS cache misses on leet-speak number strings.
-
Play room: left/right arrows now move the cursor in the ask prompt. Backspace and typing work at cursor position. Tab is the only way to accept autocomplete (hint updated to show "Tab").
-
Code room: replaced invisible multi-level drill-down with visible VOICE blocks. Music and Art room lines now show a separate block for instrument/mode (e.g. "Mar" for Marimba, "Ltr" for Letters, "Pnt" for Paint). Each block is independently adjustable with Enter + up/down. Instruments captured during Watch Me and set during playback.
-
Font auto-sizing: app now measures actual terminal dimensions at startup and adjusts Alacritty font size to fit, replacing brittle DPI-based calculation. Shows "Loading..." during adjustment.
-
Power button: tapping power while on the sleep screen now shuts down (previously did nothing). Fixed power button stopping working after waking from sleep. Added safety checks so lid close shutdown can't get permanently stuck.
-
Boot: suppressed kernel driver errors, Ubuntu MOTD, and Xorg startup messages so only the purple splash screen is visible during startup.
-
Code room: MODE_SWITCH blocks are locked once content blocks follow them, preventing room changes that would make existing blocks meaningless.
-
Code room: Space and Escape now properly stop playback even when playback has switched to another room. Escape also stops playback when code room is active.
-
Watch Me mode: Escape no longer opens the room picker after ending Watch Me.
-
Code room: Play (QUERY) blocks now show full text and stretch to fit, with ellipsis if too wide. Compose text appears live in the block itself instead of only at the bottom. Room picker in Tab menu now matches the regular room order (Play, Music, Art) and supports number key selection.
-
Art room: replaced disappearing "Press Tab to switch tools" overlay with a permanent hint bar below the canvas
-
Code room: Enter now starts a new line (inserts MODE_SWITCH in adjustment mode). Menu key inserts an enter symbol. Enter symbol also available in Tab menu. Enter icon changed to nerd font symbol.
-
Code room: up/down arrows now always navigate between lines. Press Enter on adjustable blocks (mode, pause, stroke, repeat) to enter adjustment mode, then up/down changes the value. The block blinks gold while adjusting. Enter or Escape exits adjustment mode.
-
Watch Me mode: pressing Space in Music room now ends Watch Me (space = "play", so it's a natural stop gesture). In Play/Art rooms, space still types normally during Watch Me.
-
Watch Me mode: Escape now exits back to Code room (was previously swallowed). Long-hold Escape exits Watch Me and opens parent menu. Auto-ends after 15 seconds of inactivity.
-
Art room: text typed in write mode now has a transparent background matching the canvas (removed row-based tinting)
-
Removed save slot indicators from Code Room main view: saves 3 rows for the code canvas, save/load still accessible via Tab menu
-
Volume toast replaced with custom widget: no more flickering or duplicate toasts when changing volume rapidly, and toast properly hides when opening room picker or parent menu
-
Caps mode now applies to all text in Code room, Code menu, Room picker (Escape menu), and fixed "Tab" labels in Art/Play modes.
-
Room picker options are now 4-high: blank row, icon + room name + icon, "Press N", blank row. Wider boxes to fit the new layout.
-
Replaced trumpet instrument with ukulele: warm plucked-string sound that sits better on laptop speakers.
-
Unified background color: removed darker outer border, everything is now one consistent purple. Added spacing between viewport and room indicators for breathing room.
-
Room picker: each option now shows the room name and "Press N" on separate lines instead of "N RoomName"
-
Bottom bar: room badges now show icon + name (e.g., "Play", "Music"), centered, with uniform width. Names go ALL CAPS when caps lock is on.
-
Music mode: replaced Steel Drum and Kalimba instruments with Xylophone and Trumpet for more variety and familiarity
-
Art mode: toggling caps mode no longer strips background colors from typed text (row tints and paint colors now preserved)
-
Play mode: fixed continuation lines being indented 1 cell too far when colored text blocks wrap across multiple lines
-
Caps Lock key now toggles caps mode on a single press (previously required double-tap like Shift)
-
Room picker and install confirmation dialog: up/down arrows now work in addition to left/right for navigation
-
Music room: grid key labels, note names, and percussion names now respect caps mode (show uppercase when caps lock is on)
-
Power button: hold detection moved out of Textual into asyncio for reliability across hardware. Pressing power button during parent terminal shell now triggers system shutdown via logind instead of crashing.
-
Code mode (F4): renamed from "Command" to "Code" so parents immediately see the value (coding for kids) and the room lineup reads Play, Music, Art, Code
-
Code mode: "Watch me!" replaces F5 recording. Empty canvas shows "Watch me!" prompt, Enter opens room picker, kid plays in chosen room, F4 returns with captured blocks. Also available via Tab menu. F5 key removed entirely.
-
"Adjust Display" menu item hidden on hardware where xrandr brightness/contrast controls don't work (e.g. Surface Laptop 2)
-
Rooms renamed: Explore is now Play, Play is now Music, Doodle is now Art
-
Music room: Space with no F5 recording replays recent key presses (last 10 seconds or since last pause)
-
Music room: F5 recording and playback can now happen simultaneously (overdub, play over yourself)
-
F5 badge added to bottom menu bar with keyboard icon
-
Recording indicator changed from generic record symbol to "Capturing keys" text with better spacing
-
All recording-related text clarified to say "key presses" (toasts, hints) to avoid confusion with voice recording
-
Boot splash: solid purple screen with "Starting up..." message during boot, using VT escape codes on tty1 (console output redirected to tty2). Replaces Plymouth, which was unreliable across hardware.
-
Music room: Enter now changes instrument in Letters mode too (previously only worked in Music mode).
-
Play room: number words (one, two, three) and comma-separated lists now work. "one, two, three dinos" shows a dino abacus. Multiplication with emojis shows grouping ("2 x 3 cats" shows 3 groups of 2 cats).
-
Play room: type "..." to continue patterns. Number sequences (5 4 3 ...), emoji pyramids (5 cats ...), ranges (2 4 6 ... 20), and growing sequences (cats ... 5) all work.
-
Play room: Enter on empty input recalls last command into the input field (instead of replaying speech). Hint below input shows "Enter to recall: ..." after first command.
-
Play room: colors now act as adjectives, modifying the next item. "red apple green banana" shows a red apple and green banana instead of mixing all colors together.
-
Music room: note/percussion labels now properly centered in cells. Added "Enter: change instrument" hint at the bottom.
-
Recording: F5 now always starts/stops recording (no more F5 playback). New recording overwrites previous. Space in Music room plays back the recording.
-
Music room: note/percussion labels now show with ♪ on either side (e.g. "♪ G ♪") near the upper-right of the cell, in a muted color to avoid confusion with the main key letter
-
Code mode (F4): renamed from "Build" to "Code" to clarify it's coding; icon changed to console; gutter icons now match room title bar icons (Nerd Font); Tab menu "Mode..." replaced with "Room..." showing 3 rooms (Music, Art, Play) with default sub-modes
-
Art: default mode changed from Write to Paint; Paint now appears on left side of Tab header
-
Code mode: MODE_SWITCH blocks now show room icon (same as title bar); non-default sub-modes show a hint suffix; cycling targets now cycles rooms instead of all 5 sub-modes
-
Code mode: direct coding UX, auto-inserts default mode on empty canvas, Up/Down inline adjusts adjustable blocks (MODE_SWITCH/PAUSE/STROKE/REPEAT), Tab menu trimmed to 7 flat items (removed Record/Adjust/Enter), context-sensitive hint bar shows what Up/Down does
-
Code mode: Scratch-inspired block redesign with 6 block types (KEY, QUERY, STROKE, PAUSE, REPEAT, MODE_SWITCH); uniform 5-char grid; explicit PAUSE blocks replace invisible timing gaps; no auto-collapse; mode-aware editing (Play uses compose mode for QUERY blocks, Art paint uses STROKE blocks); v1 save format auto-migrated to v2
-
Art: text on painted backgrounds now uses black or white for contrast (was always white/dark); grayscale paint backgrounds no longer disappear when typing over them
-
Play: narrow emoji (heart, snow, etc.) always get a padding space to prevent visual overlap in terminal
-
Play: plus expressions now show + between items (e.g. apple + banana shows 🍎 + 🍌)
-
Play: "red clue" and "red + clue" now produce the same inline format with arrow
-
Play: unknown words now render as per-letter colored blocks instead of plaintext
-
Play: auto-mix results (e.g. "red apple") now show + between items in the input display
-
Play: emoji on colored backgrounds now have spaces between them for readability
-
Play: long lines now wrap at colored block boundaries with arrow-indented continuation lines, fixing clipped padding on wrapped colored letters
-
Play: bare negative numbers (e.g. "-5") now show as colored text blocks instead of a plain "= -5" math result
-
Play: color+emoji results (e.g. "blue cat") now display inline on one line when compact enough, instead of separate lines
-
Play: replaced ▶ triangle with → arrow throughout (Ask prompt, answer lines, color swatches) for a cleaner look
-
Play: keyboard color map (4-row legend) now shows in the bottom right, same as Art paint mode. Updates active row indicator as you type.
-
Play: Tab now accepts autocomplete suggestions (in addition to right arrow). Hint shows "→ Tab".
-
Play: number digits in colored blocks now use the full grayscale gradient (1=white to 0=black) matching Art room, instead of flat gray
-
Play: when math typos are auto-corrected (e.g. "=" treated as "+"), a "→" line shows the corrected expression above the answer
-
Play: abacus now starts at 11 instead of 10; 10 shows as dots with 5+5 grouping so it's countable
-
Play: color adjectives (bright, dark, light, pale, deep, vivid, dull, muted, neon, soft, rich, warm, cool) modify colors, showing base swatch and result (e.g. "bright green", "dark light blue")
-
Play: emoji consolidated into single pack file (packs/core-emoji); added ~80 new emoji (shapes, body parts, household items, space, animal sounds); removed common-word synonyms (good/bad/great/sweet) that made text substitution weird; "love" now maps to ❤️ instead of 😍
-
Play: color swatch mixing arrow changed from → to ▶ to match the triangle used everywhere else
-
Play: default colors updated to Crayola-style values (red, blue, green) so they match what kids expect
-
Play: abacus rows now show ones at bottom and largest place value at top, matching standard abacus layout
-
Play: "green potato peanut" now shows potato emoji on green bg + "peanut" letters in green (colors + emojis + text mix together)
-
Play: both ask and answer lines use ▶ triangle, aligned. Ask is purple, answer is white. 🔊 icon appears before the triangle when TTS is active
-
Play room: autocomplete now accepted with right arrow instead of space. Space always types a space, so you can type partial words without forced completion.
-
Play room: typing a complete word (like "apple") shows its emoji/color in the hint area as confirmation, instead of the hint disappearing.
-
Play room: numbers ≤9 show plain spaced dots; 10 to ~9 billion show a colored abacus (10 colors); beyond that show colored number blocks
-
Play room: simple addition shows grouped dots (● ● ● ● ●); simple multiplication shows repeated groups (● ● ● ● ● ●)
-
Play room: colors auto-mix with emojis, other colors, and text without needing + ("red apple" → 🍎 on red, "red blue" → mixed purple, "tavi red" → mixed letter blocks)
-
Play room: + operator still works the same way but is now optional for mixing
-
Play room: only letters and numbers become colored blocks (symbols like + stay as plain text)
-
Play room: unrecognized text now shows colored blocks with letters visible on top (instead of blank colored blocks)
-
Play room: number dot visualization uses larger dots (⬤ instead of •); bare number input (e.g. "67") shows only dots without repeating the number
-
Code mode: cursor is now a blinking insertion point between blocks (like a text cursor); Enter inserts visual line breaks; backspace deletes the block before the cursor
-
Art room: gutter is now a purple checkerboard pattern instead of solid black, visually distinct but not jarring
-
Code mode: consecutive identical blocks auto-collapse into one block with "xN" count badge
-
Code mode: up/down arrows now adjust block count (when count > 1) or gap timing (when count is 1)
-
Code mode: REPEAT blocks at end of a line show repeat count in the gutter
-
Recordings auto-collapse consecutive identical actions into counted blocks
- Music room loop: single space during looping is now ignored to prevent accidental stops. Double-tap space (two presses within 2 seconds) stops the loop. Hint updated to "Space+Space: stop". Escape still stops immediately.
- Mouse cursor now hidden globally using XFixes (previously only hidden on root window, still visible inside Alacritty).
- Post-install reboot no longer hangs: uses forced reboot with sysrq fallback instead of graceful systemd shutdown.
- Room picker: removed "Extras" title. Code Space toggle now shows robots on both sides, radio-style On/Off circles on a second line, and "Turn On"/"Turn Off" hint. Volume and Clear Rooms show icons on both sides like rooms do. When code space is active, picker opens focused on the Code Space row. Fixed compact room indicator not docking to bottom of screen in code space mode (CSS specificity fix).
- Play room: "Try" hints cycle through different suggestions each time the room is opened (dinos, sharks, colors, speech, autocomplete tips). "Enter to recall" changed to "Enter to try again" for kid-friendliness.
- Removed function keys entirely: No more F1-F4 for room switching or F10-F12 for volume. Bottom bar shows room icons only (no F-key labels). Mute icon appears on right side when volume is zero. Room switching via Escape picker (tap Escape, press 1-4 or arrow left/right, Enter to confirm). Volume via up/down arrows in picker or hardware media keys. Keyboard calibration removed from parent menu and startup.
- Parent menu: Shut Down option: Added "Shut Down" to parent menu for immediate shutdown. "Exit" renamed to "Exit Parent Menu" for clarity.
- Dynamic padding in Alacritty: Enabled
dynamic_paddingso leftover pixels are distributed evenly around the cell grid, centering it with purple padding on all edges - Font sizing simplified: Replaced runtime Alacritty cell probe with hardcoded JetBrainsMono ratio; reduced fill from 80% to 75% for more headroom on small screens
- Music room: Enter cycles instruments (Marimba, Steel Drum, Kalimba, Music Box) in Music mode; header shows current instrument name
- Music room: note name flashes on keypress in Music mode, dim text appears below key letter for ~1 second then fades (e.g. "G", "F#", "kick")
- Toast notifications for mode switches: Music room Tab (Music/Letters), Music room Enter (instrument name), Art room Tab (Paint/Write), and F5 recording start/stop all show a brief toast
- Install from Parent Menu: In live boot mode, Parent Menu now shows "Install on this computer" option with a confirmation dialog; GRUB menu is hidden (boots straight to live mode); parents never need to interact with GRUB
- Art paint: hold letter then arrow paints continuously: Holding a character key and then pressing an arrow now paints that character's color while moving, same as holding arrow first then letter
- Kid-proof power button: Tap shows sleep screen (cute, not scary, any key wakes); hold 3s shows "Bye!" and shuts down (phone-like); logind set to ignore so TUI controls all power UX
- Lid close delayed shutdown: Lid close now turns screen off immediately but waits 2 minutes before shutting down (was 5 seconds); opening lid cancels shutdown; prevents accidental shutdowns when kid briefly closes lid
- Code mode: Play clears state first: Pressing Play in Code mode now clears the target mode's canvas/colors before replaying, so playback reproduces the recording from a clean slate
- Code mode: bright gutter blocks: Mode icons in the left gutter are now solid bright colored blocks instead of dim text icons
- Code mode: Up/Down navigates lines: Arrow keys now jump between lines (like a text editor) instead of adjusting timing
- Code mode: timing adjust moved to Tab menu: Gap timing, repeat count, and target cycling are now in the Tab menu under "Adjust"
- Removed F9 theme toggle: Dark mode is now always active; F9 key and theme badge removed from the function bar
- Larger UI: Font sizing now uses maximum size that fits the screen instead of 75% fill; UI is bigger on all screens. Code space font ratio derived from layout constants instead of hardcoded.
- Code Mode v2: F5 recording: F5 starts intentional cross-mode recording (replaces always-on capture); press F5 again to stop; press F5 a third time to play back; blinking ⏺ indicator in title bar while recording, ▶ while playing
- Code Mode v2: Tab menu: Tab opens a vertical menu modal in Code mode with Record, Insert, and Program sections; "Record in..." starts recording in a specific mode/sub-mode; replaces Enter code mode
- Code Mode v2: multi-line blocks: Blocks display across multiple lines with mode icons (♫ 🔤 ✎ 🖌 🔍) in a left gutter; MODE_SWITCH blocks start new lines; long sections wrap with indented continuation
- Code Mode v2: Enter inserts ↵: Enter key now inserts a ↵ control block (useful in Play and Art) instead of entering code mode
- Code Mode v2: repeat max 99: Repeat block maximum increased from 9 to 99
- Music room Space: Space now plays the last F5 recording instead of heuristic-based replay
- Code Mode (F4): Replaced turtle-graphics Code mode with cross-mode visual programming; automatically records Music and Art actions as colored blocks with timing gaps; Space plays the program back live in the real mode; up/down adjusts timing between blocks; 9 save slots (hold number to save, tap to load)
- Passwordless system: Removed default password; system auto-logs in with no password prompt, passwordless sudo for all commands
- Music room numbers speak in Letters mode: Number keys (0-9) now say their name aloud in Letters sub-mode, just like letter keys do
- Deterministic TTS: Speech synthesis now produces identical output for identical input; single letters use phonetic pronunciation (A -> "ay"); short utterances padded for prosody stability; WAV output trimmed and normalized; aggressive caching avoids re-synthesis; common words pre-generated at startup
- Music room word recognition: In Letters mode, if typed letters spell a known word (cat, dog, sun, etc.), the word is spoken aloud after replay finishes
- Music room sub-modes: Tab switches between Music (instrument sounds) and Letters (speaks letter names aloud via TTS); header indicator shows current sub-mode; sessions record which sub-mode each key was pressed in, so replay preserves the mix
- Music room replay: Press space to replay your recent key sequence with original timing; sessions auto-reset after 30 seconds of inactivity; pressing keys during replay starts a new session
- Sticky shift replaces double-tap shift: Removed double-tap character shift (caused accidental capitals). Shift key tap activates sticky shift for one character. Double-tap Shift toggles caps lock. Caps Lock key remapped to Shift. Added shift indicator (⇧) in title bar.
- Live boot default: USB now boots directly into Purple Computer with no installation needed; internal disk is untouched; "Install Purple Computer" available as GRUB menu option
- Demo: smart camera tracking: Camera now uses dominant-region detection (top vs bottom half) instead of centroid averaging, so it correctly bounces between input area and rendered results; faster response (0.5s vs 2s intervals)
- Demo: closing screen zoom: "This is Purple Computer" types zoomed in, then zooms out for "Coming soon" line
- Demo: art music-room text shifted right: "Now let's go to Music room" text shifted right by 1 cell; no zoom-out transition before Music room
- Demo: auto-pan via OpenCV: Camera automatically follows cursor activity during zoomed-in periods using frame differencing, replacing hardcoded pan coordinates
- Demo: smooth zoom transitions + camera panning: Zoom transitions now animate smoothly per-frame (smoothstep easing) instead of jumping to a midpoint crop; camera pans follow text as it flows during typing via new ZoomTarget action
- Demo: dynamic zoom: Demo scripts can now include ZoomIn/ZoomOut markers; post-processing applies smooth zoom effects for text readability
- Demo: heart segment text: Heart drawing now clears the canvas first, then after drawing adds centered text: "This is Purple Computer." and "Coming soon to your old laptop!"
- Demo: Music room intro text: After the palm tree drawing completes, text appears at bottom right: "Now let's go to Music room / Play with music and color"
- Demo: expanded play segment: Demo now showcases emoji math, color mixing, speech, and a welcome message instead of a short 3-line greeting
- Demo: art intro text: Art segment now types "This is Art room. Write and paint!" with color swatches before drawing the palm tree
- Demo: Music room glissando: Smiley face builds faster (quicker eyes/nose), then a rapid back-and-forth over the mouth creates a glissando finale
- Voice clip generation: scans composition segments: generate_voice_clips.py now extracts phrases from demo.json segments (not just default_script.py); supports --variants N to generate multiple audition copies
- Color words in free text: Typing "purple truck" now shows a purple color swatch alongside the truck emoji; previously color words were ignored without a
+operator - Vibrant color mixing: Red + blue now produces a vibrant purple instead of a muddy dark one; switched from Kubelka-Munk K/S to Beer-Lambert spectral mixing
- Composable demo segments: demos can now be composed from named segments via
demo.json;--save NAMEon play-ai and install-doodle-demo writes segments and auto-builds the composition; per-segment speed control viaSetSpeedaction - Art AI: draw_technique replaces shape examples: planner now generates per-component
draw_techniqueguidance instead of relying on 11 hardcoded shape examples; execution prompt condensed from ~160 lines to ~50 lines of 3 core techniques (horizontal fills, diagonal chains, layered depth) - Art AI: human feedback option: press
fduring judging (triage or per-component) to give free-text feedback that feeds into the next iteration's drawing prompt - Art AI: single context view per component: per-component judging now shows only the full canvas with red highlight (no separate zoomed crop), reducing feh dismissals from two to one
- Art AI: better curvature for organic shapes: new
shape_profilefield in composition describes curvature with y-coordinates; execution prompt now has an "arched body" example; both plan and component-library sections pass shape profiles to the drawing AI - Art AI: quit stops entire training loop: pressing
qduring human judging now exits the full training loop, not just the current round - Art AI: full-image context in component judging: per-component judging shows the full canvas with the component region highlighted (red rectangle) for spatial context
- Art AI: auto-adjust bounds on disconnection: after rendering a composite, coherence check detects disconnected components and automatically adjusts bounds
- Art AI: smarter human judging: auto-skips identical components, allows quitting mid-session with
q, shows summary of reviewed/skipped/remaining counts - Art AI: human judging mode:
--humanflag replaces AI judge with interactive side-by-side comparison, letting a human pick the better component version - Art AI: multi-candidate iteration with focused mutation: AI now generates multiple candidates per iteration (mutation, informed regen, fresh regen) to escape local maxima; judge provides per-criterion scores and specific improvement targets; contradictory learnings are automatically resolved
- Art AI: structural connection accuracy: AI now plans where parts attach to each other, draws connection points correctly (e.g., fronds at top of trunk), and judge penalizes anatomically wrong connections
- Demo playback: fix right-side artifacts by clamping cursor coordinates to canvas bounds in demo script generation
- Art AI: entertaining draw order: AI now draws the subject first with per-element color mixing (fun to watch), minimizes large monotone background fills (boring to watch), and judge penalizes flat backgrounds
- Art AI: better shape judging and refinement: AI judge now evaluates shape quality (organic curves vs boxy rectangles), refinement escalates from targeted tweaks to full restructuring after repeated losses, and color mixing recipes are passed through to the drawing AI
- Display settings in parent menu: Parents can now adjust screen brightness and contrast via Parent Menu > Adjust Display; settings persist across sessions
- Visible gutter border: Canvas gutter now has a distinct color (black in dark mode, white in light mode) so users can see the non-drawable border area
- ESC toggles mode picker: Pressing ESC while mode picker is open now closes it instead of reopening
- Simplified mode picker: Mode picker now shows 3 options (Play, Music, Art) instead of 4; Write/Paint are now tools within Art, not separate modes
- Mode picker hint simplified: Replaced text instructions with just arrow symbols (◀ ▶) for pre-readers
- F-keys work in mode picker: Pressing F1/F2/F3 while mode picker is open dismisses it and switches directly
- Art tool overlay: Non-blocking overlay appears briefly when entering Art, showing current tool and "Tab to switch"; dismisses on first action or after 1.2s
- Art tool indicator: Header now shows both tools (Write and Paint) with current tool highlighted; Tab hint between them
- Escape tap mode picker: Tapping Escape opens a mode picker modal; Esc badge added to mode indicator bar
- Tab toggles paint/write: Removed space-space toggle, now only Tab switches between paint and write modes in Art (avoids accidental triggers while drawing)
- Space-space toggle: Double-tap space toggles write/paint both ways, requires consecutive spaces
- Mode switch dismisses prompt: Switching modes while "keep drawing" prompt is showing dismisses it and switches normally
- Color mixing fix: Similar colors no longer produce brighter results when mixed
- Demo hides mouse: Demo recordings no longer show the mouse cursor
- Legend 3 shades: Color legend shows light/medium/dark gradient per row
- Cursor thick sides: Paint cursor uses heavy lines for sides, light corners
- Legend updates: Improved color legend visibility in paint mode
- Paint mode contrast/cursor/legend: Better cursor visibility and contrast in paint mode
- Add spaces to operators: Play room adds spaces around operators when inserting words
- Caps fixes and directional typing: Fixed caps behavior and directional typing in paint mode
- Double tap shift timing: Only trigger shift on double-tap after a pause or space
- Paint colors don't blend with bg: Paint strokes use pure colors, not blended with background
- Double tap in paint mode: Double-tap no longer capitalizes in paint mode
- Arrow held behavior: When an arrow is held, don't auto-advance in other direction when painting
- Rename modes: Renamed modes for clarity (Music, Play, Paint)
- Add gutter: Added gutter around canvas so cursor ring can extend to edges
- Loop panel exit hint: Show "Esc: exit" in music room loop panel during recording and looping
- Allow Music Key Switching: New parent-menu toggle to disable arrow-key musical key switching in Music Room (mirrors Allow Music Looping)
- Silent Mode: New parent-menu toggle that turns off all sound and disables the volume keys until a parent turns it back on. The Volume button in the room switcher is greyed out and labeled "Silent" while it's on, reusing the same disabled path as when audio isn't working. Volume level now also persists across restarts.
- Rename to Code Space: Parent-menu toggle now reads "Allow Code Space" instead of "Allow Code Panel".
- Test battery in VM: PURPLE_TEST_BATTERY=1 again shows the battery icon when no real battery exists, fixing a regression from the title bar refactor.
- Help & Videos: New parent-menu item showing a scannable QR code and the plain URL (purplecomputer.org/video) for video guides. The room switcher hint now also says "Hold Esc for grown-ups" so parents can find the parent menu.
- Keyboard-only hint: Persistent bottom-left note in the room switcher ("Keyboard only · no trackpad or touch"), a line on the live-boot splash, and a longer explanation in the Parent Menu, so parents and kids learn up front that mouse/trackpad/touch are off on purpose.
- USB blink no longer jitters: The blinking USB icon's off-state now pads to match the double-wide icon width, so the room title and battery indicator stay put instead of shifting one cell with each blink.
- Clear Room (was Clear Rooms): The room-switcher action is now "Clear Room". Activating it asks what to clear, offering "Clear [Room] Room" (e.g. "Clear Art Room"), "Clear All Rooms", and "Go Back". It defaults to "Go Back" for safety; arrow up reaches the clear options.
- Keyboard-only hint dialed back: The bottom-left "keyboard only" note is now dimmer and no longer italicized, so it stands out less.
- Keyboard-only hint, calmer: The bottom-left note now reads "Purple is always keyboard only" in the same soft purple as the computer name, so it reads as an intentional aside rather than an error.
- Simpler code-panel hints: The cycling "Try:" hints in the Art and Music code panels are now mostly single short commands (e.g. "green 10", "down 5") instead of comma- and semicolon-joined pairs, with a few comma-free chaining examples ("red forward 10 spin", "fast abcdefg slow asdf") kept so kids still see you can chain in one sentence.
- Code commands: word order no longer matters: In the Art code panel, color, distance, and direction can be typed in any order within one command. "down blue 5", "down 5 blue", and "blue down 5" all draw 5 blue squares going down; previously "down blue 5" silently did nothing useful. Directional text ("down dog") and move-then-write ("down 5 dog") still work.
- Clear Room chooser, tighter and safer ordering: The Clear Room chooser now uses the same compact spacing as the Littles Mode picker, and lists "Go Back" on top (pre-selected) followed by Clear This Room and Clear All Rooms, so a stray Enter is safe while the likely action is just one Down press away.
- Calmer arrow nudge in code mode: Pressing an arrow with the code panel open now flashes a soft purple background behind the "Hold Space: close code" hint instead of a bright yellow text highlight. Left/right arrows (which already navigate) blink it once; up/down blink twice. The highlight now extends one cell wider so it fully covers the robot icon.
- Arrow nudge highlight matches the active mode tab: The "Hold Space: close code" pulse now uses the same purple background and dark text as the selected "ABC" write tab. The highlight wraps only the inner words (a tidy pill, like the ABC tab), leaving the robot icons outside it, so the double-width glyphs no longer smear the box or shift the right-aligned hint when it lights up.
- Bulleted code-panel hints: The cycling "Try:" hints in the Art and Music code panels now group two or three short commands per line with the same "•" bullet style Play uses (e.g. "red forward 10 • blue up 6"), instead of one command per line. Genuinely multi-step examples stay on their own line.
- More varied Art hints: The Art "Try:" hints now show short combos that each draw something (a color plus a move, or a move plus a turn) instead of bare single words like "red" or "spin" that do nothing visible on their own. They mix more colors (blue, yellow, pink, purple, orange, green), all four directions, and both "spin" and "turn left/right", and keep a couple of shapes (a square via "purple repeat 4 forward 8 spin", a descending staircase via "orange repeat 4 right 4 down 4", a loop via "repeat 36 forward 5 spin") for the more advanced end.
- Color before a loop now works: In the Art code panel, a color in front of "repeat" (e.g. "purple repeat 4 forward 8 spin") now paints the whole looped shape in that color, instead of typing the letters of "repeat" onto the canvas. "repeat" still only starts a loop at the beginning of a line, so the color is split off ahead of it.
- Music persists across room switches: Leaving the Music room no longer wipes the grid. Your colors, instrument, and key stay just like a drawing in Art, so switching to Play and back keeps your music intact. A playing loop still stops on the way out so no sound bleeds into another room with no visible source. The Clear Room chooser still does a full reset.
- Tighter close-code highlight: The pulsing highlight behind the "Hold Space: close code" hint now covers just the words, with the spaces and robot icons left outside the purple band instead of one cell of padding on each side.
- Keyboard hint aligns with the viewport border: The "Purple is always keyboard only" footer text now lines up with the left edge of the purple border on any terminal width, matching the title column above it, instead of hugging the far-left screen edge on wider screens.
- Arrow-key hint in Art: The Art-room footer now shows a small ASCII arrow cluster (an inverted-T of
[↑]over[←][↓][→], laid out like a laptop's arrow keys) labeled "Arrows move" on the right, mirroring the "keyboard only" hint on the left and aligned to the right viewport border. It appears only in Art when the code panel is closed. When the mute badge shows, the badge takes the border spot and the arrow cluster slides just to its left with a small gap. - Arrow-key cluster in the room picker: The Esc room picker now shows the same laptop-style arrow cluster (
[↑]over[←][↓][→], labeled "Arrows move", arrow glyphs in bright purple) centered on its own line below "Enter pick Hold Esc for grown-ups", replacing the plain "Arrow keys move" words so the navigation keys read at a glance. - No misleading "correction" for color-plus-command: Typing something like
green right 5(or inside a loop,repeat 5 green right 5) no longer flashes agreen right 5 → green, right 5hint. Splitting a color off the command that follows it is just how Purple reads the line, not a fix to your spelling, so it stays silent. Real corrections (a misspelled color or command) still show. - One unified Sound entry in the Parent Menu: The three separate rows for Silent Mode, Volume Lock, and Adjust Volume are now a single "Sound" entry, paired with a parallel "Display" entry (renamed from "Adjust Display") to mirror the "Sound & Display" section header. Opening Sound shows a Volume slider with the current level and a Lock row below it, laid out in the same label/bar/value style as the Display modal. The volume row reacts to ← →, the lock row reacts to Enter (turning it on pins the kid's volume keys at the current level), and Space plays a test sound at the current level. Sliding all the way down reads "Silent Mode" instead of a numeric zero, and the Sound row label switches to "Sound: Silent Mode" or "Sound: Locked" when a lock is active. Old
silent_mode: truesettings files are migrated tovolume_lock: 0on first load. - Friendly "too old" screen on 32-bit computers: Booting the USB on a 32-bit-only computer (e.g. old Atom netbooks like the Acer Aspire One) used to hang silently at the word "GRUB" with no explanation. GRUB now checks for 64-bit support first and, when missing, shows a short plain-language message ("Sorry, this computer is too old for Purple Computer. Most laptops made in the last 15 years or so will work.") with the support email, instead of freezing. The check is skipped if the cpuid module is unavailable, so 64-bit computers are never wrongly blocked.
- No checkerboard flicker on old Intel MacBooks: On pre-2016 Intel MacBooks, changing a music-grid cell's color (pressing a letter) briefly flashed a checkerboard in the color transition, because the panel's PSR/FBC power features scan out stale compressed tiles on partial redraws. The live boot now passes
i915.enable_psr=0 i915.enable_fbc=0to disable those features. It is Intel-only and a harmless no-op on AMD/NVIDIA machines. - Checkerboard flicker fix, the real one (vsync compositor): The earlier PSR/FBC and "TearFree" attempts did not fix the brief checkerboard old Intel MacBooks flash during transitions (key-shift in music, power screen over a room). The real cause is a torn present: the modesetting X driver blits partial screen updates straight to the panel, so for a frame you see part of the old screen and part of the new one. modesetting has no TearFree option (that config line was a silent no-op), so Purple now runs the picom compositor, which presents whole, vsync'd frames. Transitions are clean. It starts guarded at boot and never blocks the session.