LightScript Workshop is a TypeScript framework for creating custom lighting effects for SignalRGB โ the app that unifies control of your RGB keyboards, mice, headsets, and other PC peripherals.
Instead of being limited to SignalRGB's built-in effects, LightScript lets you write your own using WebGL shaders or Canvas 2D, with a modern development experience:
- ๐จ TypeScript decorators that automatically generate SignalRGB's control UI
- ๐ฅ Hot reloading so you see changes instantly as you code
- ๐ต Audio reactivity built-in โ sync your lights to music
- ๐ GPU-accelerated rendering via Three.js and WebGL
- ๐ฆ One command to build standalone HTML files that drop right into SignalRGB
Whether you want pulsing black holes, glitchy cyberpunk rain, or particle swarms that react to your music โ if you can imagine it, you can build it.
git clone https://github.com/hyperb1iss/lightscript-workshop.git
cd lightscript-workshop
pnpm install
pnpm devOpen localhost:4096 โ you'll see a live preview with controls. Pick an effect from the sidebar, tweak the sliders, and watch your creation in real-time.
LightScript ships with a collection of effects to use, remix, or learn from:
| Effect | What It Does |
|---|---|
| ๐ณ๏ธ Black Hole | Gravitational lensing with an accretion disk and Hawking radiation |
| ๐ Voronoi Flow | Cellular patterns morphing with fluid dynamics |
| โ๏ธ Quantum Foam | Planck-scale virtual particles popping in and out of existence |
| ๐ง๏ธ Cyber Descent | Cyberpunk matrix rainfall with scanline artifacts |
| ๐ฎ Kaleido Tunnel | Raymarched kaleidoscopic infinity tunnel |
| ๐ Glow Particles | Vibrant particle swarms with luminous trails |
| ๐ต Audio Pulse | Reactive rings that pulse to your music |
| ๐๏ธ Iris | Geometric audio visualizer with dynamic tessellation |
| ๐ง Neural Synapse Fire | Synaptic networks firing in cascading patterns |
| ๐ฏ ADHD Hyperfocus | Tunnel vision with dopamine-seeking sparkles |
Effects are TypeScript classes paired with GLSL fragment shaders. Decorators define the controls that appear in SignalRGB:
import { Effect, NumberControl, WebGLEffect, initializeEffect } from '@lightscript/core'
import fragmentShader from './fragment.glsl'
@Effect({ name: 'Neon Dreams', author: 'You' })
export class NeonDreams extends WebGLEffect<{ speed: number }> {
@NumberControl({ label: 'Speed', min: 1, max: 10, default: 5 })
speed!: number
constructor() {
super({ id: 'neon-dreams', name: 'Neon Dreams', fragmentShader })
}
// ... control value mapping and uniform updates
}
initializeEffect(() => new NeonDreams().initialize())The shader receives your control values as uniforms:
uniform float iTime;
uniform vec2 iResolution;
uniform float iSpeed;
void mainImage(out vec4 fragColor, vec2 fragCoord) {
vec2 uv = fragCoord / iResolution.xy;
float t = iTime * iSpeed;
vec3 col = 0.5 + 0.5 * cos(t + uv.xyx + vec3(0, 2, 4));
fragColor = vec4(col, 1.0);
}
void main() { mainImage(gl_FragColor, gl_FragCoord.xy); }Drop these files in src/effects/neon-dreams/ โ the framework auto-discovers them. No registration needed.
| Feature | Description | |
|---|---|---|
| ๐ฎ | WebGL + Canvas 2D | GPU-accelerated shaders or traditional Canvas drawing โ your choice |
| ๐๏ธ | Decorator Controls | @NumberControl, @BooleanControl, @ComboboxControl โ type-safe UI generation |
| ๐ฅ | Hot Reloading | Edit shader code, see it instantly. No refresh, no waiting. |
| ๐ต | Audio Reactive | Built-in FFT analysis with bass/mid/treble helpers and spectrum textures |
| ๐ค | AI-Native | Structured patterns that Claude, Cursor, and Copilot understand |
| ๐ฆ | Monorepo | @lightscript/core for the API, @lightscript/dev for tooling |
lightscript-workshop/
โโโ packages/
โ โโโ core/ # @lightscript/core โ Framework API
โ โโโ dev/ # @lightscript/dev โ Dev server & build tools
โโโ src/
โ โโโ effects/ # Your effects live here
โ โโโ shaders/ # Shared GLSL utilities (noise, colors, SDFs)
โโโ docs/ # VitePress documentation
โโโ dist/ # Built effects ready for SignalRGB
| Command | What It Does |
|---|---|
pnpm dev |
Start dev server with hot reload |
pnpm build:effects |
Build all effects to dist/ |
pnpm docs |
Preview documentation locally |
pnpm typecheck |
Run TypeScript type checking |
pnpm test |
Run test suite |
pnpm lint |
Lint with Biome |
Build your effect:
EFFECT=black-hole pnpm build:effectsCopy the generated HTML file to SignalRGB's effects folder:
- Windows:
~/Documents/WhirlwindFX/Effects/ - macOS:
~/Documents/SignalRGB/Effects/
Restart SignalRGB, find your effect under "Lighting Effects", and bask in the glow.
LightScript's consistent patterns make it ideal for AI-assisted development. Try this prompt:
Create a WebGL effect called "aurora-waves" that simulates northern lights. Add controls for speed (1-10), intensity (0-200), and a color palette dropdown. Reference
src/effects/black-hole/main.tsfor the pattern.
See CLAUDE.md for complete AI agent documentation and the patterns that make generation reliable.
Full documentation at hyperb1iss.github.io/lightscript-workshop
- ๐ Getting Started โ Installation and your first effect
- ๐ Reference โ Complete API documentation
- ๐ก Examples โ Code patterns and snippets
- ๐ฎ Playground โ Try effects in your browser
Got a wild effect idea? Performance optimization? Bug fix? Contributions welcome.
pnpm install && pnpm dev # Get running
# Make something awesome
pnpm test && pnpm lint # Make sure it's solidMIT License โ see LICENSE
Created by Stefanie Jane ๐
If your RGB setup has transcended, buy me a Monster Ultra Violet! โก๏ธ
