MACROVERSE 42

The Wired Atelier

showcase.macroverse.aday.net.au // GitHub Showcase // not the primary live app

VR SUPPORT UNDER DEVELOPMENT

GLSL / ISF shader lab  ·  cloud + desktop VJ  ·  WebXR audience & controller  ·  participatory gig sessions  ·  LAN bridge  ·  Resolume Wire pipeline

Live shader demo

move your cursor to warp the field  ·  ~ opens the live GLSL editor
run it in Macroverse — bind every slider to MIDI faders or OSC · expose hidden uniforms & numeric literals · pipe in audio FFT · watch it react
broken shader? the LLM repair chain fixes it: regex → Ollama → AI · A/B deck · crossfader · shader carousel with thumbnails · startup splash shows VJ + audience QRs · gig sessions (stream QR + co-VJ join) · WebXR VR on Quest/headsets (audience dome or VJ controller) · tag · search · perform your whole library · export to Wire on desktop

Origin story

MacroVerse began at Melbourne Fringe — MacroVerse as a live sonic and visual interpretation of the evolution of the universe — from energy stasis to heat-death dissipation. Reductionist (Nick Wilson) performed on battery-powered micro-instruments; Aday (Adrian Richardson) ran live video projection improv that bent time and energy flow. Both are longtime Clan Analogue artists; the show ran at Abbotsford Convent’s experimental art program — we had an hour-long performance session for a week.

Audio Older recording — not the Fringe gig Video Show AV recording — coming soon

A full AV recording from the performances will be available in the future. Nick is working on his EP — news coming soon.

Three ways in

Standalone VJ Tool

Browse and perform your full GLSL/ISF library. A/B crossfader, mix modes, shader carousel, MIDI/OSC, Roli Lightpad LED blocks. Cloud or desktop. MJPEG / Spout / NDI on desktop.

Participatory & multiplayer VJ

Optional. Audience stream QR drives mouseX/mouseY; co-VJ join link syncs the full desk; WebXR VR on Quest.

Resolume Wire Pipeline

Desktop / self-host. Wire compatibility, expose literals as ISF sliders, fix chain, push to Resolume Wire. Cloud: Clipboard to Wire.

Settings → VJ Show Session ID → Apply. Splash shows VJ + audience QRs on load.

Pipeline demos

PipelineGLSL → ISF JSON → .wire → Resolume. One binary, no installer.
ExposeTurn magic-number GLSL literals into ISF parameter sliders for Wire — one click.
Fix chainBroken shader? Local regex → Ollama → AI. Stop at the first success.

your whole library, live — search it, tag it, perform it — or open the room to the audience

Live macroverse.aday.net.au — cloud edition (public library)
Private macroverse-private.aday.net.au — full library; basic auth on all paths
Source github.com/aday1/macroverse.aday.net.au — Docker Compose, bridge agent, CI images

// this is the GitHub showcase page — the live runtimes above serve the actual app

Deploy lanes

Live probe snapshot — semver, git SHA, deploy age, and feature set per lane. Refreshed when this showcase deploys; ages tick every minute in your browser.

Loading lane status…

Changelog

Stable semver lines. Full history: changelog.md on GitHub.

Loading…

WebXR / VR VJ

VR SUPPORT UNDER DEVELOPMENT

Scan a VR link from the VJ deck QR panel or open vj-vr.html on a Meta Quest (or any WebXR browser). The host desk still renders the mix; VR clients subscribe to the same signed gig session.

Audience VR

SSE stream of the live A/B mix inside WebXR.

vj-vr.html?remote=1&viewToken=…
  • Optional &role=audience
  • Default: immersive 360 dome; flat screen via &mode=screen
  • With Audience participation on: touch/drag steers mouseX / mouseY only

VJ controller VR

Full remote desk over WebSocket; host still renders the mix.

vj-vr.html?role=vj&remote=1&controlToken=…&viewToken=…
  • Crossfader, deck clips, mix mode, Auto VJ on/off and BPM
  • Live GLSL push to host (vj:shader-live)
  • Immersive WebXR + DOM overlay HUD; exit without stopping outputs

QR panel shortcuts

VJ deck → show QR panel:

  • Copy VR audience — dome stream link
  • Copy VR VJ — controller link with tokens
  • Flat stream stays vj-output.html (Pi HDMI / OBS unchanged)

Works on cloud lanes (live, test, aday). Quest Browser or any headset with WebXR immersive-vr. Shaders authored as flat 2D GLSL are mapped onto the dome; true ray-marched 360 content looks best inside the sphere.

