Open source shader engine
Noisemaker
Noisemaker is an open source shader engine for the browser. It provides more than 200 composable effects, the Polymorphic composition language, and a WebGL2 and WebGPU runtime under the MIT license.
- Free
- MIT license
- WebGL2 and WebGPU
- No build step
Overview
Noisemaker is the rendering engine behind Noisedeck and every other Noise Factor visual tool. It gives tool builders an open effect format, a composition language, and a runtime that renders the same program on WebGL2 or WebGPU.
Effects are data. Each effect declares its parameters, inputs, textures, passes, and shader programs, so tools and coding agents can inspect an effect before they run it. Compositions are readable code: a layer stack, a camera filter, or an audio visualizer fits in a short Polymorphic program.
Noisemaker loads from a CDN as an ES module and embeds in any page with no framework and no build step. The engine, the compiler, and the effects library are MIT licensed, and ports and adapters take it to other platforms.
Features
-
Effect contracts
Every effect declares its parameters, inputs, textures, passes, tags, and shader programs in a structured definition.
-
Polymorphic composition language
Compact, declarative programs compile to a GPU render graph. Programs can group effects into subchains and route through explicit buffers.
-
More than 200 effects
Generators, filters, mixers, point and particle systems, 3D volumes, and render utilities.
-
Two backends
Every effect targets WebGL2 (GLSL) and WebGPU (WGSL).
-
Live inputs
Oscillators, MIDI, audio bands, media textures, images, text, meshes, and volume buffers enter through named contracts.
-
Program state API
Compile, unparse, list steps, replace compatible effects, and update parameters without treating source as opaque text.
-
Portable effects
Custom effects ship as Portable packages with a definition, help text, and GLSL and WGSL shaders.
-
Built for coding agents
Machine-readable documentation in llms.txt and llms-full.txt, and shade-mcp to compile, render, and compare backends from an agent.
-
Ports and adapters
Public ports and adapters for Three.js, Babylon.js, Cables.gl, Hydra, Blender, Godot, Unity, TouchDesigner, Qt, C++, Rust, Python, Ruby, Perl, and a CPU renderer.
Specifications
| Runtime | Browser ES module from https://shaders.noisedeck.app/1; no dependencies or build step |
|---|---|
| Rendering | WebGL2 (GLSL) and WebGPU (WGSL) |
| Effects | Over 200 effects across filters, synths, classic Noisedeck effects, mixers, render utilities, point systems, and 3D effects |
| Language | Polymorphic DSL |
| Effect format | Portable Effects Format |
| Other platforms | Ports and adapters in separate public repositories; each documents its own coverage |
| Source | github.com/noisefactorllc/noisemaker |
| License | MIT. Use of the name in derivative products follows the trademark policy. |
| Price | Free |
Get started
- Try effects in the shader demo.
- Import the engine:
await import('https://shaders.noisedeck.app/1/noisemaker-shaders-core.esm.min.js'). - Follow the integration guide to render a program into a canvas.
- For coding agents, start with llms.txt.
Resources
- Shader demo
- Documentation
- Integration guide
- Shader specifications
- Source code
- Ports, adapters, and live demos
- shade-mcp: MCP server for coding agents
- llms.txt: machine-readable index
- Noisemaker: a shader effects pipeline for the open web
- Noisemaker adapters
Questions
- What license is Noisemaker under?
- The MIT license. You can use it in commercial and non-commercial projects. Use of the Noisemaker name in derivative products follows the trademark policy.
- Does Noisemaker need a build step?
- No. Import the ES module bundle from the CDN and render into a canvas. It needs no framework and no dependencies.
- Which GPU APIs does Noisemaker support?
- WebGL2 and WebGPU. Every effect ships GLSL and WGSL shaders.
- Can I use Noisemaker outside the browser?
- Yes. Public ports and adapters cover Three.js, Babylon.js, Cables.gl, Hydra, Blender, Godot, Unity, TouchDesigner, Qt, C++, Rust, Python, Ruby, and Perl. Each port documents its own coverage.