Capture · · 5 min read
TouchDesigner on a Mac: sharing frames both directions

TouchDesigner is happy to be either end of a chain — generating content for something else to place, or receiving live sources to react to. The interesting work is not making the connection. It is making sure the frame that arrives is the frame you sent.
Sending out of TouchDesigner
The Syphon Spout Out TOP publishes a texture as a Syphon server on macOS. Drop it after whatever you want to share, give the server a name, and it appears in every Syphon-aware application on the machine — Resolume, MadMapper, VDMX, OBS, SpectraMap.
Three things to get right:
Name it for the rig. The default server name tells an operator nothing. TD — Background or TD — Particles L is what you want appearing in someone else’s source list at 6pm.
Set the resolution at the TOP, deliberately. Whatever resolution the TOP is at is what the receiver gets. If the destination is a 1280 × 640 LED wall canvas, publish at 1280 × 640 — not at 1920 × 1080 for the receiver to scale down, and definitely not at 720p for it to scale up. Every resample costs sharpness, and on LED that reads as crawl on moving content rather than as softness.
Decide about alpha before you build. Syphon carries RGBA, so you can publish a texture with transparency and let the receiver composite it. That is a genuinely useful pattern — TouchDesigner generating an overlay that Resolume places over media. Just be deliberate about premultiplication: if edges come out with dark or light fringing at the destination, the two ends disagree about whether alpha is premultiplied, and the fix is one of them, not both.
Receiving into TouchDesigner
The Syphon Spout In TOP subscribes to a published server. Select the server, and you have a live texture on the GPU to work with.
What can be the other end:
- Another creative application on the same Mac.
- A window, application or display captured and published — a browser dashboard, a presentation app, a piece of software with no output of its own. That is what SpectraBridge is for, and it turns “any Mac software” into a TouchDesigner input.
- A media server or playback tool that publishes Syphon.
The failure mode to know about: a Syphon receiver holds the last frame when the publisher stops. Your network looks fine, the TOP shows a picture, and it has been frozen for ten minutes. Verify a live source by making something in it change — not by looking at it.
Watch for the round trip
The pattern that quietly costs quality: TouchDesigner receives a source, does something to it, and publishes it back out — and the two ends are actually the same application chain. If a frame goes Resolume → TouchDesigner → Resolume, you have added two texture hand-offs and a frame or two of latency to do something that might have been a plugin.
Sometimes that round trip is exactly what you want, because TouchDesigner can do things nothing else can. But be conscious of it, and prefer a linear chain — capture → generate → composite → output — over a loop.
NDI, when the other end is another machine
TouchDesigner has NDI In and NDI Out TOPs, and the same rule applies as everywhere else on macOS: Syphon inside the machine, NDI between machines. Using NDI to move a texture between two apps on one Mac costs you an encode, a decode, and chroma subsampling, for no benefit. The full comparison is here.
Two specifics for TouchDesigner as an NDI sender:
- Encode is on your machine, competing with the render you are already asking a lot of. A patch that runs at 60fps with no NDI output can run at 45 with two.
- Generative content with fine detail is expensive to encode and shows subsampling badly. Particles, noise and thin geometry are the worst cases. If detail matters and the destination is local, stay on Syphon.
Frame rate discipline
Syphon has no frame rate of its own. The publisher pushes textures when it has them; the receiver takes whatever is current when it draws. Nothing enforces a relationship.
So if TouchDesigner is cooking at 45fps and the receiver is presenting at 60, the receiver repeats frames unevenly and the motion judders — even though neither application reports a problem. Both will tell you they are fine, because from each one’s point of view they are.
The fix is upstream: make the patch hit the show’s frame rate reliably. That is what the performance work is for — reducing cook time, dropping unnecessary TOP resolution, and checking whether anything is cooking every frame that does not need to. If the patch cannot hold 60, consider running the whole show at 30 deliberately rather than at an unstable 45.
Colour, briefly
TouchDesigner works in floating point internally and can output more than 8 bits per channel. Syphon carries 8-bit RGBA in typical use, so publishing a 16-bit float TOP means a conversion happens at the boundary.
Usually invisible. Where it shows: slow gradients, which band; and very dark content, where 8-bit quantisation is coarsest. If you are generating a subtle dark gradient for an LED wall and seeing steps, that is the conversion, and the answer is dither in the patch before publishing rather than anything at the receiving end.
A working rig
A generative show with a captured live element, all on one Mac:
- A browser dashboard with live data is published as a Syphon source by SpectraBridge.
- TouchDesigner receives it, uses the data region as a mask and a driver for a particle system, and composites its own generative layer.
- TouchDesigner publishes the result as
TD — Programme, at the wall’s exact canvas resolution. - SpectraMap receives it into a canvas built to the panel resolution, splits it into output regions, and sends each over SDI to the processor.
Four stages, no encode anywhere, no network involved, and one canvas pixel landing on one panel pixel. The GPU never hands a frame to the CPU, which is why this kind of chain is so much cheaper on Apple Silicon than the equivalent NDI version — unified memory means there was never a bus to cross.