Cloud edition vs desktop / self-host

macroverse.aday.net.au runs the full shader lab, VJ deck, gallery, and gig collaboration in the browser. The server library is read-only — your edits, tags, favorites, and new shaders save in IndexedDB in this browser until you export them from Settings.

Works on cloud (hosted)

Preview, Code, Split, VJ, Gallery views · A/B deck, crossfader, mix modes, Auto VJ (shader swap + depth motion toggles) · MIDI / OSC / FFT in the browser (Web MIDI, Web Audio) with AKAI/APC performance mapping · Gig sessions: audience stream QR, co-VJ WebSocket sync, audience touch X/Y · WebXR VR: audience dome + VJ controller (vj-vr.html) · Shader fix chain (pattern fixes on server) · Expose, Clipboard to Wire · Command palette, mobile bottom bar · Startup splash with VJ + audience QRs · VJ shader carousel (thumbnail browse above decks) · Export browser-local edits (Settings JSON backup).

Desktop / self-host only

Pipeline and Wire Hub tabs (batch .wire generation, Avenue .avc, Resolume push) · Spout / NDI / MacroCam MJPEG video output · Cursor IDE, Explorer, Notepad, cursor-agent terminal integration · Git scan/rescan, NUKE, Hard Reset, in-app Update (pull + rebuild) · Full disk save + auto git-commit on Save · Ollama / Cursor fix chain with local agents · Refactor / Vibe (AI tokens) toolbar buttons · Native path picker and folder scan.

Run the Go binary next to your shader folder on Windows, or pull the Docker images and compose stack from GitHub for a private hosted instance with MACROVERSE_HOST_MODE=desktop if you mount local shaders and want the full pipeline.

LAN bridge agent (Ableton Link + venue clock)

The optional macroverse-bridge-agent/ Node service runs on a Raspberry Pi or any LAN machine at the venue. It connects to the same cloud (or self-hosted) Macroverse session over WebSocket and bridges the local subnet to browsers that cannot see Ableton Link directly.

What the bridge does today

Ableton Link sync — reads BPM, beat, and bar from Link on the LAN and publishes bridge:clock:state to every browser on the gig session (Auto VJ beat clock, synced tabs). HDMI helper — logs the signed vj-output.html URL for Pi kiosk. WebSocket bridge role — authenticated via POST /api/bridge/token. Full operator docs: docs/BRIDGE.md in the repo.

OSC (planned)

The bridge advertises an osc capability in its hello handshake; LAN OSC relay is stubbed today. Browser OSC Listen (UDP to the Macroverse host) works on desktop. For cloud VJ, map MIDI in-browser or use a co-VJ laptop with the collaboration link.

# Pi quick start (after minting bridge token in Settings / API):
cd macroverse-bridge-agent && npm install && npm run build
# ~/.macroverse/bridge.json — cloudUrl, token, sessionId, linkEnabled: true
npm start

Self-host (source, Docker, images)

Everything needed to run your own lane is in github.com/aday1/macroverse.aday.net.au: Go API, Vite frontend, docker-compose.yml, nginx edge config, and CI that publishes ghcr.io/aday1/macroverse.aday.net.au/macroverse:live (and :dev, :aday).

Single binary (simplest)

Download a release binary or go build from api/. Drop next to your shader folder. Open http://localhost:8765. Full desktop mode by default on Windows.

Docker Compose (Linode-style)

docker-compose.yml runs nginx + macroverse_live / macroverse_test / macroverse_aday containers. Set env vars, mount shader volumes, use nginx/conf.d/sites.conf for TLS and basic auth. See ops/ scripts for DNS, passwords, and deploy.

# Build from source:
git clone https://github.com/aday1/macroverse.aday.net.au.git
cd macroverse.aday.net.au/api
go build -o ../Macroverse42 .
cd .. && ./Macroverse42

Pre-built desktop binaries: GitHub Releases. This showcase page is published from the docs/ folder via GitHub Pages on push to main.

Live demo loops

Six short loops covering the core feature areas. Procedural placeholders rendered with ffmpeg — the live app draws real WebGL shaders.

HeroDomain-warp FBM loop — the ambient field that backs every panel.
VJ deckA/B crossfade between two live decks. Mix modes: crossfade, alpha, add, multiply.
PipelineGLSL → ISF JSON → .wire → Resolume. One binary, no installer.
GalleryEight live shaders running at once. 1, 4, 8, 14, 24-cell layouts. Arrow keys to focus.
ExposeTurn magic-number GLSL literals into ISF parameter sliders for Wire — one click.
Fix chainBroken shader? Local regex → Ollama → AI. Stop at the first success.

