Repository navigation
Manager
The manager is a web application the plugin serves on its own port, 5582 unless the settings page says otherwise. It holds everything that manages the display rather than operates it. The settings page opens it in the same window (inside Volumio's iframe page, with its title bar and way back, which is how it is used on the player's own display) or in a tab of its own, and any browser on the network reaches it at http://<player>.local:5582/. Like Volumio's own interface it has no login: it is for the network the player is on.
Volumio's interface opens every openUrl button in a new tab; the "open here" button therefore uses the interface's oauth button type, the one it navigates in place, with the iframe page as its performer URL (the two query parameters it appends are ignored). Inside Volumio's page the manager's inputs take the kiosk's on-screen keyboard through the volumio-input-focus and volumio-keystroke messages, as the radio plugin's page does.
The port and the address are set on the settings page (managerPort, managerHost in the plugin's configuration). A new port is taken at once and the buttons follow; a port something else holds is refused and the old one stays. The address is the name the buttons and the status page use: empty is the player's name with .local, which mDNS resolves on most networks, or an IP address or host name where .local names do not resolve.
The page is plugin/manager/manage.html, one file with no framework. It reads the plugin's strings in the interface language through the API, so the manager speaks the languages the plugin does.

-
Themes. Every folder under the meter templates, with the meters it holds and whether a spectrum twin stands beside it. Each theme's card offers Tailor, a copy of the theme cut to another screen size and installed beside it, the theme on show's size offered first and a switch to stretch to the screen's shape instead of keeping the theme's (the Tailor page has what the cutter does, with pictures), and Package, the theme's catalogue zip with a preview of every meter, handed to the browser when the job is done and kept behind a Download link in the job's row; both run as jobs the tab follows, the package counting the meters shown with the seconds to go, and the theme's card says which job runs on it. A theme's previews are drawn by the display itself:
glass --headless --snapshotrenders every meter of the theme and--thumba thumbnail of each, one theme at a time, and the pictures are kept under/data/INTERNAL/glass/previews/<theme>/until the theme's meters file or the plugin's version changes. A theme can be put on show, given its meter rotation (all meters at random, a list, or one, moving on a timer or with the title), or removed; the last theme stays, and removing the one on show moves the display to another first. Car Dash, on the same tab, puts a day theme on show from one time and a night theme from another, by the player's own clock (the Themes page has it). -
Face. The player's meters live in the browser: the theme on show and the meter the player shows, drawn by the display's own engine compiled for the browser, with the levels as they play. It follows the player's screen when the music stops: the persist countdown, then a banner that says the player is stopped or paused and the display has left, until it plays again. The tab brings the configuration, the theme, the fonts and the icons as a remote display does, keeps them in the browser by checksum so a second visit fetches only what changed, and takes the frames and the player's state from the manager as one event stream; it follows the player's theme and meter as they change, and a button puts it full screen. A tap or a drag on the theme's controls acts on the player as on its own screen, through the manager, when the controls are on (the Meters-Reference has the keys; the setting is the System tab's). "Open Anymote" opens Anymote, any remote, a remote from anywhere: the same face on a page of its own,
/anymoteon the manager's port, for any browser: it fills the window, one tap takes the screen, and a phone or a tablet keeps it on its home screen as a full-screen app; the Anymote page has the ways to full screen and the kiosk lines. The Contracts page has the module's contract under "The browser face".

-
Catalog. The index that glass_templates publishes (
catalog/index.json), fetched with its ETag and kept on the player. Entries are browsed by size, kind and state; the size filter starts at the theme on show. An install downloads the zip, checks its size and SHA-256 against the index while it arrives, opens it, checks that the folders it holds are the ones the index names, unpacks each into the meter or spectrum tree through a staging directory that replaces the folder in one rename, records the checksum incatalog/installed.json, and draws the previews. A changed zip shows as an update; a folder that exists without a record shows as present. -
Uploads. A theme zip sent from the browser installs the same way, in any of the layouts the catalog holds: one folder, files at the zip root, a
templates/prefix, a bundle of folders, or meter and spectrum twins. - Appearance. A Display section first: whether the theme is fitted to the screen, and whether it sits centred or at a position of your own, the same choices as the plugin's settings page, the display starting again with the change. Then the artist fanart settings and the clearing of the fanart cache, and the fonts: the face each text style is set in, built in, uploaded here or one of the player's own, and the upload of fonts of your own. The Artwork page has where the pictures come from, how to bring your own, and the fonts.
- Remotes. Whether this player serves remote displays (off until turned on here), the three ports, pre-filled and applied at once with a port something else holds reported, the frames daemon's state, and the remotes connected: name, address, release, screen, since when, whether frames reach them, and a link to each remote's own settings page, opened in this window. The Remotes page has the wire and the client.
- Screen. What the display draws on and whose the screen is, the rotation and pointer suggested from what the player has, and the settings the display reads: what draws its window (X, Wayland, or the screen itself through KMS/DRM with no X server), the rotation for a panel that is portrait by nature, and the pointer. The Screen page has the detail.
- Backups. The settings backups: create, restore, delete, download as a zip, and upload a zip as a backup (checked the way a restore checks it, and named by its manifest or by the file, with a number when the name is taken). Settings move from one player to another this way. The Backups page has the detail.

- Catalog, in short. The Catalog page has the tab, its filters and what an install checks.

- System. What acts on the player: Glass releases (below); the performance profile that sets the frame rate, the rotation quality and the transitions together (Full, Standard, Light, Minimal, or Auto for the board; the Performance page has the rows) and the governor's switch (the display lowers its rate when it cannot keep up with a theme, and the panel and the Status tab say "lowered to" while it does); the interactive controls setting, whether a theme's indicators and buttons act when tapped, as the theme says, on for every theme, or off for every theme (the Meters-Reference has the theme keys); the network share switch, whether computers on the network may edit the theme folders through Volumio's Internal Storage share (the Skin-Creation-Guide has the workflow); and the logging settings, the level of what Glass writes to the player's journal, errors only to trace, the targets at the fine levels, the last three hundred lines on the tab and the last thousand as a file (the Logging page has the levels and targets). While PeppyMeter Screensaver's own folder still holds themes, a panel says how many and how much space, and wipes its two theme trees behind a confirmation; Glass copied them once at its first install and reads its own folder, so they only take space, and nothing else of that folder is touched.

-
Status. Find a problem, a guided diagnosis: pick what is wrong from nine symptoms and the Manager runs the checks it can run itself over what it knows, the sheet, the screen's facts, the release state and Glass's lines in the journal, and lists likely causes first, with a button to the tab where each is set; the Troubleshooting page has the checks in words. Then the system sheet: a picture of the player in sections, Player, Screen, Audio, Themes, Network and remotes, Face and Anymote, Housekeeping, laid out so a screenshot or its text answers a support question in one go. "Copy as text" puts the whole sheet on the clipboard for a forum post, with a diagnosis's findings when one was run. The player's addresses, and the manager's and Anymote's links in their address form, stay hidden until "Reveal addresses" is pressed, so a screenshot carries none unless the poster chose to; the copied text follows the same switch. The rows: the plugin's version and binary, whether the display is up, the theme on show, its rotation and the meter on show at the moment, Volumio's version, the board and the backend's uptime, the build the plugin zip carries, the addresses when revealed with the manager's and Anymote's links, the screen's size beside the theme's with the mouse setting and since when the display has been up, what the display draws on and through which renderer and whose the screen is, the kiosk service, the X server and the kiosk's plugins, the screen's rotation and pointer, the touch mapping and its calibration, the panels with their native sizes, the touch panels, mice and keyboards with their event nodes, the backlights, whether the tap heads the ALSA chain and what the player is set to play through, the format of what plays, the theme folders with how many themes and spectrum twins each holds, the face each text style is set in and how many fonts were uploaded, whether the themes are editable over the network share, Car Dash's period and next switch, the interactive controls setting, the Face tab's pages and whether frames flow to them, the artist fanart settings with the artists cached, the performance profile with its rate, the governor and the board, the player's state as the channel saw it last and whether what plays is measured (a live ring under
/dev/shmwhile the player reports play; none means the source plays below the tap and is heard but not measured), the displays connected to the channel, whether remote displays are served and on which ports and how many receive frames, each ring with its stream and whether it is live, the catalog, the free space in the player's internal storage, the manager's own address, the logging level, the last upgrade, the newest backup, and the last three warnings or errors Glass wrote to the journal. -
Upgrades. The System tab shows the installed version and the latest release on GitHub (checked a minute after the manager starts, once a day after, and on demand; a newer release is announced in the page's header on every tab). When the release is newer, one press upgrades: the plugin zip is downloaded and checked against the digest the release carries, a settings backup named
before-<version>is written (these automatic backups are kept to the newest five; named backups are never touched), the installed plugin is kept as a zip under/data/INTERNAL/glass/upgrade/, the meter and spectrum configurations are snapshotted, the player's own plugin manager replaces the plugin and runs its install script (the settings in/data/configurationstay), the configurations go back, and the player's backend restarts so the new code loads. Music keeps playing through the restart. The page follows the job, waits for the new version to answer, and reloads. The kept version can be put back the same way, from the same tab.

Installs, uploads, removals and upgrades run one at a time. Jobs are followed on the page while they download, check and unpack, and a failure says why: a checksum that does not match, a zip that is not a theme, a download that did not complete.
/data/INTERNAL/glass/
catalog/index.json the index as last fetched, with its ETag
catalog/installed.json what was installed from the catalog, by name and checksum
catalog/thumbs/ catalog thumbnails as they were looked at
catalog/downloads/ zips while they install (empty otherwise)
previews/<theme>/ <meter>.png and <meter>.thumb.png, with a stamp
upgrade/latest.json the latest release as last checked
upgrade/state.json the kept version and the last upgrade's outcome
upgrade/previous-<v>.zip the plugin as it was before the last upgrade
upgrade/config/ the meter and spectrum configurations across an upgrade
Themes land in the trees the display reads, base.folder of the meter and spectrum configurations, /data/INTERNAL/glass/templates and templates_spectrum by default. Folders and files unpacked by the manager belong to the player's user.
Every tab works through routes under /api, and so can anything else on the network. The Manager-API page has each route with its parameters, its answer and its errors.
A zip holds one or more units: a directory with meters.txt (installed under templates/) or spectrum.txt (under templates_spectrum/). The unit's folder is the directory's name, or the zip's name when the directory is the zip root or a plain templates/ or templates_spectrum/ container. Everything under the unit's directory lands under its folder with paths kept. Entries that leave their directory, symbolic links, directories and .DS_Store files are left out; an encrypted or damaged zip is refused. The same rule generates the catalog's index, so the two always agree.
- Home
- Quick-Start
- Settings
- Manager
- Manager-API
- Screen
- Artwork
- Catalog
- Backups
- Remotes
- Anymote
- Performance
- Troubleshooting
- Logging
Themes
Developers
The Glass interface