the program
One graph for everything
Sources, effects, values, parameters, screens, speakers and lights are all components. Patch them in one live graph and the core streams media and values through it in realtime.
the patch is the show · live graph
drag to pan · wheel to zoom · lua tick · value portsConnect media players, screens, components, generators, triggers, eases, parameters and presets: drag from an out port to an in port, click a wire to remove it. Value ports carry numbers through Lua and out to OSC, DMX and the state bus. Every component runs its own Lua tick: read inputs with param(), write outputs with setparam(), reach the whole state tree with np.get / np.set, fire on trigger pulses and ease any port. Patch routing like Pure Data or Isadora.
one patch saves graph, media, tracker, mixer, output and DMX · value ports reach OSC, HTTP and the state tree
general core
A general core, built for realtime
Not a fixed player. A C++20 runtime where components, data streams, routing, amplification, math and scripts share one tick and one state tree.
Every value is a path
Components, parameters, media players, mixer strips and output maps live in one state tree. Every value is addressable from the graph, HTTP, OSC or Lua without a translation layer.
Media stays live
Audio and video are decoded into memory and streamed through the graph. Loop, trim, pitch, gain, mix and route without an export step; changes land on the next tick.
One tick, many engines
A fixed control tick runs the graph while audio and video run on their own clocks. Video renders at up to 60 fps, DMX sends at 60 Hz, and the audio callback never waits for a browser frame.
Script the whole tree
Every component can run Lua: read pins with param(), write pins with setparam(), reach the state tree with np.get / np.set, react to triggers and ease any port.
100 Hz control tick · 60 fps video · 60 Hz Art-Net · 8–64 mixer channels · audio callback independent of render
media
Media in, manipulated live
Decode audio and video into RAM, loop, trim, pitch, gain, and feed them into the graph. No export step: media plays and changes live.
float PCM in RAM · shared slots across graph players · live loop, trim, pitch and gain
media slots · live preview
Load images, video and audio into shared slots. The selected slot becomes the keyboard instrument: play it pitched from its root note, set gain, trim and loop, and audition before it hits the graph.
arrangement · mix
F1 overview · song order and mixer
Set the order and mix channels with volume, pan, mute, solo, effects and output routing. Eight channels by default, up to sixty-four, with live meters from the core.
F2 tracker · patterns and arrangement
Sixteen channels of notes and events in the style of Impulse Tracker, with its keyboard conventions where they help.
F1 overview · F2 tracker · F3 graph · F4 media · F9 configuration · space play/pause · F5/F6/F8 transport
light
The same graph drives the room
Map graph values to LED strips, reflector washes, moving heads and fog machines, and map video onto any surface. One state tree, one patch, one output chain.
DMX and video output · F9 configuration
Map the output onto a single screen, a video wall, a dome or a mesh you drag by hand. Then map graph values to LED strips, reflector washes, moving heads and fog machines with the DMX buffer builder: width, repeat and stride fill whole fixture runs, with a live channel preview.
One mapping fills a whole fixture run: graph values become pixels, wash colours, mover positions and fog bursts.
Scriptable and addressable
A lighting desk, a sensor, a script or another machine can read and write any value in the core. No plugin to install, no second API to keep in sync.
graph value ports · HTTP · OSC · Art-Net · USB DMX · serial DMX
http / osc
curl 'http://core.local:8080/values/preset1/0/1' curl 'http://core.local:8080/values/generator1/gain/0.5' oscsend core.local 7777 /values/preset1/0 i 2
Presets, generators, components, media sources and effects expose the same value ports. Bind them in the graph or write them straight from a controller.
a patch is the whole traveller: graph, media, tracker, mixer, output and DMX
One seat, many machines
naprava-ui is a thin client. Each core owns its state, its media and its outputs; the ui sends paths and renders snapshots. Add a computer, add a core, and scale screens, channels or fixtures without rewriting the show.
front: naprava-ui one seat, any browser, the whole show on one screen · back: naprava-core mini pcs behind large displays and projections, one to three screens each · on the wire: /transport/play /mixer/1/vol /values/preset1/0 /dmx/status ws json + osc + art-net · drag to orbit, scroll to zoom
We build the room with you
The cluster above is not a demo setup, it is how naprava shows run. Our team designs, builds and supports multimedia installations on naprava, from first sketch to opening night.
media work, licensing and support · we answer personally
installations by naprave.net
Want a wall, a facade, a room that reacts? Our team designs, builds and supports multimedia installations on naprava.
Tell us about your space.
info (at) naprave (dot) netnaprava is coming soon
Leave your email and we'll write when it's ready. No spam, one mail, that's it.
we store your email and ip until launch, only to send you that one mail. nothing shared, no newsletters. write info (at) naprave (dot) net and we remove you.
Linux oriented · C++20 core · websocket UI · OSC + HTTP · Art-Net