Ghost Arcade is an open-source projection-mapping & VJ tool. Real-time GLSL effects, WebGPU acceleration, MIDI control, mobile companion, and a Resolume-class mixer pipeline — all in one app.
It's a single product, free, and fully open source under AGPL-3.0. There are no Pro tiers, no paywalls, no watermarks.
importExternalTexture for true 4K60 with no encode/decode round-trip. Falls back to WebGL transparently.git clone https://github.com/riskcapital/ghost-arcade.git ghost-arcade
cd ghost-arcade
npm install
npm run desktop
This boots Vite + Electron + the in-process LAN WebSocket server (port 9001) so the mobile companion can connect.
npm start
Then open http://localhost:1420.
npm run build:desktop # Windows installer
npm run build:desktop:mac # macOS .dmg
┌──────────────────────────────────────────────────────────────────┐
│ Editor (Svelte 5 + Vite) │
│ ├── Layer pipeline → effect chain → mesh warp → composite │
│ ├── WebGL2 / WebGPU renderer (renderer/engine.ts) │
│ └── ISF shader runtime, AnimationMixer, splat renderer │
└──────────────────┬───────────────────────────────────────────────┘
│ canvas.captureStream(60) + WebGPU bridge
┌──────────────────┴───────────────────────────────────────────────┐
│ Output Window (Electron BrowserWindow) │
│ ├── Zero-copy WebGPU presenter (default) │
│ ├── WebRTC fallback │
│ └── Spout sender (Windows native addon) │
└──────────────────────────────────────────────────────────────────┘
│ same-LAN WebSocket (port 9001)
┌──────────────────┴───────────────────────────────────────────────┐
│ Mobile Companion (same Svelte app, mobile route) │
│ └── Mapping warps, VJ clip launcher, freeze/play, macros │
└──────────────────────────────────────────────────────────────────┘
Key directories:
src/lib/components/ — UI panels (LayerPanel, MediaTray, EffectPickerModal, VJModePanel, MobileApp…).src/lib/renderer/ — WebGL2 / WebGPU engine, effect shaders, post-process passes.src/lib/effects/ — effect catalog, parameter metadata, presets.src/lib/stores/ — Svelte stores for layers, settings, vjClipLauncher, mediaLibrary, etc.src/lib/isf/ — ISF parser + thumbnail generator.electron/ — Electron main process, native dialogs, Spout bridge.server/ws-server.js — LAN WebSocket + HTTP server for mobile companion.public/ISF/ — built-in shader manifest + .fs files.Pull requests welcome. Please:
git commit -s (DCO).npm run check (svelte-check) before submitting.CHANGELOG.md describing user-visible changes.src/lib/effects/effectUX.ts, a catalog entry in effectCatalog.ts, and ParamMeta with sensible min/max/step defaults.By contributing, you agree your contributions are licensed under AGPL-3.0.
Ghost Arcade is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only). See LICENSE for the full text.
In short:
Output you create with Ghost Arcade (videos, livestreams, recordings) is yours and is not subject to AGPL.
Built on the shoulders of giants:
Logo design + visual identity: Risk Capital Media LLC.