> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nomn.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# Show Control

> Let a show computer turn parts on and off and move them between named places, over OSC or plain UDP

# Show Control

Show control lets another computer (a show controller, a lighting desk, a game engine, a script) drive RESERVOIR during a performance or an installation. The sender says which parts are playing and where each one is. Everything about how that happens (fade times, travel times, curves, samples) is set in RESERVOIR.

Show control is off until you turn it on. The show is saved with the session, and loading a preset does not change it.

Click **Show** in the console to open the **RESERVOIR Show** window. Its light in the console is a dim ring while show control is off, a filled disc while messages arrive, and a thick ring with **rej** after a message was refused. **Close** hides the window and the show keeps running.

**Save show\...** writes the whole show to a `.reservoirshow` file, so it can move to another machine. **Load show\...** reads one; a loaded show starts switched off.

## Network

* **Enabled** starts listening.
* **Protocol**: **OSC (over UDP)** or **UDP text grammar**.
* **Port**: 9000 by default.
* **Listen on**: **All interfaces**, or one network.
* **Send to** shows the address and port to type into the sending computer.
* **Sender** shows the last computer heard from.
* **Message log** lists every message with the reason it was accepted or rejected. Filter by **All**, **Received**, **Accepted** or **Rejected**, and use **Pause**, **Clear** and **Export...**. **Save daily log** writes one file per day to the **Log folder**.
* **Parse test** shows how a typed message would be read, and **Simulate** with **Inject** feeds it in as if it came from the network.

### OSC messages

| Address | Arguments | Effect |
| - | - | - |
| `/reservoir/state` | pairs of part and location | The full state. Every managed part listed plays at its location; every managed part not listed stops. An empty message stops them all. |
| `/reservoir/layer/<part>` | `on` \[location], `off`, or `move` location | Changes one part. |
| `/reservoir/master` | `on` or `off` | Fades the whole output in or out. |

A part is its number (from 1) or its name, and a location is its name. A part or location RESERVOIR does not know is ignored and logged.

Sending the same state again changes nothing, sample parts included (a sample plays only when it goes from absent to present), so a sender can repeat the full state every second to cover lost packets.

### UDP text grammar

For senders that cannot send OSC, set a keyword and two separators in **UDP grammar**. With keyword `STATE`, pair separator `,` and value separator `:`, the line `STATE 7:north-wall,12:center` means part 7 at north-wall and part 12 at center.

## Layers

Each row is a part. Turn on **mgd** (managed) for the parts the show may control; other parts stay under your hands. For each managed part set the fade-in time and curve, the fade-out time and curve, the travel time and curve between locations, and where it starts. **+ Add layer** adds a row, and **Reset from Density** rebuilds the list from the parts that are active now.

A part you mute by hand stays muted, whatever the show sends, until you release it.

## Locations

Named places in the room, each with **x**, **y** and **z** from 0 to 1, a **spread**, and a **gain** from -60 to +6 dB. Turn on **1ch** to send a location to a single output (**speaker**) instead of placing it between speakers. Place locations on the **Placement** map or type the values. **+ Add location** adds one. Locations taken from the current room are marked as such and follow it when the room changes.

## Automations

An automation runs a curve on one control when something happens inside RESERVOIR. **trigger** is one of layerOn, layerOff, masterOn, masterOff, sampleFired or stateArrived; **part** limits it to one part. **target** is the control (master gain, density center, density breath, or a part's level, send or position). **curve**, **sec**, **from** and **to** set its shape, length and range. **end** decides what happens after: **hold** keeps the last value, **return** goes back, **release** hands the control back to you.

## Curves

The curve library used by fades, travel and automations. Click to add a point, drag to move it, double-click to delete it, and right-click a segment to switch it between straight and smooth.

## Samples

A sample part plays audio files when the show names it. Each time it appears in a message after being absent it plays its next clip once, in list order (**seq**) or at random. In **matrix** mode each file channel goes to chosen outputs; in **location** mode the clip is placed at a named location. Set the polyphony, whether it stops when the part goes off, and the fade-out. Choose the **Media folder...** first; a clip marked **!** is missing and one marked **\~** sits outside that folder.

## Test

Turn show control on and off, load a built-in test show, and fire one-click triggers (**Master On**, **Master Off**, a part on, off or moved to a location, and all, odd or no parts on) without a sender.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.