Loops are deterministic procedural placeholders generated by docs/videos/build-videos.sh. Re-run it any time to rebuild — ffmpeg mandelbrot, life, and cellauto sources, capped at ~1.5 MB each. For the real renderer in motion, hit the live app.

Quick start

# Download a release binary, put it in your shader folder, run:
.\Macroverse42.exe          # Windows
./Macroverse42             # Linux / Mac
# open http://localhost:8765
# Or build from source:
git clone https://github.com/aday1/macroverse.aday.net.au.git
cd macroverse.aday.net.au/api
go build -o ../Macroverse42 .
cd .. && ./Macroverse42

Features

Preview
Real-time WebGL preview for any GLSL/ISF shader
Cloud
Hosted lab + VJ; browser-local IndexedDB edits; export/import JSON backup
Expose
One-click: turn magic numbers into ISF sliders for Wire
Fix chain
Broken shader? Regex → Ollama → AI (desktop); pattern fixes on cloud
VJ deck
A/B crossfader, carousel thumbnails, touch layout, MIDI/OSC, Auto VJ
Splash QR
Startup screen: scan VJ collaboration + audience stream before index loads
WebXR VR
Quest/headset: audience dome stream or VJ controller with immersive HUD
Gig sessions
Salted tokens; stream QR (view) + optional audience touch X/Y; co-VJ link
Multiplayer
WebSocket sync: crossfader, clips, mix across browsers on one session
Bridge agent
Pi/LAN Node agent: Ableton Link clock into the cloud session
Wire export
Desktop: Pipeline + Wire Hub, push .wire with params; cloud: Clipboard to Wire
OBS stream
Desktop: MJPEG at /api/output/macrocam/stream, Spout/NDI
Self-host
Docker Compose, GHCR images, nginx lanes — full repo on GitHub
Library
2000+ shaders: tags, sets, emoji badges, search, gallery grid

Screenshots

Live screenshots of the desktop UI. See the Demo loops section above for procedural feature loops.

Full UI
Context menu
Grid view
Emoji picker

Help, Keyboard Shortcuts & Feature Reference

A comprehensive tour. Mirrors the in-app Help modal (Settings » ? Help button).

1. Getting started

1.Click a shader in the index list (left panel) to preview it.
2.Use the view tabs (Preview / Code / Split / VJ / Gallery; Pipeline / Wire on desktop only).
3.Adjust parameter sliders in the right panel.
4.Click Save (or Ctrl+S) to persist. On cloud, saves go to IndexedDB in this browser; on desktop, writes disk + optional git commit.

2. View tabs

PreviewLive WebGL render of the current shader. Right-click for output options (Spout/NDI on Windows, browser fallbacks elsewhere).
CodeGLSL editor with syntax highlighting, gold dashed underlines on exposable literals (sweet spots), Ctrl+Z undo.
SplitSide-by-side or stacked code + preview (configurable in Settings → Default View).
VJA/B deck mixer: Decks A and B with crossfader, mix modes (Crossfade / Alpha Layer / Add / Multiply), Auto VJ cycling, MIDI/OSC, pop-out output.
GalleryLive grid of every cell running its own shader. 1, 4, 8, 14, 24-cell layouts. Full keyboard navigation.
PipelineDesktop only. Signal-flow diagram: shader source → backend → renderer → ISF → Wire export. Hidden on macroverse.aday.net.au cloud.
Wire HubDesktop only. Check ISF Wire, Clipboard to Wire, push to Wire, batch export. Hidden on cloud hosts.

3. Top app bar

Logo (M42)Opens Settings panel.
Shader nameCurrent loaded shader. A copper dot appears when there are unsaved changes.
View dropdownMirrors the .view-tabs strip - useful when the strip is hidden on phone.
Last buildBuild date + git short-SHA from /api/version. Hidden under 900px.
Save (disk)Saves current shader; flashes when dirty.
Palette (>_)Opens the command palette. Same as Ctrl+K.
HamburgerOpens the More sheet (mobile) or Settings (desktop fallback).
VJ session chipTap VJ in the top bar for session name, collaboration QR, and copy link (controlToken). Audience stream QR also on startup splash, VJ output, and Settings.

4. Mobile bottom tab bar

Visible automatically on viewports under 640px. Five fixed tabs:

