naprava

audio visual value engine by naprave

One realtime graph for media, values and light.

inputs

OSCRESTvalue portssensorsmedia

everything enters the same graph

core

componentsstreamsroutingmathscripts

lean C++20 · 100 Hz tick · 60 fps video

outputs

screensaudioDMXArt-NetOSC

everything leaves the same graph

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 ports

Connect 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.

−100%+1:1
patch: themes.json9 nodes · 7 links · lua tick 100 Hz

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.

01intro.mkvvideo
02drums.wavaudio
03loop_a.mkvvideo
04bass.wavaudio
05grain.pngimage
06outro.mkvvideo
preview · C-4 · pitched
root C-4 gain 1.00 trim 0.00–12.4s loop on
Z S X D C V G B H N J M

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.

0100
0201
0302
0401
0500
0603
03:12 total
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.

composite out · mesh mapped
single wall dome mesh
DMX mapper art-net · universe 0 · 60 Hz
width 3 repeat 10 stride 3 lua norm → byte
LED strip u0 · ch 1–30 · RGBW × 10
hsv1.out0..2
Reflector wash u0 · ch 31–34 · RGBW
preset1.out0..3
Moving heads u0 · ch 35–42 · pan / tilt
gen1.out0..1
Fog machine u0 · ch 43 · burst
trigger1
ch 143 channels

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) net

naprava 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