Skip to content

Live sources

Most of what Moonshine shows is a file you dragged in. Three things are not.

An NDI stream from another machine on the network, a Spout sender running on the show machine itself, and a component — a .tox file that draws its own picture. All three sit in the media library beside your clips and images.

The three kinds

Kind What it is Where it comes from
NDI Video carried over the network, between machines Any machine or application on the same network that is sending NDI
Spout Video handed straight between two applications on one Windows machine, GPU to GPU An application running on the show machine itself
Component A .tox — a piece of TouchDesigner that renders live A file you upload, like a clip

The difference that matters on site is reach.

NDI crosses machines. A playback server in the rack, a camera encoder, a media server in another room — anything sending NDI on the same network can be a source. It is a network protocol, so it is subject to the network: a firewall, a VLAN or a different subnet will hide a sender that is otherwise working perfectly.

Spout never leaves the machine. It is texture sharing between two applications on the same GPU. The application sending it has to be running on the show machine — your laptop cannot Spout to it. In exchange there is no network, no encoding and no latency to speak of.

A component is code. It runs on the show machine, in a TouchDesigner process of its own. That has its own section at the end of this page.

Adding one

Everything starts on the Assets tab.

  1. Click Add Source at the top right, beside Upload.
  2. The dialog lists the NDI senders the show machine can currently hear, each with an NDI badge.
  3. Click Add on the row you want.

The row reads Adding…, then the source appears in the library — for you and for every other operator on the show at the same moment.

  1. Click Add Source.
  2. At the bottom of the dialog, under Not in the list? Add a sender by its exact name, leave the protocol dropdown on Spout.
  3. Type the sender's name exactly as the sending application shows it, and press Add.

The Spout half of the list is always empty, and the dialog says why:

This build does not list Spout senders. Add a Spout source by typing its sender name.

The name field is the way in for Spout, not a fallback — which is why the dropdown already says Spout.

A .tox is a file, so it uploads like anything else — drag it onto the drop zone in the sidebar, or use Upload.

Only an administrator can add one. An operator's file picker does not offer .tox at all, and the drop zone says so:

Only an admin can add or replace a component (.tox): a component is code, and it runs on the show machine.

The item is named after the file with the extension removed, so particles.tox becomes an item called particles.

Just opened the project? Scan again

Opening the dialog is itself the "look at the network" gesture: it scans as it opens, and again if the connection comes back while it is open. It never scans on a timer.

An empty NDI list right after startup means not yet, not nothing there

NDI senders announce themselves — they do not answer a question. The show machine starts listening a moment after a project opens and keeps listening for the rest of the session, so for the first few seconds there is genuinely nothing to list.

The dialog says the same thing in its own words:

No NDI sources are visible on this network yet. Discovery is asynchronous - senders take a few seconds after the project opens to announce themselves. Scan again.

Press Re-scan and senders appear as they are heard.

A fresh look at the network is allowed once every 10 seconds. Enumerating senders wakes vendor SDKs on the machine that is running your show, which is not something to do on every click. Inside that window you still get an answer — the last scan, labelled as such:

What you see What it means
Scanned at 14:02:07 A fresh look, just now
Showing the scan from 14:02:07 The last look; a new one is not due yet
Re-scan in 6 s How long until a fresh look is possible

Two silences are reported rather than left spinning. A scan the show machine does not answer within 8 seconds says The show machine did not answer the scan. Press Re-scan to try again. An Add that goes unanswered for 10 seconds names the sender it failed on and offers itself again.

Typing a name

A sender already in the library reads Added with no button, so you cannot make two entries for one camera. Neither can a double-click, and neither can two operators adding the same camera at the same moment — the show machine keeps one entry per sender as well.

That rule matches on the sender's name, not on what you renamed the library item to. Renaming a source does not make it a different camera.

A near-miss is resolved to the sender it means

NDI and Spout names are exact addresses. If you type studio (cam 1) while STUDIO (Cam 1) is already in the library or visible on the network, Moonshine adds that sender rather than a second entry pointing at one that does not exist. Only a name nothing recognises is sent exactly as you typed it — which is the case the field exists for.

What the library shows

A source has no thumbnail and never will: an NDI camera is a name on the network, and a component has no picture until TouchDesigner starts it. So a source card shows a signal icon and a subtitle saying what it is and where it comes from:

NDI · STUDIO (Cam 1)
Spout · Resolume
Component · particles.tox

That is more useful than a file size, which for a live source is zero.

The Sources filter in the Assets sidebar shows only these three kinds. Select a source and the details pane replaces Format and Size with Kind and Source — the exact address the show machine receives on. A component keeps its Size, because it has one.

The library does not re-check a sender

Adding a sender records its name. Nothing re-checks later whether it is still there, so a camera unplugged this morning still looks entirely ordinary in the library. Open Add Source to see what the show machine can actually hear right now — that dialog is the only live view of the network.

An NDI or Spout source has no Replace File… and no Duplicate: there are no bytes to replace, and one entry per sender is the rule, so either action could only produce something broken. A component has both, for administrators only.

A live source also has no duration. It has no end.

Playing a live source

Drag a source from the Asset Browser in the Playback sidebar onto a playlist, exactly as you would a clip. It takes a length and a transition like any other item, and crossfades with the item beside it.

A component starts its own TouchDesigner process when it plays; an NDI or Spout source attaches to a playback deck. Either way the show machine holds it only while a step of the loaded playlist still calls for it, and releases it when the playlist changes, stops or is deleted.

Because a live source has no end of its own, length is what moves the playlist on — there is no "hold until Next" yet. Give it the number of seconds you want it on screen.

Still not reachable: a Texture node in the scene graph

A live source cannot be set on a Texture node. Playlists are the way to put one on screen today.

A component is code

This one deserves reading slowly, because it is different in kind from everything else in the library.

A .tox is not media. It is a piece of TouchDesigner — operators, parameters and Python — and when it plays, the show machine runs it, in a TouchDesigner process of its own. A component can do anything TouchDesigner can do on that machine: read files, open network connections, use the GPU.

That is the point of components, and it is also why they are handled differently from a video:

  • Only an administrator can add or replace one. Uploading a .tox is closer to installing software than to adding a clip, and the permission reflects that.
  • Only add components you trust, from someone you trust, the same way you would treat a plugin or a script.
  • A component runs in its own process, so a component that crashes takes itself down rather than the show. The show machine notices and restarts it.

Treat a .tox like a program, because it is one

A video file cannot do anything to your show machine. A component can. Nothing in Moonshine inspects what is inside a .tox before running it — the administrator-only rule exists precisely because that judgement is a person's to make.