TouchDesigner

Making an Output

Build a TouchDesigner output for your install — fixture wiring, geometry, pixel-mapping, and how Lightpath consumes it.

Outputs are the core building block in Lightpath. An output is an individually addressable part of your installation — a video wall, an LED strip, a projector, a screen, anything you want to drive content to. Each output is a .tox file living in your project's outputs/ directory; Lightpath loads it into TouchDesigner at runtime and routes content to it from the UI.

Adding an output

You need to be logged in as an admin to access this page.

  1. Go to Configure → Outputs in the Lightpath UI.
  2. Click + New Output in the top left.
  3. Choose a name and an icon. To use a custom icon, upload a .png file into your project's outputs/ folder — it will appear in the Custom icons selector. We recommend a simple white-on-transparent outline of the output's shape.
  4. Choose whether to build from one of the bundled templates or from an existing .tox file.

Templates

Lightpath ships with five output templates. Each gives you a working .tox to start from — extend or replace anything inside.

Driving fixtures and surfaces

  • LED — Addressable fixtures driven from 3D geometry. You give it a point per LED; it ranks them into layout order, addresses them as fixtures, and renders the look at each point's real position, so a shader source chase can run along the structure and a sweep can cross the venue in meters. It sends its fixtures as Art-Net itself: set Network Address and Local Address on the output, and the addressing — net, subnet, universe, channel — on its fixtures.
  • Surface — A 3D surface: a screen, a monitor, a projection surface. The camera fits itself to the geometry, so the image frames the surface exactly however you move or resize it, and you never set a camera by hand. Use it for a screen that isn't a flat rectangle facing front, or for any surface whose pixels you want addressed in 3D: it renders the look at each pixel's real position too, so shader sources line up with the LED outputs around it. It opens its own window on a monitor, with the same window settings as Window.

Showing and moving textures

  • Window — The look, full-frame, in a window on a monitor: a projector, an attached display, or an LED screen driven over HDMI or DisplayPort. There is no geometry. Its Config page chooses the Monitor, sizes the window to the whole display (Fill) or to the output's resolution, and flips or rotates the image for how the display is mounted.
  • Send — Send the texture out via Spout or NDI for another piece of software to consume. Useful when integrating Lightpath with projection mapping software.
  • Receive — Receive a texture from another piece of software via Spout or NDI. Receive-type outputs show a simplified look editor since content isn't being generated inside Lightpath. You can automatically send OSC or HTTP when content is selected to switch the source software in lockstep — see Devices for the bidirectional binding setup.

LED and Surface arrive with no geometry — their preview is empty until you set Geometry to the points or surface this output drives.

These templates are starting points. You can do anything you want inside the output component, leveraging the open-ended power of TouchDesigner.

Which sources an output is offered

Each output's settings on the Outputs page have a Source Types section with two toggles, Offer 1D sources and Offer 3D sources. They control which shader sources appear in the look editor for this output.

A 1D source travels along the output's layout order, so it means nothing on a screen and renders as one flat color — turn it off there. A 3D source reads each pixel's real position, which needs this output's world space set to be meaningful. Both are on by default, and sources that declare no entry point are always offered.

How your output receives content

Lightpath can hand an output its content two ways, and it decides which by looking at what your component exposes. Use a Material parameter unless your output only passes an image on to something else.

A Material parameter

Add a MAT parameter named Material on a page named Managed, and Lightpath points it at the active look's material. Your output draws the material itself, so the look is evaluated at each point — at every LED, at every pixel of a surface. That is what lets a source read a fixture's real position in meters or its place in the layout order, so 1D and 3D shader sources do something meaningful.

There are three ways to put a material to use, and each template is a working example. Start from the one that matches:

Your outputStart fromWhat it does
Points — fixtures, pixels in spaceLEDRenders the look at each fixture point and sends it as Art-Net.
A 3D surfaceSurfaceRenders the look across the mesh and frames it with a camera fit or a UV unwrap.
A flat frameWindowRenders the look full-frame at the output's resolution.

A texture input

Add an In TOP and Lightpath renders the look to a texture and wires it to that input. Your component receives a finished frame, and any TOP network works. Use it when your output is a destination for an image — an NDI or Spout sender, a capture, a network you already have. The Send and Receive templates work this way.