LibraryToggles the left dock (shader index).
PreviewSwitches to Preview view (or Split if currently in Code).
CodeSwitches to Code view, closes side docks.
ParamsToggles the right dock (parameter sliders).
MoreOpens the More sheet: VJ deck, Gallery, Split view, Commands, Settings, Help. Pipeline / Wire Hub listed on desktop only (hidden on cloud).

5. Command palette

OpenCtrl+K or Cmd+K — toggles the palette open/closed.
Quick open/ when no input is focused (Slack/Discord style).
NavigateUp / Down to move, Home / End for first/last.
RunEnter to execute selected command.
CloseEsc or click outside.
CategoriesEditor · Parameters · Wire · External · View · App · Display effects · Panels.

6. Gallery shortcuts

Gallery
— navigate between cells
Gallery
Alt+← / Alt+→ — previous / next page
Gallery
19 — toggle preset tag (same key removes it)
Gallery
Shift+1Shift+9 — toggle preset VJ Set
Gallery
A — set-toggle prompt (all sets + membership)
Gallery
F — toggle favourite
Gallery
R — rename focused shader
Gallery
? — show / hide shortcut HUD
Gallery
Space — toggle auto-advance
Export
Export ▾ menu: CSV · JSON · paths (.txt — load directly into Resolume Avenue)

7. Preset VJ Sets (Shift+1Shift+9)

1
vj-ambient
2
vj-techno
3
vj-cosmic
4
vj-glitch
5
vj-geometric
6
vj-organic
7
vj-wire-ready
8
vj-dark
9
vj-colour

Hit Seed VJ Sets in Gallery to auto-assign shaders to all 9 sets by name/format heuristics.

8. Common actions

Preview shaderClick it in the list, or drag and drop on the preview / code area.
SearchType in the filter box: name, tags, category, format.
RenameDouble-click name, or right-click → Rename.
Move categoryRight-click → Move to category.
Add tagsClick + next to tags, or right-click → Edit tags.
Trash / restoreRight-click → Move to trash. Show/hide trash via the trash badge.
Mark deadAuto-fix gives up → tagged DEAD. Show/hide via the dead badge.
SetsManage sets, filter by set, rename / remove via the Sets menu.
List viewsList · Compact · Grid (with thumbnail previews).
Version historyRight-click → See versions → click any to revert.

9. Expose parameters & Wire export

Expose (instant)Click Expose in the code toolbar. Regex-based literal detection. Local-first, zero tokens, zero latency.
Search paramsClick Search. Popover lists every literal + named value. Click Expose next to any to make it a slider.
Sweet spotsGold dashed underlines in the code = exposable values. Right-click one to expose just that literal.
Refactor (AI)Refactor button: deeper LLM-based discovery and structural improvements via Ollama or Cursor.
Visual modify (Vibe)Vibe sends screenshot + your description to the AI agent (Cursor or GitHub Copilot variant).
Format writtenuniform float name; // @expose min max — emitted into the ISF JSON block as well.
Check ISF WireValidates ISF block compatibility with Resolume Wire (params, sampler2D handling).
Clipboard to WireCopies the ISF (with INPUTS array, useFrameIndex toggle, fps, timeScale, mouseX/Y) to the system clipboard for paste into Wire.
Texture handlingsampler2D uniforms become ISF image INPUTS; texture2D() rewritten to IMG_NORM_PIXEL().

10. Vibe Station (create new shaders)

Modify currentScreenshot + your prompt → AI rewrites the active shader.
Create newPick a name, choose a genre, optionally describe the vision. Click Create.
GenresParticles · Fractal · 3D Sphere / Cube / Torus (raymarched SDFs) · Tunnel · Kaleidoscope · Audio · Gradient.
3D objects3D genres scaffold a real raymarcher with SDF helpers in a single fragment shader.

11. VJ deck

