Windows 11 screensaver that plays WebGL2 shaders (Shadertoy-compatible) full screen with crossfade transitions, hosted in WebView2. Inspired by the work of Anne CH Postma (D:DREAMS Studio, https://mirabilia.d-dreams.studio) — every shader in this project is original and written from scratch.
Phases 1 through 4 are done. Sixteen bundled original shaders in four categories.
Playlist with crossfade, multi-monitor, exit on input, mini preview in the Windows screensaver dialog, and a settings window: gallery with live previews, playlist builder, sliders, Shadertoy import and auto-save. UI language: English.
Every shader here is original work, written for this project. Stills are single frames — all of them are slow, continuous animations.
Driven by whatever your PC is playing; the stills show the synthetic fallback used in silence.
These follow the clock, so the still is only one moment of the day.
Audio-reactive uses WASAPI loopback: the shaders respond to whatever your PC is playing. Capture only starts when your playlist contains audio shaders; during silence the player falls back to a synthetic pulse. Time-reactive follows the time of day (fixed day/night curve around 06:00 and 21:00, no location lookup).
The settings window imports a Shadertoy shader in two ways. Paste GLSL takes the code straight from the shader page; an optional author and source field record the attribution. Fetch by URL or id needs a Shadertoy API key, which requires Silver or Gold status on their site, so pasting is the practical route for most accounts. Either way, only single-pass image shaders without channel inputs are supported at the moment.
Imported shaders are stored in your own %APPDATA%\Auralis\config.json and stay out of this
repository on purpose: Shadertoy shaders default to CC BY-NC-SA, which this MIT-licensed
project cannot redistribute. Every shader shipped here is original work.
The publish step writes both Auralis.scr and an identical Auralis.exe. Use the .exe
for testing. Windows resolves a .scr through its shell association, which ignores any
arguments you pass and starts it full screen — so Auralis.scr /c does not open the
settings window, it takes over the screen.
- Window mode (recommended for testing): run
dist\Auralis\Auralis.exewithout arguments for a 1280x720 window with a debug overlay (shader name + fps, press N for the next shader). - Settings: run
dist\Auralis\Auralis.exe /c. - As a real screensaver: right-click
dist\Auralis\Auralis.scr→ Test (straight to full screen) or Install (registers it in the Windows screensaver settings). Mouse movement or a keypress exits.
If you only have the .scr, Start-Process ... -NoNewWindow bypasses the shell association
and passes arguments through.
Note: the folder must stay intact — the
.scrneeds the DLLs and theweb\folder next to it. Installing points at this location, so do not move it afterwards.
Through the settings window (Auralis.scr /c), or by hand in
%APPDATA%\Auralis\config.json (v2 adds the fields shadertoyApiKey and customShaders,
see SPEC.md):
{
"version": 1,
"playlist": [], // shader ids; empty = everything
"shuffle": false,
"durationSec": 90,
"transitionSec": 4,
"resolutionScale": 1.0, // lower to e.g. 0.75 on a 4K screen with a weaker GPU
"shadertoyApiKey": "",
"customShaders": [],
"audioSensitivity": 1.5 // 0.5–3.0, audio category only
}Log file: %LOCALAPPDATA%\Auralis\saver.log.
dotnet build src\Auralis\Auralis.csproj
dotnet publish src\Auralis\Auralis.csproj -c Release -o dist\Auralis
See SPEC.md for the interface contract between host and web player, and TODO.md for open items.















