MichaelScottsman 80d4710f3f assPod: Nano Gen 2 body, chosen on the main menu and kept across launches
- assPod Model on the main menu switches between Video Gen 1 and Nano Gen 2; Color lists the
  current body's finishes (the nano: silver, green, blue, pink, black, (PRODUCT)RED). The choice is
  kept in ~/.config/glass-shell/asspod.json beside the glass tune.
- The nano: a procedural 2nd-generation model (tools/nano2-model) exported as render models, drawn
  by podd with anodized aluminum (tinted, bead-blasted, the laser-etched back paler), white end
  caps and a clickable wheel. Same menus on a 240 x 180 logical screen, so its text is larger, as on
  the real one; it plays no video. Shown 52.5 mm wide.
- podd: one box layout that holds either body, so a switch needs no restart; 64 px between atlas
  tiles and a 4 px clear band around each eye's image, which removes the hairline rectangle around
  the body (filtering at the stereo split took the other eye's edge); texture dump and debug modes.
- The left stick acts like the right: Steam's d-pad directions are no longer relayed (tilting the
  left stick down or left pressed the centre button or Menu).
2026-10-10 14:08:31 -04:00

LiquidAss icon

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

LiquidAss re-skins the Steam Frame's VR UI in Apple's glass design language. AI assisted.

LiquidAss quick access menu in glass over the SteamVR home LiquidAss library in glass over passthrough

Install

Run this in a terminal on the headset (Desktop Mode's terminal, or over SSH). It downloads the latest release and adds LiquidAss to + › Launch Program:

curl -fsSL https://github.com/MichaelScottsman/LiquidAss-Frame/releases/latest/download/install.sh | sh

Run the same command again to update. To install a specific release, put LIQUIDASS_VERSION=v0.1 before sh.

Uninstall

This turns the theme off and removes the launcher entry, the files and your saved glass settings:

curl -fsSL https://github.com/MichaelScottsman/LiquidAss-Frame/releases/latest/download/install.sh | sh -s -- uninstall

Turn it on and off (in the headset)

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

A glass toast confirms "LiquidAss · On".

Launching LiquidAss from + › Launch Program

To turn it off and return to Steam's original UI, do the same again: + › LiquidAss.

Turning LiquidAss off from the + menu returns Steam's original UI

Configure the glass

Press the paintbrush button at the right end of the dashboard bar. Its panel sets the glass colour and tint strength, glass intensity, refraction, frost and highlights, and changes apply live. Reset to default restores the original look. Your settings are kept across reboots (see below).

The paintbrush glass panel: colour, tint strength, intensity, refraction, frost, highlights

Open the assPod

Press the music note button on the dashboard bar, just left of the paintbrush. The assPod appears in the hand you pressed it with.

assPod Model on its main menu switches the body: Video Gen 1 (the original) or Nano Gen 2, in anodized aluminum with white end caps. The nano has the same menus, laid out for its smaller screen with larger text (six rows, like the real one), and it plays no video. Color lists the current body's finishes: Black and White for the Video; Silver, Green, Blue, Pink, Black and (PRODUCT)RED for the nano. The model and colours you pick are kept across launches.

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 LiquidAss 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 two files of your own:

Path What it is
~/.local/share/applications/glass-shell.desktop The "LiquidAss" 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. An exception to "nothing persists", by request
~/.config/glass-shell/asspod.json The assPod model and colours you picked. Written only when you change them. The other exception, by request

The uninstall command (or python glass.py uninstall) removes all of them. (The install paths keep the project's original glass-shell name, so existing installs carry over.)

From the PC

python glass.py install        # copy this checkout to the headset, set up glassd and add the launcher (for development)
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.

Native glass works out of the box. Releases ship glassd built for the Frame (native/glassd/prebuilt/glassd), and the installer puts it in place. python glass.py install does the same, then rebuilds glassd from the checkout's sources over it (if that build fails, the shipped binary stays). The daemon also puts the shipped binary in place whenever glassd is missing, so the LiquidAss toggle never starts CSS-only. Native mode is on by default (device/defaults.json). The assPod's 3D renderer, podd, ships the same way (native/podd/prebuilt/podd).

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

Releases

sh tools/make_release.sh v0.2 builds dist/LiquidAss-Frame.tar.gz from the committed tree. Publish it with the installer:

gh release create v0.2 dist/LiquidAss-Frame.tar.gz install.sh --title "LiquidAss v0.2"

install.sh always fetches the asset named LiquidAss-Frame.tar.gz from the latest release, so keep that name.

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%