Open source from Noise Factor · more projects
Run Noisemaker programs on the GPU from C++ and C.
This library is under construction. Nothing here is ready to use yet.
Noisemaker is a procedural visual engine. You write short text programs, chains of effects, and it renders live, animated GPU textures:
search synth, filter
noise(scaleX: 60).bloom().write(o0)
render(o0)
That language is Noisemaker's DSL. The original engine runs in the browser at noisedeck.app.
libnoisemaker is a native C++ library, with a C API, that runs Noisemaker
programs on the GPU through Dawn. It tracks Noisemaker 1.0.288,
the version locked in parity/reference.json.
CMake 3.22 or later, a C++20 compiler, Python 3.12 or later, Node.js 26, Git and Ninja (or Visual Studio 2026 on Windows).
python3 tools/fetch_dawn.py
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failureTo build only the GPU-free compiler core and host helpers, with no Dawn tree, configure with
-DNM_BUILD_GPU=OFF and skip fetch_dawn.py.
To build Dawn once and reuse it in any number of build directories, install it with
tools/build_dawn.py and configure with NM_DAWN_PREBUILT_DIR. CI caches one such install per
platform.
python3 tools/fetch_dawn.py
python3 tools/build_dawn.py --generator Ninja --prefix .cache/dawn-install/local
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DNM_DAWN_PREBUILT_DIR=$PWD/.cache/dawn-install/local-DNM_BUILD_SHARED=ON builds noisemaker_core as a shared library that exports only the C API
(include/noisemaker/core.h) and the C++ API (core.hpp, value.hpp). Install it and find it as a
package:
cmake -S . -B build-shared -G Ninja -DCMAKE_BUILD_TYPE=Release -DNM_BUILD_GPU=OFF -DNM_BUILD_SHARED=ON
cmake --build build-shared
cmake --install build-shared --prefix /path/to/prefixfind_package(noisemaker CONFIG REQUIRED COMPONENTS core)
target_link_libraries(app PRIVATE noisemaker::core)The installed headers need C++17. The C++ API passes standard-library types across the library
boundary, so a C++ consumer must use the same compiler and standard library as the build.
share/noisemaker/TOOLCHAIN names them, and share/noisemaker/ENGINE names the Noisemaker release
the embedded catalog comes from.
Releases are published by the Release workflow: one archive per platform (Linux x64 and arm64,
macOS universal for 13.0 and later, Windows x64 and arm64) and a SHA256SUMS file.
scripts/test builds the GPU-free tree, runs its unit tests and the tool tests, then runs every
parity gate (scripts/gates) against the reference engine at the commit locked in
parity/reference.json. It needs network access to clone the reference and fetch the catalog.
Contributions follow the Noise Factor contributing policy and Code of Conduct.
include/noisemaker/ public C API headers
src/core/ GPU-free core: DSL lexer, parser and compiler, render graph, effect catalog, editing
src/host/ host inputs: audio and MIDI state, OBJ parsing, stroke raster, worm tracer
src/gpu/ Dawn device and the backend's device on it; wgsl/ and backend/, the reference
WebGPU backend and pipeline over a device interface, with their WGSL analysis
and uniform packing (gated with no GPU)
src/capi/ C API implementation
tests/ C API, core, GPU, host and tool tests
parity/ reference lock, corpus and checks against the reference engine
scripts/ test, gate and reference entry points
tools/ Dawn fetch and build, catalog tools, reference oracles, dump tools and nm-render
cmake/, third_party/ Dawn build integration and its lock
MIT (see LICENSE). Dawn and its dependencies carry their own licenses (BSD-3-Clause, Apache-2.0, MIT). Use of the Noisemaker and Noise Factor names in derivative products is subject to the Trademark Policy.
Copyright © 2026 Noise Factor LLC