OpenClick the VJ tab.
Startup QRsLoading splash shows VJ collaboration and Audience stream QRs while the index loads. Tap splash to dismiss.
Shader carouselHorizontal thumbnail strip above Deck A/B. Filter, scroll, tap A or B to load, or drag a card onto a deck.
LayoutSingle-viewport: decks + crossfader + master preview + controls. Drag row resizers (double-click to reset). Touch-friendly on Steam Deck / phone / tablet.
Decks A and BLoad different shaders, tweak params independently, Prev/Next through the library.
CrossfaderSmooth blend between decks. Mappable to MIDI fader / OSC.
Mix modesCrossfade · Alpha Layer · Add · Multiply.
Auto VJAuto-cycles shaders with configurable timing. Independent toggles for shader swap vs depth/param motion when Auto VJ is on.
FFT A/BAudio FFT on each deck independently.
OSC A/BOSC routing per deck.
AKAI/APC MIDIVJ tab → MIDI → APC40 / Akai. Grid and scene buttons load Deck A; hold Shift and press grid/scene to load Deck B. Track knobs control Deck A params, Device knobs control Deck B params, faders follow Shift, CC14 is the crossfader, and page/bank controls move Deck A/B pages.
Pop-out outputOpen VJ output in its own window for full-screen on a second display. Uses BroadcastChannel for low-latency sync.
Text templatesBuilt-in neon, dotmatrix, LCD, 16-segment text overlays.
Mouse XY padDrag in the preview to drive mouseX/Y uniforms.
Gig session (optional)Settings → VJ Show Session ID → Apply. Salted viewToken / controlToken URLs so guessing a session name cannot hijack the show.
Audience stream QRVJ deck → show QR on output. Encodes vj-output.html with viewToken (SSE stream). Watch-only unless Audience participation is enabled — then phones can touch/drag the preview to send mouseX / mouseY only.
Audience participationVJ deck QR panel checkbox. Restrictive: touch X/Y on the stream preview feeds the host shader mouse uniforms. No crossfader, clips, or params.
Co-VJ join QRTop bar VJ chip → collaboration QR / copy link with controlToken. Full VJ desk: WebSocket syncs crossfader, clips, mix mode, and deck params across browsers.
VR audience linkVJ deck QR panel → Copy VR audience. Opens vj-vr.html with viewToken. Immersive dome (default) or mode=screen. SSE mix stream; optional mouse X/Y when participation is on.
VR VJ controllerVJ deck QR panel → Copy VR VJ. role=vj + controlToken + viewToken. WebSocket remote desk + live shader push; WebXR enter/exit keeps host outputs running.
Pi / OBS outputOpen vj-output.html?remote=1 on a Pi HDMI display or OBS Browser Source. Same signed stream URL as the burned-in QR. On macroverse-private, stream URLs require the same basic auth as the main app.

12. LAN bridge agent

PurposeRun on a Pi or LAN box at the venue. Bridges Ableton Link (BPM/beat/bar) from the local subnet into the cloud Macroverse WebSocket session so all browsers share the same clock.
SetupPOST /api/bridge/token → config in ~/.macroverse/bridge.jsonmacroverse-bridge-agent/ (npm start). See docs/BRIDGE.md.
OSCCapability advertised; LAN OSC relay is planned. Use in-browser OSC Listen on desktop Macroverse, or MIDI on cloud.
ArtBastardPair a second bridge on the same Pi with a different session ID for DMX (see ArtBastard repo DOCS/BRIDGE.md).

13. Roliblock (multi-device, BLE / USB)

Multi-deviceN simultaneous Roli Lightpad blocks, each with independent MIDI in/out, handshake, LED buffer, and per-device settings.
USB auto-rigRequest MIDI auto-detects Roli USB touch/LED pairs, enables them, and defaults to Shared output / Mirror so every enabled block shows the master VJ output.
Deck assignPer-device: shared / deckA / deckB / auto. Shared is the default; Deck A/B is available when you want independent deck pads.
Deck A/B XYIn Independent mode, a block assigned to deckA drives Deck A mouse/XY, and a block assigned to deckB drives Deck B mouse/XY. Shared output mode drives the global VJ mouse from every enabled block.
BLE MIDIWeb Bluetooth pairing. Device A can be BLE while Device B is USB. 250ms handshake / 80ms LED stream on BLE; 150ms / 50ms on USB. SysEx chunked for BLE MTU.
LED filtersPer-device contrast, brightness, saturation, gamma, grayscale, invert, posterize, channel isolation.
LED drawingLED output samples the shader/output canvas and streams frames to each enabled block after MIDI output handshake. Modes include Shared output / Mirror, independent per-deck output, linked XY, and stretched 30x15 split across two blocks.
Stretched modeSample 30x15 from the output canvas, split left/right to two devices for a wide LED display.
Debug pageDual-device debug with independent shaders, mouse XY pads, WebGL preview, and per-device LED stream. Library cycling: Prev / Next / Random / Auto.
View modesA Only · B Only · Both (default) · Combined (30x15 side-by-side LED preview).
Background renderLED streaming continues when the browser tab is hidden (setInterval fallback).

14. External controls

