MichaelScottsman 5af91fc1bd Glass leaves with its page; the sidebar keeps native glass in VR Settings; Friends clears the search row; a paintbrush on the bar tunes the glass
Route changes
- Plates fade with their content: the reporter reads a running opacity fade on a plate or its ancestors
  (Home -> Friends: the route's 150 ms exit) and reports exitAt/exitMs; glassd fades the plate's coverage
  linearly on that clock, optics unchanged (cap exitAt); the daemon keeps a leaving plate for exactly
  that fade. A plate whose element left the DOM (Home -> Library stays in one /library route: no fade,
  Home unmounts when Library has rendered) goes in 90 ms instead of the 350 ms dematerialize ramp that
  left Home's discs over the Library grid.
- The window cover arrives with the route: the shell sets the new route's glass mode in the history
  change itself, the reporter reports the mode flip at once (tickNow) with the time it happened, and
  glassd springs a kept surface's new cover from then (appearAt now also for main gaining its cover).
- A disc popped at the switch belongs to the page that leaves: it never flips the new page to the crops
  layout and goes with the page's fade (lgs_sg.js routeOut).

Sidebar in VR Settings
- The frame menu is a laser-only surface keyed on Steam's gamepad-nav flag, which goes stale on
  SteamVR's own pages (the laser works SteamVR's page): the native glass went on and off with every
  input Steam saw, its CSS glass in between. On a SteamVR page (the frame's VR Settings action active)
  the rule does not apply.

Friends
- The page starts at y 108 (C1a's pad + 40, as Settings' list): the sidebar platter no longer sits
  under the search capsule.

Glass tuner (flag glassTune, on)
- A paintbrush circle after the system capsule (its own glass piece and native cover) opens a bar popup
  through Steam's own bar popup button: colour (8 swatches) and tint strength, Glass intensity (the
  dial), Refraction, Frost, Highlights, Reset to default.
- Daemon action glass.tune (kind ui, its own 40 ms rate, outside the global window): glassd.json at once,
  ~/.config/glass-shell/tune.json 400 ms after the last change (kept across reboots by request; the
  defaults delete it; RT-6 allows exactly this file), the dial file mirrored for the SteamVR pages.
- glassd: tune {refract, frost, light, hue, hueK} applied in drawGlass, eased (40 ms) like the dial now
  is; the glass body's neutral moves toward the hue (uHue), per-piece tints stay on top (cap tune).
- The CSS glass follows live: a style per Steam window sets --lgs-dial / --lgs-tune-hue; the material
  tints mix the colour in.
2026-10-09 14:06:10 -04:00

Glass Shell: Liquid Glass for the Steam Frame's VR interface

Glass Shell re-skins the Steam Frame's whole VR interface in Apple's glass design language: visionOS window glass for the dashboard window, Liquid Glass for everything that floats. That covers:

  • the library, game pages and settings
  • friends, the dashboard bar and every bar popup
  • frame menus, tooltips, the volume HUD, toasts and the keyboard

It is a look only. Every button, menu, route and controller-focus path is Steam's own, untouched.

Turn it on and off (in the headset)

  1. On the dashboard bar, press +.
  2. Under Launch Program, pick Liquid Glass.

A glass toast confirms "Liquid Glass · On". Do the same again to turn it off.

Nothing persists

The theme is never written to disk. lgs injects the stylesheet into the running Steam client through its local devtools socket (127.0.0.1:8080; Steam on the Frame runs with -cef-enable-debugging). Any of these brings back the stock UI:

  • reboot the headset
  • restart Steam
  • launch Liquid Glass again from +

Nothing starts at boot. There are no systemd units, autostart entries or Steam file patches.

Only two things stay installed, so the toggle is there after a reboot, plus one file of your own:

Path What it is
~/.local/share/applications/glass-shell.desktop The "Liquid Glass" entry in + › Launch Program
~/.local/share/glass-shell/ The toggle script and the theme files it reads
~/.config/glass-shell/tune.json Your glass settings from the paintbrush button on the bar (colour, intensity, refraction, frost, highlights). Written only when you change them; Reset to default in that panel deletes it. The one exception to "nothing persists", by request

python glass.py uninstall removes all three.

From the PC

python glass.py install        # copy to the headset and add the launcher
python glass.py on | off | toggle | status
python glass.py dial 0.7       # glass intensity: 0 = clearest, 1 = most opaque (saved with your glass settings)
python glass.py uninstall

On the headset itself, ~/.local/share/glass-shell/device/lgs on|off|toggle|status|dial V does the same.

How it works

Piece Role
device/lgs_core.js Runs inside Steam's SharedJSContext. Adds one <style> (and hidden SVG defs) to every gamepadui window through g_PopupManager, follows new popups, and removes everything on off
device/lgs_index.js Steam's class names are hashed. The theme is written against readable names (%{BarSurface}, %{*GamepadDialogContent>Field}) that are resolved at injection time from Steam's own webpack CSS modules, so the theme survives client updates
theme/*.css The look, split by area. 00-tokens.nowrap.css holds the materials (window glass, panel glass, Liquid Glass, thick glass), states, radii and motion. See docs/DESIGN.md
lab/ + glass.py Development tools: navigate, open menus, screenshot any surface (it renders even when nobody wears the headset) and audit stock against themed for hidden, shrunk or unclickable controls and lost contrast. See docs/LAB.md

Docs

File What's in it
docs/DESIGN.md Materials, states, components, guardrails
docs/LAB.md Tools, token syntax, rules for working on the live UI
docs/inventory/*.md Every surface, route and sub-menu, mapped
docs/COVERAGE.md What was restyled and verified, screen by screen
S
Description
GitHub pull mirror of MichaelScottsman/LiquidAss-Frame. GitHub repository ID: 1412389406.
https://github.com/MichaelScottsman/LiquidAss-Frame Readme
9.3 MiB
0 Stars 1 Watchers 0 Forks
2026-10-10 23:01:04 +02:00
Languages
JavaScript 45.3%
CSS 26.6%
Python 16.6%
C++ 7.1%
HTML 1.7%
Other 2.7%