The look is flattened to an image before it reaches you, so a source that reads position is sampled from that image rather than evaluated at each fixture.

If your component has both, the Material parameter wins and the texture input is left unconnected.

Publishing your geometry

Give your component an output connector carrying a POP — the geometry the material is drawn on — and Lightpath reads its point attributes. Two things follow from what it finds there:

  • Every attribute other than the ones Lightpath draws with itself becomes a name shader sources can read by itself, per pixel. Write Rib or Sector onto your points and a source can use Rib or Sector directly.
  • Every Tex attribute becomes a UV set operators can choose.

Lightpath also uses the list to decide which sources this output is offered: a source that reads an attribute your geometry doesn't carry is hidden from looks on this output.

The LED template publishes Apply Content's output this way. Attributes you add anywhere in Setup_Geometry or Calculate_UVs arrive with it.

UV sets

A UV set is a point attribute named Tex followed by letters or digits, with at least two float components. Tex itself is the default set. Any others show up in the look editor as UV Map choices for every layer whose source samples uv, named after what follows Tex: Texfront reads as Front.

Calculate_UVs writes one set, named by its UV Set Name parameter. Leave it blank to write Tex, or enter front to write Texfront. For more sets, copy Calculate_UVs, chain the copy after the first, and give each copy its own name and method — a cylinder wrap and a flat front projection on the same structure, for example. Each copy's preview shows its own set, and Preview Dot Size sets how large the points draw in it.

Custom parameters

Outputs follow the standard Lightpath custom-parameter contract — any parameter on a page named Look is exposed per-look (e.g. LED pixel-mapping method, input texture fit, per-look effects); any parameter on a page named Config is exposed at the install level (e.g. target network address for DMX, the monitor a Window output opens on, Spout sender name for a Send output).

Outputs can also expose a Status page — read-only parameters that stream live to the TouchDesigner device on the Integrations page and feed the Alerts system — and a Managed page for the params Lightpath drives rather than the operator. Add a Thumbnail Toggle on Managed if your output template should render differently when Lightpath captures its preview thumbnail.

A Feed page is for viewing controls. Its parameters appear beside the video when an operator expands this output's previs — which camera the previs looks through, framing, an overlay toggle. Keep install-time setup on Config and viewing controls on Feed; see TouchDesigner Overview → Feed parameters.

See TouchDesigner Overview → Custom parameters for the full pattern.

Resolution

If your output renders at a pixel size — a window, a texture it sends on — add a Resolution parameter to its Managed page, either one Int parameter with two values or a Width/Height pair. Lightpath keeps it equal to the Resolution set for the output on the Outputs page, so the operator sets it in one place and every part of Lightpath agrees on it. Don't put it on Config: the Outputs page already has a Resolution field, and a second one there would let the two disagree.

A Resolution parameter on any page other than Managed belongs to your template, and Lightpath leaves it alone.

The Enable toggle

Every output should expose an Enable toggle on its Config page. Lightpath uses it to mark whether a given copy of your output is the live one.

Lightpath sometimes runs more than one copy of an output at the same time. When you edit a look without pushing it live, a separate copy renders the preview; short-lived copies are also spun up to capture thumbnails. Only the live copy should reach the real world — if a preview or thumbnail copy keeps sending, it fights your primary output: two copies driving the same DMX universe, a second window opening, or a duplicate NDI stream going out.

Enable is how those copies are told apart — Lightpath turns it off on preview and thumbnail copies and leaves it on for the live one. It doesn't stop anything on its own, though — it's up to you to wire it up. Make anything in your output that reaches the real world (lighting data, a window, an NDI send) act only while Enable is on.

The simplest way is an expression on that operator's active parameter. For example, on a DMX Out's Active parameter:

parent().par.Enable

Now it only transmits while the output is enabled. Do the same for anything else in the output that drives hardware or the network.

Windows are the same story. If your output opens a window — a projector or screen feed, say — open it from an OnLoad lifecycle hook and only while Enable is on. Otherwise every preview and thumbnail copy pops its own window on top of the live one. The built-in Window and Surface templates both follow this pattern.

Accessing project files

3D models, fixture XMLs, lookup tables, custom icons — store them in your project folder and reference them through the project:// path alias. See TouchDesigner Overview → Accessing project files.

On this page