OSC ListenRight panel → OSC → set port, click Listen. Send UDP messages to /shader/<paramName>.
MIDI LearnRight panel → MIDI → Enable. Click Learn next to any param, then move a CC knob.
VJ MIDI templateVJ tab or Settings → MIDI / OSC - VJ controller. APC40 / Akai loads the default performance map; Custom keeps learned mappings.
Audio FFTRight panel → Audio → Start. Map frequency bands (Sub-Brilliance) to params.
Texture inputsRight panel → Texture inputs → Add sampler2DWebcam or Image.
Webcam inputRight panel → Texture inputs → Webcam. Resolume Avenue / OBS can chain to this.

15. Output & streaming

Desktop / self-host only for Spout, NDI, and MacroCam MJPEG. Cloud VJ uses browser pop-out and vj-output.html SSE stream.

# MJPEG stream (MacroCam) for OBS Browser Source:
http://localhost:8765/api/output/macrocam/stream

# Linux virtual webcam (requires v4l2loopback):
ffmpeg -i http://localhost:8765/api/output/macrocam/stream -f v4l2 /dev/video0

# Spout / NDI: right-click the preview canvas (Windows / where supported)

16. Display effects

ScanlinesScan in status bar (or effects.scanlines in palette). Horizontal scan-line overlay on preview.
VignetteVignette in status bar. Darkens preview corners.
CRT codeCRT in status bar. Phosphor glow on the code editor.
Full screenFull Screen in status bar, or F11.
ThemeSettings → HSV sliders for full theme customisation. Light theme preset available.

17. Update button

Desktop only — hidden on cloud hosts.

Background check5 seconds after launch the app silently runs git fetch + git log HEAD..origin/HEAD.
IndicatorIf the remote is ahead, the toolbar Update button turns amber and shows Update (N).
Apply & RestartClick Update → modal lists incoming commits → Apply & Restart writes a temp script that runs git pull origin + build.bat / build.sh, launches the new binary, and exits the current process.
Cross-platformWindows uses build.bat, Linux/macOS uses build.sh. Gracefully no-ops outside a git repo.

18. Settings reference

Browser-local editsCloud: Settings → export/import JSON backup of IndexedDB overrides (tags, code edits, favorites). Clear local store to revert to server library.
Source pathsDesktop: Add / remove folders to scan. Default: shaders/ next to the binary.
LLM Provider ChainLocal regex → Ollama → Cursor. Enable / disable / reorder per provider. Per-provider model + endpoint config.
Hard Reset (git)Zips the configured target folder, then restores it from the first git commit on main. Target path configurable in Settings → Hard Reset Path. Always creates a timestamped .zip backup first.
NUKEBACKUP the index → CLEAR all DB tables → RESCAN every source path. Files on disk untouched.
READONLY / cloudHosted lanes set MACROVERSE_HOST_MODE=cloud. Server writes blocked; local browser store enabled. Pipeline / Wire / video output / shell agents disabled in UI.
DEMO_BANNERSet DEMO_BANNER=true for the persistent orange "Read-only demo instance" banner.
Default viewPreview / Code / Split V / Split H / VJ. Persists across sessions.
Mobile / DesktopStatus-bar toggle to force-mobile CSS on any device. Persisted to localStorage.
Graveyard logunrecoverable-shaders.json next to macroverse.db. Path shown in Settings.

19. Master keyboard shortcuts

Ctrl+SSave shader (auto git-commit if enabled)
Ctrl+ZUndo in editor
Ctrl+K / Cmd+KToggle command palette
/Open command palette (when no input focused)
F11Toggle full screen
?Show / hide Gallery shortcut HUD (in Gallery)
Gallery navigation
Alt+← / Alt+→Gallery: previous / next page
19Gallery: toggle preset tag
Shift+1Shift+9Gallery: toggle preset VJ Set
AGallery: set-toggle prompt
FGallery: toggle favourite
RGallery: rename focused shader
SpaceGallery: toggle auto-advance
Right-click previewOutput options (Spout / NDI on Windows)
Right-click codeAI actions (Explain, Enhance, Refactor, Generate)
Right-click shaderRename / Move / Tags / Trash / Versions
Drag & dropDrag a shader from the list onto the preview or code area to load it
~ / `Showcase only: open the GLSL Lab on this page
Triple-click titleShowcase only: open the GLSL Lab
Live macroverse.aday.net.au — cloud edition (public library)
Private macroverse-private.aday.net.au — full library; basic auth on all paths
Source github.com/aday1/macroverse.aday.net.au — Docker Compose, bridge agent, CI images

// live runtimes above — back to top