-
-
Notifications
You must be signed in to change notification settings - Fork 40
Preset packages
The GUI can import, create, apply, and remove immutable OpenGlass preset packages stored as ordinary ZIP files. A package represents one system-wide OpenGlass configuration; only the five Windows colorization values and their Override forms remain independent per user.
Use Import... or drop ZIP files anywhere on the elevated GUI. A single drop offers Import only or Import and apply. A multi-file drop validates and imports the complete batch without changing the current configuration. Create from current preview... captures the currently applied GUI state, including unsaved changes, without saving it or changing the Revert baseline. Reset all settings... returns preset-pack settings to defaults and inherited values and remains reversible until Save.
Applying another package replaces the current unsaved preview without an extra prompt, allowing several packages to be tried in sequence. Save accepts the latest state and Revert restores the configuration from before the trial. Neither action edits the ZIP or its deployed copy.
A package is a standard ZIP with a root manifest.json; no custom extension is used. The recommended filename is <sanitized-name>-<uuid>.zip.
manifest.json
[LICENSE]
assets/
theme-atlas.png
theme-atlas.png.layout
reflection.png
material.png
Schema version 2 uses this top-level shape:
{
"schema_version": 2,
"catalog_version": 1,
"uuid": "00112233-4455-6677-8899-aabbccddeeff",
"name": "Preset name",
"description": "Optional preset description",
"author": { "name": "Author", "homepage": "https://example.com" },
"license": { "file": "LICENSE" },
"settings": {},
"assets": {}
}The empty objects illustrate metadata shape only. A valid package must contain every preset setting defined by its catalog version, expressed as a typed value, an in-package asset, or null to delete the value during Replace.
Unknown settings are not applied or exported, but they do not invalidate an otherwise compatible package. The review dialog lists them as ignored. When an older catalog is read by a newer GUI, Replace changes only settings known to that older catalog and leaves future settings untouched.
The manifest records a canonical lowercase UUID, name, description, author and absolute HTTP(S) homepage, the complete typed catalog, and SHA-256/size records for assets. A UUID is immutable content identity: identical content is reused, while different content with the same UUID is rejected. Any content change requires a new UUID.
license may be null. Otherwise the archive contains a nonempty UTF-8 root LICENSE, from which OpenGlass derives a short display name when possible.
Unless its text explicitly limits scope, that LICENSE applies to the complete package—manifest content, arrangement, images, and layouts—but only to material the author is authorized to license. Third-party assets and their terms must be identified in the same file. Without a LICENSE, the whole package is treated as all rights reserved. Author identity and licensing authority are displayed as unverified; the format provides no signature or trust chain.
Imported content is deployed read-only under %ProgramData%\OpenGlass\Presets\<uuid>\, and canonical asset settings are rewritten to that location. SYSTEM and Administrators receive Full access; Users and Window Manager receive Read/Execute.
Packages are hostile input. Import rejects traversal, alternate data streams, case-insensitive duplicate names, links and nonregular entries, excessive paths, malformed archives, abnormal compression ratios, size/count violations, hash mismatches, invalid atlas layouts, and images that fail bounded PNG structure/CRC or WIC conversion checks. PNG validation does not decode the entire DEFLATE pixel stream; final decoding occurs during rendering. Packages cannot contain scripts, shaders, DLLs, executables, or network assets.
Applying requires confirmation of the complete set/delete diff, sensitive settings, graphics decoded by dwm.exe, and restart-required values. OpenGlass never restarts DWM automatically.
A deployed package cannot be removed while a canonical asset setting references it.
Interactive uninstall offers independent choices to delete current-user plus machine configuration and to delete installed packages. Configuration deletion is selected by default; package deletion is not. Only known OpenGlass values are removed from the uninstalling user's HKCU and HKLM. Other user profiles remain untouched and may require manual cleanup while signed in as those users.
Silent uninstall preserves the same defaults: /nodeleteconfig keeps current-user and machine configuration, while /deletepresets removes %ProgramData%\OpenGlass\Presets.