Appearance
Multi-Client (Multi-PC) Setup
One Exaplay PC — the master — runs the show, and any number of client PCs render parts of it on their own outputs, in step with the master. You build and run everything on the master; the clients follow. This is how a panorama wider than one graphics card, a multi-room installation or a rig with a hot standby is built.
Walkthrough
☰ menu → Walkthroughs → Outputs & projection → Assigning outputs to screens shows a two-machine rig on the Stage, recorded from the real application.
Quick setup — step by step
Walkthrough
☰ menu → Walkthroughs → Multi-client → Adding a client machine switches Multi-Client on, pairs a second machine from the Network tab and gives its projector a slice of the screen.
- Network. Put every PC on the same subnet, start Exaplay on each, and open the ports in Windows Firewall on every machine.
- Switch multi-client on — on the master. ☰ menu → Settings → Communication → Enable Multiclient. It is an early-access feature, so the switch asks for a passkey (contact VIOSO if you do not have one). Until it is on, the NETWORK tab says so and offers Open Settings → Communication.
- Find the machines. Open the NETWORK tab on the master. The other Exaplay machines appear in the list on the left within a few seconds. A machine on another subnet, or behind a switch that blocks broadcast, is added with + (Add machine by IP) at the top of that list.
- Make this machine the master. Select it (it is marked this machine) and set Role → Master in the inspector on the right.
- Make each render PC a client. Select it, set Role → Client and confirm. The pairing also writes the settings both machines must agree on (Pairing a client). Give each machine a Label — "Stage Left", "Rack 2" — so you can tell them apart.
- Assign the outputs. On the master's STAGE tab, open a screen (the arrow under its card): every client is a PC under it, with its outputs above it. Assign them to screens just like local ones — drag an output onto the screen (Outputs on several machines).
- Save the show. Saving sends the show file and the media each client needs to the clients and loads it there — you do not have to press anything else (What reaches the clients). Copy files is only for a deliberate full push.
- Check. Each client row in the NETWORK tab should read in sync, and the rig overview should show a solid line from the master to every client. Put the show on the wall with SHOW ON in the header — on a fleet it switches every machine.
Roles and the fleet
| Role | What it does |
|---|---|
| Standalone | An ordinary single machine. Not part of any fleet, neither commands nor follows. The default. |
| Master | The machine you work on. Drives playback, file sync, show mode and roles on its clients. A master always has multi-client switched on. |
| Client | Renders its share of the master's show on its own outputs. Its own interface is read-only. |
| Backup | A client with Backup Machine switched on: kept fully in sync but dark, ready to take over — see Main / Backup Failover. |
The fleet ID is the rig's identity. The master receives one the first time it becomes the master (shown as Fleet ID in its inspector), and every client it pairs stores the same ID. A master only drives clients carrying its ID, so two rigs on one network cannot drive each other's machines. A client paired to a different master is marked other fleet — see Pairing a client.
A machine's role is set only from the master's NETWORK tab — select the machine, then Role. A confirmation says what will change, because changing a role mid-show is disruptive. Settings → System has no role setting: a role set there could not pair the machine (fleet ID and the shared OSC settings), so it lives where the pairing is.
Leave the fleet: choose Standalone as the machine's role on the master, or press Return to Standalone in the client's own banner.
Make a backup: switch on Backup Machine in that machine's own Settings → Communication, and pair it as a Client — see Main / Backup Failover.
A client needs a master. Choosing Client for another machine while this machine is still standalone and no other machine is a master offers Make master & pair client, which does both in one step.
If another machine already is the master, set the roles from that machine's interface — a second master is never offered.
Client machines without any master stay dark. The NETWORK tab says so (… has the client role, but no machine is the master) and offers Make this machine the master.
Pairing a client
When you make a machine a client, the master writes into it everything the two must share:
- the master's fleet ID;
- multi-client switched on on the client (a client with it off sends no heartbeat and ignores every live command, although it still shows up in the list);
- the master's OSC Prefix;
- the port the master streams the playhead to, written into the client's OSC Listen line (any network address you bound there is kept).
A machine that is already set up correctly is not written to.
If one of these later goes out of line — someone changed the client's OSC settings by hand, say — the client's Playback line in its inspector names the one setting that differs and offers the fix as a button (Enable multi-client or Align settings).
Moving a client from another rig. A machine paired to a different master shows other fleet in the list, and its inspector's Fleet line reads other fleet (…). Press Pair into this fleet (or click the other fleet badge) on the master it should follow. The old master's project still lists the machine as offline until you remove it there.
Client Mode
What a client looks like on its own screen:
- A banner at the top reads Client Mode — Read Only and says which master it follows (following STAGE-MASTER), waiting for its playback stream, or no master found on this network when nothing drives it.
- Saving, loading, timeline and output editing, Settings and the NETWORK tab are not available, and with it the Sync button. The client does not need its own
.vpp— it receives the master's. - Unlock GUI (in the banner, confirmed) makes the interface usable for on-site work while the machine stays a client. The master keeps managing it, so local changes can be overwritten by the next sync. The banner shrinks to a small pill with Lock GUI; reloading the page locks it again.
- Return to Standalone (in the banner, confirmed) takes the machine out of the fleet. You can also change its role from the master.
Reading the NETWORK tab
The tab has three columns: the machines on the left, the rig in the middle, the selected machine on the right. The machine list's heading shows how many machines Exaplay knows and how many other machines are online.
The machine list (left)
One row per machine: a status dot, the name with its role, one state word and the IP address. The state word answers "is this machine all right?":
| State | Meaning |
|---|---|
| this machine | The machine this browser is connected to (its role is the badge beside the name) |
| in sync | A client following the master within 40 ms |
| drifting | A client whose playhead is behind or ahead — the sync loop is correcting it |
| (no word, green dot) | Online: reachable, but nothing has been measured yet — not a fault |
| copying… | A sync is transferring files to it |
| behind / not keeping up | The client renders below its frame rate (overloaded decode, GPU or disk) — it still takes commands |
| lost | The master cannot reach it or hears no heartbeat; hover the word for the measurement behind it |
| still on the old show | The last sync failed for this machine — it is still running the previous show |
| paired to another master | It belongs to a different fleet |
| checking role… | The machine has not answered yet |
| offline | Not reachable. It stays in the list (remembered by this browser) so you can start it again |
Standalone machines are folded under Standalone below the fleet. The header of the list carries Refresh and + (Add machine by IP). Nothing inside a row is a control — click the row to select the machine.
The rig (middle)
- Rig overview — the master on top, its clients on one bus below it, each box with name, role and IP (and Identifying · Stop while that machine is identifying). A solid wire means the client follows the master's playback; dashed means it does not, and a red wire means it cannot hear the master at all. Hover a wire for the reason. Standalone machines sit in a Not in the fleet row.
- Sync health, File Sync, Software updates, Playback Sync and Decoding — the master's rig-wide panels, described below (Decoding: Each machine decodes only what it shows). They are shown while the master is selected (the tab selects it when you open it). Selecting a client puts them away and leaves one line in their place; if any of them has a problem, that line names it, and clicking it brings the master back.
A panel's per-client list is folded away by default, but a panel with a problem opens itself — folding never hides a fault.
The selected machine (right)
The header shows the machine's name — its Label, which you edit right there — and its IP (role, port and version on hover), plus icon buttons to open that machine's Exaplay interface, its Exaplay Service page, and to re-read its settings. Problems are shown first and never folded: ⚠ Service unreachable, a version different from the master's, a graphics driver different from the master's (same GPU vendor only — NVIDIA shows its own release number, e.g. 566.14), or ⚠ Display setup changed (with Re-check and Refresh…). Below, the blocks:
- Machine — its address and version, Windows identify (the Identify button), Volume — this machine's master volume, which stays per machine and is never pushed from the master —, Role, the master's Fleet ID, and Start Exaplay / Restart Exaplay / Forget this machine (Managing machines remotely).
- Show sync (clients only) — whether it is paired, the Playback sync switch that includes or excludes this client, whether it receives the playback stream, its files, the show it has loaded, whether its outputs are live, and its Sync figure. A line that names a problem says on hover what to do.
- Hardware — set once when the machine is commissioned, each block folded: Sync folder, GPU & video decoding (which also names the graphics driver of every GPU), PIN lock, Host & network, Windows displays, Output EDID, Frame lock and VIOSO Cloud Platform. Most of them need the machine's Exaplay Service; the ones a machine cannot use right now are hidden, with one line saying how many and why (for example 4 sections hidden — Service offline).
Collapse the column with the chevron at its bottom; Show Inspector brings it back. Short lines whose cursor turns into a question mark carry the detail on hover.
What reaches the clients, and how
There is no Edit or Play mode: while multi-client is on, everything you change on the master reaches its clients.
| You change … | It reaches the clients … |
|---|---|
| A value — opacity, volume, fades, loop, crop, position, size, effects, generator parameters, a fader on a User Panel or the Control tab | Live, while you drag, no save needed |
| The structure — add, move, delete or duplicate a clip, cue, track, group or composition; hide or show one | Live as well, within moments, as long as the client is running the same saved show as the master |
| Transport — play, pause, stop, seek, cues, composition switches | Live, through Playback Sync |
| Show mode, Blank, Identify, Outlines, the audio mute | Live — see Show mode, Blank, Identify and Outlines; the mute is the show's and reaches every machine, each machine's master volume stays its own |
| An Input — touch, sensor, tracker | Its actions (a cue, play, a command) fire on the master only and reach the clients as transport. Its values are applied by each machine from the input that reaches it — see Inputs in a multi-client show |
| Media files and the show file | By file sync, when nothing is playing |
| Startup settings (autostart show, UI window) | When the master's settings are saved — see Powering on the whole rig |
On a master the show file saves itself a moment after a structural edit, as long as the show has been saved once under a name. That save is what makes the edits permanent on the clients and lets a rebooted client come back on the current show. An untitled show cannot be followed by the clients: save it once.
New Project on the master empties the clients as well.
When a client is not running the master's current show (it was offline, standalone for a while, or a sync failed), live edits of clips it does not have cannot reach it. The File Sync status then says so, and the next sync brings it over.
What is never taken from the master: each machine's own settings — audio device, media folders, network, GPU choice. Those are per machine.
Data Tracks send from the master only. Every machine plays the show's Data Tracks from its own synced clock, but OSC, UDP, TCP and Art-Net output leaves only the master, so a lighting node or a console receives each value once. On a client the track's Status reads client — master sends (nothing sent from this machine). A Data Track set to Exaplay value drives a property of the machine it runs on, so it keeps running on every client.
File sync
Automatic: Auto Sync
With Auto sync on (File Sync panel, on by default), the master checks every 20 seconds what each client holds against what the show needs on that client's outputs, and after each save it checks at once. Anything missing or different — compared by content, not only by size — is copied, and the client reloads the show when the reload achieves something.
- Nothing is reloaded while anything plays. A paused composition counts as playing (it holds a frame on the wall), and switching show mode off does not stop playback. Media is still copied in the background at a capped rate while the show plays, so a clip added mid-show can appear on the clients without a reload; the status reads staging … in the background.
- A client that renders nothing (no outputs assigned) needs nothing and is not sent anything.
- A machine that could not be asked is reported as unknown, never as in sync.
- Auto sync is the only place this is switched; Settings → System has no copy of it. Off, nothing is copied or reloaded automatically; the status keeps reporting and Copy files is the only way to update the fleet.
The sync status
The File Sync panel header shows the fleet's file state. Whenever something is outstanding, the same message appears as a small pill in the bottom-right corner of every tab; click it to open the NETWORK tab.
| Status | Meaning |
|---|---|
| in sync | Every client holds the show and the media its outputs need |
| no displays assigned | No client has outputs assigned, so none needs anything |
| live edits active | The clients follow your edits live; the show file catches up in the background |
| syncing the show file — n % / syncing N files — n % | A sync is transferring |
| … out of date | There is a difference and it is not being fixed right now — the hover says why (usually: a show is playing) |
| N clips need a client reload / N clients on a different show | The files are there but the client has not loaded them; it reloads once nothing plays. A client running no show counts as on a different show, and its machine card reads Loaded show: none — not the master's |
| N clients in safe mode | The client restarted in safe mode after repeated crashes (Loaded show: none — safe mode). It is not reloaded automatically — see Auto-Heal & Watchdog |
| N unknown | A machine could not be reached or could not say what it renders |
| N clients paired to a different master | Machines of another fleet — never synced by this one. Shown only here, not as the pill on the other tabs |
Copy Files — the manual push
Copy files (File Sync panel, or Sync at the top right of the master's NETWORK tab) sends the show and its media to every online client and reloads it there. You need it only when you want to push during a show, force a full overwrite, or after changing which outputs a client renders.
- The confirmation stops playback on every machine first (Stop show & copy), so no client joins a half-copied show. If an automatic sync is already under way, the dialog offers Wait for Auto Sync as the default — pressing Copy Files would throw its work away.
- The copy runs on the master engine: closing the browser does not stop it, Cancel does. Interrupted transfers resume; failed transfers are retried.
- Each client is loaded only after all its files are verified on its own disk. Per machine you see file bars, then the phase it is in. Afterwards a client reads ✓ N files, ! running, needs attention (the show is up but something needs a look, e.g. a calibration file), or ✗ still on old show (it was not switched over).
- Before copying, the panel warns about VIOSO calibration files missing on the master, and about any file that cannot be given its own place on the clients (for example a path with a
..folder in it) — those are not copied. Two different files with the same name in different folders are fine: each client keeps the master's folder structure (see Sync folders below). - Generators and live inputs are not files and are not copied.
Reload show on clients reloads the current show on every online client without copying anything — playback on those machines is interrupted while they reload.
Walkthrough
☰ menu → Walkthroughs → Multi-client → Keeping the clients' files in step reads which client is missing what, brings it over with Copy files and switches on Auto Sync.
Smart Sync
By default every client receives every media file. With Smart sync on (File Sync → Sync settings) each client receives only the media its assigned outputs actually show. Calibration files and panel/background images always go to every client. If Exaplay cannot tell what a client renders, that client gets everything — Smart Sync never under-copies. Assign the outputs before the first sync.
Sync folders
- Source folder (File Sync → Sync settings, on the master) — the folder the master sends from. Leave it at the default unless your media lives elsewhere.
- Sync folder (inspector → Hardware → Sync folder, per machine) — where that machine receives the show. Each client can use its own drive, for example
D:\ExaplaySyncon one andE:\Showson another; empty means the default folder. The show file, reloads, autostart and recovery all use each client's own folder, so different drive letters are fine.
Clients refer to the sync folder as $[sync]. Inside it, each client recreates the master's folder structure: the drive letter becomes the first folder, then the master's folders follow. A clip at D:\Shows\Gala\intro.mov on the master lives at $[sync]/D/Shows/Gala/intro.mov on every client, and a show file at D:\Shows\Gala\Gala.vpp at $[sync]/D/Shows/Gala/Gala.vpp — whichever drive the client's sync folder is on. Files on a network share go under UNC (\\nas\media\loop.mov → $[sync]/UNC/nas/media/loop.mov), and files in the master's own sync folder keep their place. So two different files that happen to share a name never overwrite each other, and media stored next to the show ($[project]/… paths) is found on the clients too.
A client that was synced by an earlier version, with every file directly in the sync folder, keeps playing: a missing file is looked for in the mirrored place first and then by its name in the sync folder. The next sync lays the files out in folders once.
Media already installed on every machine. If the media sits at a different path on a client (installed by hand rather than copied), add a rule to Settings → System → Media Path Translation on that client, one per line, e.g. C:\Media => D:\Fast\Media.
Playback Sync
Playback Sync (middle column, On / Off) makes every included client follow the master's play, pause, stop, seek, cues and composition switches, and hold a common playhead with it. It switches itself on when the first client comes online — unless you switched it off, which is always respected.
Include or exclude a client: select it and use the Playback sync switch in its Show sync block. The Playback Sync panel lists every online client as included or excluded; click a row to select that machine. An excluded client plays on its own clock, but file sync and show mode still reach it.
These switches are stored on the master engine, so every browser that opens the master's interface — on the master itself, a laptop, a tablet — sees and uses the same settings.
Sync quality
The Sync health panel lists every client with a trend line, drift, link (round trip), drops and a state:
| State | Meaning |
|---|---|
| in sync | Within 40 ms of the master |
| behind | 40–120 ms — the sync loop is correcting it; look only if it persists |
| far behind | Over 120 ms — check the network and the load on that machine |
| lost | No answer, no heartbeat, or a measured playback drift over 1 s; hover for the measurement behind it |
| not measured | Online, but nothing measured yet — not a fault, and not counted as unhealthy |
- The drift column is a real playhead measurement only with Master-driven sync ticked (inside the panel). Without it, the panel shows network latency as a stand-in and says Latency only, not drift.
- drops counts commands from this browser that got no answer. A command a client answered with an error — typically because it is on a different show — is counted as refused (
↩), not as a drop. Neither is a measurement of packet loss on your network. Clear resets the counters. - Another fleet's heartbeats ignored means a client is paired to a different master — a pairing problem, not a network one.
Machines are kept on a common playhead, not frame-locked: each output presents on its own refresh. The master stamps each playhead sample with its age, so clients typically hold to about a millisecond; small errors are corrected by gently speeding up or slowing down, and only a large jump causes a seek. That is right for a panorama or a multi-room show; content that needs exact frame coincidence across machines (active stereo) needs sync hardware.
Frame lock and sync hardware
| Server | Sync hardware | Across machines |
|---|---|---|
| Four-output server (one GPU, no sync card) | none | The four outputs of one machine share one refresh. Across machines only the playhead is aligned. |
| Eight-output server (two GPUs with a sync card, e.g. RTX PRO Sync / Quadro Sync) | swap barriers, house sync | The card genlocks the machine's outputs. Combine both GPUs with NVIDIA Mosaic. |
Each engine reports what its hardware can do: open System Information (burger menu) and read the Output Sync section — the graphics card, whether the driver offers swap groups, the swap groups and barriers it reports (barriers above zero mean a sync card is present) and the output topology. The same facts are in the diagnostics (http://<machine>:8123/cmd?req=diagnostics, under system.output_sync) and in the log (Output sync: …). By default Exaplay does not join a swap group, so every rig is playhead-locked as described above.
Emergency frame lock is for the case where the remaining offset between machines is visible — typically an LED wall driven by several machines. It needs a sync card in every machine involved. Switch it on per machine on the NETWORK tab (select the machine → Frame lock). While it is on, every machine waits for all the others at each frame, so one machine that hangs holds up the whole wall: after a swap that takes longer than 2 s Exaplay leaves the lock by itself and says so; switch it off and on again to rejoin. Leave it off wherever the playhead lock is good enough.
Show mode, Blank, Identify and Outlines
These decide what is on the wall, so on a fleet they belong to the whole rig. Switched on the master, they switch on every client:
- Show mode — SHOW ON / SHOW OFF in the header, Start / End presentation in the SHOW view, a User Panel item or custom page, a cue's show-mode action,
system.showmode=on|offover TCP/UDP,/global/showmodeover OSC, or Shift+Escape on the master's keyboard. Show mode off blacks out the whole rig. - Blank — the fade to black, with its fade time.
- Identify and Outlines on the Stage — labels and screen outlines on every output of every machine.
The master engine sends these itself and repeats the current state every second, so a client that was reloading when you pressed the button catches up within a second, and no browser needs to be open for a show controller to drive the rig. They reach every online client of the fleet, including clients excluded from Playback Sync. Clients only follow; a standalone machine never sends or receives them.
Identify one machine. Select the machine and press Identify (the Windows identify row) in the inspector on the right. It puts a full-screen label on every output of that machine only — the way to find which PC in the rack is which. It needs the machine's Exaplay Service; Stop identifying in the inspector, or Identifying · Stop on the machine's box in the rig overview while it identifies, removes it.
Outputs on several machines
Every client is a PC in the master's STAGE tree, with its outputs above it (open a screen to see them). You assign, split and arrange them on the master; the client adopts the result and keeps it across its own reboots. The + after the last PC pairs another machine as a client, the same pairing as on the NETWORK tab. See Output Setup → Several machines and The Stage.
- Offline machines stay in the project. A client that is switched off keeps its outputs and assignments in the show, marked offline; you can still assign them, and the client applies them when it comes back. Remove a machine that is gone for good with Forget PC… in its PC's inspector on the Stage.
- An output with no screen stays dark on its machine — leave a client's control monitor unassigned.
- A client that renders nothing receives no media.
Output EDID — keep an output when the projector is off
When a projector is switched off or its cable is pulled, Windows removes that output from the desktop and the other outputs can move. Having the graphics driver hold the output's EDID keeps the output in place whatever the projector does. Select the machine on the NETWORK tab and open Output EDID (under Hardware):
- Each output shows its state: EDID held (the output stays when the projector is off), Follows projector (it disappears when the projector is off) or Unknown (the driver did not say — nothing is offered then).
- Intel graphics: Lock EDID holds the EDID the projector reports at that moment; the driver keeps it across reboots. Release lets the output follow the projector again. Both ask for confirmation, need the projector switched on for a lock, and are refused while anything plays or is paused, because Windows may re-initialise the output once.
- NVIDIA graphics: fix the EDID in the NVIDIA Control Panel, which keeps it from boot on. Exaplay only shows whether it is fixed, so a machine where it was forgotten is easy to spot.
Hover a greyed-out button to see why it is not available.
Cross-machine panorama
Assign outputs of the master and of one or more clients to the same screen and they form one continuous picture, with playback kept in sync. With Alignment: As in Windows (on an output, the default) the machines are laid out left to right, master first; for any other arrangement set it to Rearrange and lay the boxes out on the Stage. To show the same picture on several machines instead, give their outputs the same place on the show canvas (type an overlap equal to the output's full width into the seam's number in the screen's Warping group). See Output Setup → Cross-machine panorama.
During a show: on a screen whose outputs are set to Rearrange a drag on the Stage moves projectors live on every machine. Stay off the Stage while the show runs.
Each machine decodes only what it shows
Every machine renders the whole canvas, but a machine does not decode a clip that lands on none of its own outputs. On a panorama with one 4K clip per machine, each machine decodes one clip instead of all of them. The clip keeps playing in step, so when it comes onto this machine's output it is at the right position, after a short re-buffer.
A machine keeps decoding a clip when it cannot be sure the clip stays off its outputs:
- the clip moves by itself (position, size or rotation keyframes), or has its own warp;
- the screen uses a dp calibration, a whole-screen 2D or 3D warp, or sends the whole canvas over NDI — these can show any part of the canvas on an output. A VIOSO calibration is the exception, see below;
- someone is watching a preview of that machine's canvas (the Stage preview), so the preview never shows a frozen clip;
- the clip is audible on that machine — it stops being drawn there, but keeps decoding for its sound.
A clip you will move live onto another machine's output (a drag, an OSC command, a Data Track) cannot be foreseen. Switch on Decode on every machine in the clip's inspector, so it is already decoding wherever it arrives. Hover a clip in the playlist to see whether this machine is decoding it.
With a VIOSO calibration each machine reads from its .vwf exactly which part of the canvas its own projector channels show, and decodes only the clips in that part (plus a few pixels of margin; a channel across the 360° seam counts at both edges). It measures this once after the calibration loads, in the background — until then, and whenever it cannot be sure, the machine decodes everything. It is only used when each machine's channels are known exactly: the channels are assigned to the outputs, or the calibration names each machine (one .vwf per machine). With Raw wall (correction bypass) on, every clip is decoded.
Switching it off. The Network tab's master panels carry a Decoding card with one switch, Decode only what each machine shows (on by default). Turn it off as an emergency fallback when a clip freezes or stays black on one machine: every machine then decodes every clip again, within about a second. The switch is saved with the show and applies to the whole rig; it costs decoding power, never picture.
VIOSO calibration across machines
A screen's VIOSO calibration works across machines: the .vwf files are copied to every client with the show, and each machine renders only its own channels. Every kind of calibration is recognised automatically:
- One file per PC (VIOSO 7's per-PC export:
show.vwffor the PC the calibration was made on,show_192.168.10.2.vwffor each client, named by its IP address). Load any one of them on the master and all of them load; each file is given to its PC — VIOSO records localhost in the calibrating PC's file and the PC's IP address in the others — and that assignment is saved with the show. Every PC receives every file, so in the calibration's Edit… dialog any channel can be dragged onto any output of any PC — each file stands over the PC it was made for. A PC with no file of its own and no channel on its outputs shows the screen uncalibrated. Several files can also be selected together in Load… (Ctrl+click) and load as one calibration. - One calibration per machine (
show_DC-1.vwf,show_DC-2.vwf, …). VIOSO records each machine's Windows computer name in its channels, so every machine finds its own, whatever their order and however many projectors each machine drives. If you rename a machine after calibrating, re-run the calibration — the stored name no longer matches. - One calibration covering every projector. Each machine gets its slice by its position in the machine order, so the channel order must match the left-to-right order of the machines.
A machine draws a calibrated screen only if one of its outputs is assigned to that screen. A master that drives no projectors — it only runs the show — does not render the calibrated wall at all, so it spends no graphics power on it and cannot paint it over another output. To have the master render the wall too, assign one of its outputs to the screen on the Stage; there is no other switch. (A single machine without multi-client always draws its calibrated screens, as before.)
A client draws the channels of its own projectors by itself — its own file in a per-PC calibration, its machine name in a one-calibration-per-machine set, else its position. The calibration's assign tool (Edit… in a Calibration card), which puts a channel on an output by dragging, covers every PC's outputs on that screen — a client's channel is written into that client's output list (a client's own Stage stays read-only) — and each PC's head in it says what that PC does (applied, copying, waiting for the file, uncalibrated). For a per-PC calibration each PC places its own file's channels by its own desktop, and a PC whose outputs that does not fit is assigned automatically, PC by PC, once it has reported; on a screen with any other kind of calibration that a client shows too, nothing is assigned automatically. A client that could not apply a calibration is named in the File Sync panel. See Projection Mapping.
Every PC switches at the same moment
A screen's calibration switches (Calibration, Blending, Black level — see Projection Mapping) and a calibration that is updated on disk change on every PC of the rig at the same moment, so a spanned wall never shows half old and half new:
- A switch: the master names a moment about a third of a second ahead and sends it to every client; each PC switches in the frame that starts at that moment. Each client keeps an estimate of the master's clock for this (it asks the master once a second).
- A calibration updated on disk — for example, the calibrator saved over the file on the master: the master copies the new file to the clients that show the screen, also while the show plays (at the sync's playback speed limit, 25 MB/s by default). Every PC builds the new calibration next to the current one, which stays on the wall meanwhile. Once every PC that shows the screen is ready, the master names the moment and all of them swap in the same frame.
If a PC does not answer, the others do not wait for ever: a switch is applied on a client after one second at the latest, and a calibration update goes ahead after five minutes with the PCs that are ready — the late one swaps as soon as it is ready. A master without projectors (it only runs the show) takes part all the same.
The same frame is the same picture on every PC. Without a sync card the PCs still show it each on its own refresh, so they can be up to one refresh apart (see Frame lock and sync hardware).
Restarted clients and powering on
Auto-Restore of restarted clients
A client that reboots comes back on its own: it loads the show it last received and re-applies its own output assignments from it, with no browser open anywhere. In addition, while the master's interface is open in any tab, Auto-Restore (File Sync → Sync settings, on by default) watches for clients coming back online and brings an empty one into the running show — show loaded, outputs assigned, show mode and playback position as on the master. A client that only had a short network dropout is left alone. Media is not re-copied by Auto-Restore; that is file sync's job.
Powering on the whole rig (autostart)
Set the show to start automatically on the master — the rocket button in the SHOW view, or Settings → Startup — and the clients follow: switch the rig on and every machine comes up in the same show, in show mode, on the same composition and cue. The master copies to each client:
| Setting | On the client |
|---|---|
| Autoplay at startup, composition, cue, delay | as on the master |
| Startup project | the same show in the client's own sync folder ($[sync]/D/Shows/Gala.vpp for the master's D:\Shows\Gala.vpp) |
| How the interface opens (window mode, frameless) | as on the master |
The settings are written when the master saves its settings, syncs the show or changes the autoload show; they take effect at the client's next start — nothing is opened or started on a render node during a show. If a client's startup show is missing, it starts the last show it received rather than staying dark.
A machine that must keep its own startup behaviour turns Follow master's startup settings off in its own Settings → Communication. Never copied: a client's Connect to another machine address and its media folders.
Main / Backup Failover
A backup is a client that renders nothing: it stays in sync with the master — show, media, playhead, live edits — and dark, and takes over if the master fails. The master needs no configuration.
Set it up on the backup machine, in Settings → Communication (while the machine is a client its Settings are hidden — set these before pairing it, or use Unlock GUI in its banner):
| Setting | What it does |
|---|---|
| Backup Machine | Marks this client as the backup. Nothing below has any effect without it. |
| Promote Automatically | Lets the machine take over by itself when the master falls silent. Off (default) = take-over by command only. |
| Require Arming | On (default): an automatic take-over also needs the backup to be armed. Arming is not remembered across a restart. |
| Dead Time | How long the master must be silent before an automatic take-over. Default 10 s. |
| On Promotion Send | OSC> / TCP> / UDP> lines sent when this machine takes over — one per line, the syntax a cue uses (Cue Script Reference); # starts a comment. The place for the video-matrix switch. |
Walkthrough
☰ menu → Walkthroughs → Multi-client → A backup for the master sets up a client that stays synced and dark and takes over if the master goes — on the backup itself.
Taking over
Taking over makes the backup the master (kept across a reboot) and switches show mode on, then sends the On Promotion Send lines. You can trigger it at any time; the manual command always works, even when the settings above are wrong:
OSC <prefix>/global/failover promote
REST POST http://<backup>:8123/failover {"action":"promote"}arm and disarm work the same way. GET http://<backup>:8123/failover reports the state and, when the backup has not taken over, why — the reason names the setting to look at.
What it will not do
- Take over twice. A second command or a simultaneous automatic decision takes over once and sends the actions once.
- Hand back. When the failed master returns, both machines are masters until you decide: set the other one back to Client (or restart it).
- Take over from a master it has never heard. A backup on the bench, in the wrong fleet or behind a blocked port stays dark and says so.
- Take over in the first 30 seconds after it starts, so a rig powering on together does not race.
The master counts as alive while either its once-a-second OSC stream or its discovery beacon arrives; a stopped master is not a dead one.
Fleet Software Updates
The Software updates panel (middle column, master selected) updates every machine from the master.
- Stage the installer. Copy the release installer (
Exaplay3_<version>.exe) into the master's update folder — the panel shows the exact path — and press Refresh. The master's Exaplay Service checks it: it must be signed by VIOSO GmbH (✓ signed by …), and its checksum becomes the reference for every transfer. - Check readiness. Each machine row shows its version and whether the install can run unattended: nothing when it can, ⚠ UAC prompt on machine when a consent dialog will appear on that machine's screen (the update waits there), ✗ needs admin rights when a silent install will fail. Fix those first.
- Update. Press Update on a machine or ⬆ Update all clients. The master's Service updates one machine at a time: the machine downloads the installer, checks it again, installs silently (projects and settings are kept) and restarts. It counts as done only when it comes back on the new version. The rollout runs on the master — you can close or reload the page; ✕ Cancel rollout stops after the current machine.
- Update the master last (Update master). This interface goes down while it installs; reload the page when the machine is back.
Leave an updating machine alone. Its row reads installing, restarts itself… — that is a status, not a request. Starting Exaplay there while the installer runs locks a file, and the installer then rolls the whole update back.
A machine comes back on its old version. The row names the reason from that machine's install log: a file locked by another process, a Windows restart needed, an elevation refusal, or the installer never started. Fix the cause and press Update again — there are no files to delete; the staged installer is checked again.
"a rollout is already running" — the master is still working through a rollout (the message names the machine and phase). The panel shows it with ✕ Cancel rollout; wait or cancel.
Walkthrough
☰ menu → Walkthroughs → Multi-client → Updating every machine stages a new version on the master and installs it on every client from the Network tab, one machine at a time.
Test Mode and Quick sync
For internal test builds only. Settings → System → Test Mode (Quick sync) (shown with Debug Mode on) on the master:
- accepts an unsigned installer (the panel shows ⚠ test mode: unsigned allowed; transfers are still checksum-verified), and
- shows Quick sync in the Software Updates panel: ⚡ Quick-sync clients to this master copies the master's own
exaplay3.exe,exaplay3-service.exeandhtml\onto every client and restarts it — no installer.
Quick sync does not touch DLLs (unless also send DLLs is ticked), redistributables, the registry or the installed version; it still needs admin rights on every machine. The panel names machines whose DLLs differ before you press (could not compare for an older Service — it still runs there). A machine whose copy fails is put back on its previous files. Turn Test Mode off after testing, and ship real versions with the installer.
Managing machines remotely
Every machine runs the Exaplay Service next to Exaplay (on the engine port
- 1, 8124 by default). Through it the master's NETWORK tab can:
- Start Exaplay on a machine whose Exaplay is not running.
- Restart Exaplay on a running client (confirmed — its outputs go dark for the restart). The master's own Exaplay restarts from ☰ menu → Restart Exaplay.
- Identify the machine's outputs.
- Open the machine's Service page (watchdog, log) with the icon in the inspector header.
- Change the machine's Hardware blocks: Host & network (Windows computer name — needs a reboot — and adapter IP settings), Windows displays (mode and orientation; display scale is shown, never changed), GPU & video decoding (per machine, never synced), VIOSO Cloud Platform (see VIOSO Cloud) and Sync folder.
A machine whose engine has stopped drops out of discovery after about 30 seconds, but this browser remembers it and keeps it in the list as offline, so you can start it again. Forget this machine removes it from the list.
PIN Lock
Hardware → PIN lock locks a machine's own Exaplay interface (the UI) and its Hardware blocks behind a PIN of up to 8 letters or digits. The same lock is set locally under Settings → Interface → Protect interface with PIN (walkthrough: ☰ menu → Walkthroughs → Running the show → Lock the interface with a PIN).
- With the PIN set, every operator page of that machine asks for it on load — the main interface and also the Control view, the Show view and the Monitor, including when one of them is opened on its own address (for example
http://<engine-ip>:8123/control). Only User Panels are not behind this lock; each panel has its own PIN. The show itself keeps playing — the lock is on the interface, not the engine. - Its Hardware blocks stay hidden in the NETWORK tab (one line says Locked by PIN) until you enter the PIN in PIN Lock. Unlocking lasts until the page is reloaded.
- Change PIN sets a new one; switching Lock with PIN off removes it.
- The PIN is per machine and unrelated to the User Panel PIN.
The PIN is checked by the browser against the value stored in the machine's configuration file. It deters casual access; it is not strong access control. Do not reuse a real password. Forgotten? See Resetting a forgotten PIN.
Network Requirements
Allow these on every machine in Windows Firewall:
| Port | Purpose |
|---|---|
| TCP 8123 | Engine: interface, commands, file transfer |
| TCP 8124 | Exaplay Service — always engine port + 1 (start/restart, identify, updates, Hardware settings) |
| UDP 45454 | Discovery between Exaplay machines (broadcast) |
| UDP 45455 | Fleet heartbeat from clients to the master — without it the master does not drive the clients' playback |
| UDP 8000 | OSC Listen on each client — the master streams the playhead and show state here (the port the pairing writes) |
UDP broadcast does not cross subnets and some managed switches block it; use Add machine by IP in that case. See also Firewall Configuration.
Several network adapters. Discovery and the heartbeat go out on every network a machine is attached to, so a machine with a control LAN and an NDI LAN is found on both. On a mixed-version rig, update the master first.
Troubleshooting
A machine does not appear
- Check that Exaplay is running on it and that both machines are on the same subnet.
- Allow UDP 45454, UDP 45455 and TCP 8123 in the firewall on both machines; check that the switch passes UDP broadcast.
- Use + (Add machine by IP) at the top of the machine list — its dialog repeats these checks — for a machine on another subnet.
- Press Refresh.
Two machines with the same computer name
Machines are identified by computer name and port. PCs cloned from one Windows image share a name, and the second one is dropped from the fleet; the master warns Two machines are using the identity … with the second machine's IP. Give each machine its own name — remotely, in Hardware → Host & network.
A client does not follow play / pause
Select it and read its Show sync block; the Playback line names the first broken link:
- not following — Playback Sync is off — switch Playback Sync on.
- excluded from playback sync — switch its Playback sync on.
- multi-client off / a different OSC prefix / a different port — press Enable multi-client or Align settings on that line.
- not receiving — no heartbeat from this machine — in this order: multi-client is off on the client, this machine is not the master, or the firewall blocks UDP 45455.
- refusing the stream — different show loaded — the client runs another show; let file sync bring it over, or press Copy files.
- targeted but silent — the client's firewall blocks the OSC port, or its OSC prefix differs.
- not following — paired to a different master — Pair into this fleet.
A client shows "lost" but plays fine
Hover the word — it names what was measured. No answer within 3 s from this browser is a fact about the route from the computer you are sitting at, not necessarily about the master's link to the client.
A client is still on the old show
- ✗ still on old show after a Copy Files: the client was not switched over because a file could not be verified on its disk. Hover the failed file bar for the reason, fix it and sync again.
- … out of date with a show is playing: stop playback (a paused composition counts as playing) and the sync runs by itself, or press Copy Files to stop the show and push now.
- A live edit reaches a client only while it runs the master's current show. If you changed something while a client was offline or standalone, it catches up at the next sync.
A client's wall is black
- Its Outputs line reads dark: show mode is off — switch SHOW ON on the master.
- The banner on the client says no master found on this network: make a machine the master, or return the client to standalone.
- Its outputs are not assigned, or taken out of the show — check the master's Stage. See also Outputs Troubleshooting.
Resetting a forgotten PIN
This needs file access (local or remote desktop) to the locked machine; it cannot be done from the browser.
- On the locked machine, open
Documents\Exaplay3\config\config_system.jsonin a text editor (make a copy first). - In the
ui→pin-lockblock, set"enabled"tofalse:
json
{
"ui": {
"pin-lock": {
"enabled": false,
"code": "aB3xy9Z1"
}
}
}- Save the file and restart Exaplay on that machine. Change nothing else in the file — it holds the machine's whole system configuration.
Only the locked machine is affected; the other machines keep their own PINs.
