Getting started
Install from the download page and open the app — there's no import step.
The Recent tab merges TouchDesigner's own recent-files list with the launcher's history, so your
projects are already there. A first-run tour drives the app while it narrates, then a short setup
wizard covers theme, .toe file association, the companion TOX, and tray behavior.
Both rerun anytime from Help ▾ (Start Tour,
Setup Wizard).
Select a project and the launcher reads the exact TD build it was saved with — straight from the
file, via Derivative's toeexpand — and highlights the matching install. If that build
isn't on the machine, a Download button fetches the exact installer from Derivative
and runs it for you. With the file association set, double-clicking a .toe anywhere
routes through the launcher with a 5-second auto-launch countdown; any keypress or click cancels it.
When a double-clicked project needs a build you don't have, the launcher asks once what it should do about it — and remembers the answer under Settings → General → Opening a project from Finder (Explorer on Windows): open with the latest build, the closest one, a specific build you pin, or always stop and let you pick. Only the auto-launch path uses it; picking a version yourself in the app is untouched.
The app keeps itself current: a quiet update check once a day, never while a TouchDesigner session is running, plus Help ▾ → About & updates → Check for updates. A found update waits in the header's Update chip; the daily check can be turned off under Settings → General → Updates. The companion TOX has its own release channel, so a new TOX reaches you without an app update — and vice versa.
xattr -cr "/Applications/TDX Launcher Ultra.app".
The tabs
| Tab | What it holds |
|---|---|
| Recent Files | Merged TD + launcher recents. Gallery of project cards with hover-playing previews, tags, the versions drawer, and the version panel on the right. Everything launches from here. |
| Sessions | TouchDesigner sessions running right now — including ones opened outside the launcher, found by process scan — and the ones that just ended. An inspector, not a launcher: see Running sessions. |
| Templates | Starter .toe files in your own order (Ctrl/⌘+↑/↓ reorders). The first row, Default (new project), starts TouchDesigner with its default startup file on Ctrl/⌘+1; your templates take Ctrl/⌘+2…9, from anywhere in the app. Right-clicking the big Launch button also starts the default startup file, whatever is selected. The tab has one default TD version (Latest follows your newest install). |
| Palette | TouchDesigner's factory palette for the selected build, your Documents/Derivative/Palette, plus any folders you add. Drag a .tox straight into a TD network. The pinned Toolbox sits on top. |
| FNSTools | Store, installer and global configurator for the FNSTools toolkit — tick the tools a project should have and install them straight into it. Free to browse and download, no TouchDesigner session needed; Plus packages unlock with a membership. Hide the tab under Settings → General → Theme & view. See FNSTools. |
| Patreon | Browse .tox components from creators you support and load one into a running session. Connect with Log in with Patreon under Settings → Accounts → Patreon, or paste your session cookie there (Patreon's official API can't list post attachments). Function Store sits first in the creator list; its × hides it. |
Tab / Shift+Tab cycle the tabs; Alt/⌥+1…4 jump to Recent Files, Sessions, Templates and Palette, Alt/⌥+5 to Patreon and Alt/⌥+6 to FNSTools. The whole app is keyboard-drivable — F1 lists everything.
Each tab keeps its own search. The toolbar's search box filters the list you are looking at and nothing else — a query typed on Palette stays on Palette, and a tab holding an active filter is marked in the tab bar so a stale query never reads as an empty tab. The Sessions tab also carries a badge with the number of sessions running right now.
Above the tabs, the header holds the Update chip when an update is waiting, a ▭ window switcher while TouchDesigner windows are open (Alt/⌥+W: search every window of every session and focus one), 📱 Phone, View, Settings, Help ▾, and ♥ Support, which opens Function Store's Patreon page.
Quick launch
The launcher window itself is one keystroke away from anywhere — the main global hotkey (default Ctrl/⌘+Shift+D) brings it up over whatever you're doing, TD fullscreen included. For the times you'd rather type a name than browse, press the Quick Launch hotkey (default Alt/⌥+Shift+D) and a small search overlay appears over everything. One input, everything reachable:
| Result | Matched on | Enter | Also |
|---|---|---|---|
| Project | name, path, tags | Launch the head with its detected build | Ctrl+Enter → TouchPlayer |
| Running session | name, path | Focus its window | → lists its windows to focus one |
| Component (.tox) | name, category, creator | Place into the running session | drag the row straight into a TD network |
| Template | name | New project from it | |
| Command | verb | Run it | > filters to commands only |
| Tool command | label, help text | Run it in the session that offers it | ? filters to tool commands only |
An empty query shows running sessions, recent projects and the app commands; typing fuzzy-matches
across everything, field-aware — a name hit outranks a category hit outranks a path hit — and
forgives typos and initials (kinnect, colour, mfo for
movieFileOut). Commands you run often rise in the list, the weighting fading over a couple of
weeks; the toggle is Rank by usage in Settings → Quick Launch.
Executed queries are remembered: Alt+↑ / Alt+↓ cycle back through what you
ran before, shell style, and typing anything starts a fresh draft again.
Filter tokens
>— commands only. Verb-first, per session: Focus, Save, Thumbnail, Preview video, Relaunch, Kill — plus the app's own actions and New default project. Destructive commands arm on the first Enter — the row turns red and a second Enter fires; any other key disarms. Nothing destructive on a single keypress, ever.?— tool commands only: the actions components inside your running sessions have published.=(leading) — components only. Bare=browses the whole library grouped by where things live;=midisearches just components./x— filter by place: a palette folder, Toolbox category, Patreon creator, or/templates. Combines with=and search words.#x— filter by project tag. Running sessions keep their project's tags, so#showsurfaces a live show too.
All five prefix characters are customizable in Settings → Quick Launch — the overlay's placeholder and hints follow whatever you pick. Three global hotkeys are configurable independently under Settings → Keys → Global hotkeys: the main window, Quick Launch, and the main window jumped to the Palette tab. The first two are bound by default; the Palette one is opt-in.
Tool commands
Components in a running project can publish their own actions to the palette — "Set BPM",
"Record 2 seconds", "Toggle the strobe" — and the launcher runs them over the
companion bus. They ride the normal command list and own the
? prefix, carry a TOOL badge, and show the tool's own one-line help
under the label. Nothing to set up: a session carrying a tool that registers commands contributes
them the moment it is running.
A command can declare arguments. They render as ghost chips after the label and
fill in as values arrive — either through a short prompt flow (typed values in the input, menus
and toggles as pick rows) or inline, by typing them after the name:
? rec 2 runs the recorder with seconds=2 and fires immediately when
every other argument has a default. The tool validates values before its own code sees them, so a
bad number or a missing required argument refuses the run rather than half-doing it.
When several sessions offer the same command they merge into one row with a session-count badge. The run goes to the session the palette was summoned over — whichever TouchDesigner window you were last in — and when that is ambiguous you pick the session from a list (→ opens that picker on any tool command). The same tool loaded in three projects is three targets, not three rows.
Command favourites
Pin commands to make them float to the top of every list. Pin them from:
- Quick-launch overlay — the ★ on any command row (or Ctrl+D / ⌘+D after selecting a row)
- Settings → Quick Launch — every tool command the launcher has seen, with a ★ to pin it (clicking the row shows or hides the command)
- Palette Commands tab (in TouchDesigner with the companion v0.21.0+) — the ★ on hover
Favourites sort first in the quick-launch and the Palette Commands tab, and rank higher in typed queries — so the second time you need something is muscle memory. The list travels with settings export/import, so your favourites move to a new machine with you.
announce() call from your component's init, through
FNS_CommandRegistry. Commands from the
FNSTools toolkit show up here automatically.
Project versions
TouchDesigner projects accumulate copies of themselves: incremental saves
(Project.2.toe, Project.3.toe, …), backups in
Backup/, and CrashAutoSave.*.toe after a crash. The Recent tab folds all
of them into one family card per project with a ⑂ N badge.
Launch on the card always fires the head (Project.toe) — never a guessed variant; if
you last opened a different copy, the card says so. A ⚠ chip appears when a crash
autosave newer than the head exists.
Grouping is deterministic — filesystem conventions only, nothing stored — and toggles with View → Group project versions (V). Click the badge for the drawer:
| Action | Effect |
|---|---|
| Launch | Launch that exact file, TD build detected from it |
| Select | Put it in the picker to inspect or pick a version |
| Reveal | Show that file in Finder or Explorer |
| Duplicate | Copy any row into a fresh Name.N.toe — the same numbering TD's incremental save uses, so it folds straight into the family |
| Restore… | Make a copy the new head. The current head is preserved first as the next free increment — nothing is overwritten or deleted |
| Recycle | Tick copies (never the head) and move them to the OS trash; the footer shows how much space the copies hold |
Restore is the "I kept working from Backup/Project.30.toe" fix:
promote the backup, and the family has one unambiguous head again.
Duplicate as new version on any project's context menu starts a family from a
single-file project.
Running sessions
The Sessions tab shows what a running project is — TD version, PID, launched here or opened externally, uptime — rather than a version picker, since the version is already decided. Each session is a card; click it to expand its companion row and session tools.
A status dot leads every card: green while it runs; pulsing amber, with a not responding chip beside the name, when its companion has stopped pulsing — TouchDesigner is frozen, or busy with a long save; hollow grey once it has ended. A session without the companion has nothing to judge silence by, so it only ever reads running or ended.
| Action | Effect |
|---|---|
| Focus | Bring the TD window to the front |
| Save · Thumbnail · Preview video | Save the .toe in place; refresh the project icon and preview/preview.png; record preview/preview.mp4 — companion |
| Heartbeat | Hand the session to the Heartbeat watchdog — companion |
| Add to project ▾ | Local .tox, From URL / GitHub, From package — see Components from anywhere — companion |
| Relaunch… | Confirm dialog — pick the TD version there, optionally killing the current process first |
| Kill | Terminate the TD process (with confirmation) |
| Windows | The session's OS windows — focus, minimize or restore each, or all at once |
| ⋯ | Reveal the .toe in the file manager, Copy path, and Open Envoy panel for an Embody project |
Actions marked companion appear once the session runs the companion TOX. Right-click a card for the same verbs, plus whatever installed FNSTools packages add.
Accidental-kill insurance: a session the launcher started that ends — killed or crashed — and any session you kill from the launcher stays on the tab, below an Ended divider, one row per project. Relaunch starts it again with the build it last ran, no confirm needed (its process is already gone); Dismiss removes the row. Ended rows live for the current launcher run only.
Project media & sidecar
Each project card can carry an icon, a hero still, and a hover-playing preview clip. The gallery
reads them from a media folder beside the .toe — first match wins:
media_dirfrom the sidecar, if setpreview/— what the companion TOX writes{stem}_media/,{stem}.media/,media/,gallery/,_media/
Supported: png jpg jpeg webp gif bmp · mp4 webm mov m4v avi. Select the
project and thumbnails appear under the version header — Browse for fullscreen,
Folder to open it in the file manager. Clips stream only while hovered.
The sidecar (MyProject.tdxlu.json)
Everything the launcher knows about a project lives in one plain-JSON file next to the
.toe — no database, travels with the project:
{
"version": 1,
"tags": ["show/live", "client/acme"],
"title": "Optional display title",
"description": "Short blurb",
"hero": "preview/hero.png",
"media_dir": "preview",
"media": [
{ "path": "extra/cover.png", "kind": "image", "caption": "Cover" }
],
"gpu": { "monitor": 1 },
"windows": {
"apply_on_load": true,
"items": [
{ "path": "/perform", "display": 1, "justify_to": "specifydisplay", "size": "fill", "open": true }
]
}
}
Folder contents merge with explicit media entries; omit hero and the
first folder image is used. Tags you set in the launcher land here, and the file is yours to edit
by hand.
gpu and windows are written by the
Displays & GPU controls. Every write to this file — from the launcher,
from the companion, by hand — merges: keys one side does not recognise pass through untouched, so
the two can never clobber each other.
Media browser
Every movie, image, audio and geometry file a running project references, in one list.
It ships as the FNS_MediaBrowser package from the FNSTools store —
not released yet; the FNSTools tab lists it once it is. Installed, it fills the
Media files panel on the Sessions tab, while the same panel lives inside the package
itself — a complete tool with no launcher running. Selecting a reference shows a live preview of the referencing operator and what the file
actually is: resolution, duration, fps, and whether it carries audio — read from what the operator
already decoded, not guessed from the filename.
- Replace — point any reference at a different file. Nothing is copied and nothing is saved; it's the reference that changes.
- Missing files — a missing-only filter shows every reference whose file is gone. Per-row Replace fixes one; Locate missing… fixes them in bulk — point at the folder the files really live in (a moved drive, a restored backup) and every reference whose filename is found there is relinked in one go.
- Unused — media files sitting in the project folder that no operator references: the dead weight a backup or a Collect would ship without telling you.
- Sync timeline — stretch the timeline to exactly fit a clip and lock its playback to it. Clips running on their own Time COMP offer the choice of local or global timeline.
Nothing in the media browser saves the project behind your back — relinks land in the live session, and you decide when to save.
Companion TOX
The launcher can only start TouchDesigner. TDXLauncherUtility.tox is a small
component that lives in your project and listens on a local TCP bus — it's what lets the launcher
talk to a session that's already running. It's fully self-contained: detected and driven over its
own connection, nothing else to install.
Getting it into a project
It ships inside the installer. On first run it's copied into your Palette and pinned in the Toolbox as Launcher Utility. Any project needs it dragged into the root network once — expand a session's card on the Sessions tab and, when the project has no companion, it offers a ⠿ TDXLauncherUtility.tox drag handle. To stop repeating the drag, put the TOX in TouchDesigner's startup file (Edit → Preferences → General) — then everything you build from scratch has it from the first save.
What it unlocks
| Action | What happens |
|---|---|
| Save | Save the .toe in place, from the launcher or the palette tabs |
| Thumbnail | Capture preview/preview.png plus the project icon — the gallery picks both up automatically |
| Preview video | Record a hover-preview clip (preview/preview.mp4, up to 30 s). Paths are stored relative, so moving the project doesn't orphan them |
| Autosave | Arm a save timer inside the session — needs the free FNS_Autosave package, see Autosave |
| Collect… | Consolidate external media into the project — needs the FNS_Collect package, see Collect |
| Add to project ▾ | Drop components into the live network editor from disk, GitHub, any URL, or a package index — see Components from anywhere |
| Media files | The media browser's verbs, once the FNS_MediaBrowser package is in the project |
| Window layout | Read, save and restore the project's window placement — see Displays & GPU |
| Heartbeat | The crash watchdog listens for its TCP pulses |
| Tool commands | Actions published by components in the session, runnable from the quick-launch palette |
When a running session carries an older companion than the launcher holds, the session card's Companion row offers Update companion → v…, a one-click in-place update — parameter values you've set survive the reload. The TOX also has its own release channel, so updates reach you without waiting for an app release.
Using Embody/Envoy? Projects built with that optional toolkit for AI-assisted
TouchDesigner development carry a .mcp.json — the launcher detects it, shows the Envoy
port on the session card and an Envoy panel with the bridge's status, and can use
it as a last-resort transport for companion actions if the bus is ever down. A session without it
gets an Add Embody button on its Companion row: one click downloads the current
release and drops it in. Without Embody, nothing changes — the companion never needs it.
Palette tabs in TouchDesigner
With the companion (v0.21.0+) loaded, TouchDesigner's own Palette Browser
(Alt+L) grows two extra tabs next to the stock palette: TDXLU and
Patreon. The tabs are served by the launcher on a localhost control server
and powered by a Web Render TOP inside a small generic registry (FNS_PaletteRegistry)
that any FunctionStore tool can publish a panel into.
The TDXLU tab
Your Toolbox and the FNSTools shelf, plus a Commands sub-tab listing
every command your tools announced to the session's FNS_CommandRegistry — the
same list the quick-launch ? prefix shows. Each component row has a
↳ button that places it straight into the current Network Editor pane;
URL tools and FNS packages not yet on disk show a ☁ and download into
the cache on first use.
When the launcher carries a newer companion than the session runs, the tab shows a one-click Update button — parameter values you've set survive the reload.
The Patreon tab
Browse .tox components from the creators you support (or merely follow) and
load one into the selected running session. A Hide locked toggle filters
out posts you don't have access to — it's remembered between visits. The creator crumb bar is
sticky so the way back never scrolls away. The Patreon login stays in the launcher; TD
never sees the cookie.
How it works
The launcher serves the page on its localhost control server and hands the URL to each
session over the companion bus. The tab strip belongs to FNS_PaletteRegistry
— a small, reusable registry that any FNS tool can contribute a native panel to. The two
launcher tabs share one Chromium (CEF) process and swap pages via a route parameter; the
stock palette is untouched, and TD's native drag still works on the first tab. The browser
only runs while one of the launcher's tabs is showing, so there's no performance cost
when you're not using them.
Pin selected COMP
Select a COMP in the session's network editor, optionally pick a Toolbox category,
and click Pin selected COMP on the Toolbox sub-tab. The launcher's
companion saves it as a .tox into your TouchDesigner palette
(a TDXLU Toolbox folder, visible in TD's own palette), and pins it as a
local Toolbox tool. The same file is never pinned twice, and existing files are never
overwritten — a file that already exists in the folder is left untouched.
Session bar
Above the footer, a row of one-shot controls. Left side:
Save (writes the .toe in place), Thumbnail
(captures preview/preview.png and the project icon), Preview video
(records preview/preview.mp4, up to 30s), and an Autosave
chip showing the current state (e.g. "Autosave 10m" or "Autosave off") and toggling it once
FNS_Autosave is installed.
Right side: an optional health readout (fps, cook time in ms, dropped frames, GPU memory used/total)
when the launcher's Settings → Monitoring → Performance stats are on — the health
line turns amber when dropped frames climb.
Session sub-tab
The session’s tools, each with a live one-line summary, each opening full-height inside the tab with a Session › <tool> crumb to return to the overview:
- Collect & Save — Scan the project's external media files, untick what to leave behind, and collect with live progress. Needs the
FNS_Collectpackage. - Media — Show missing media references; re-root the relative paths that a folder move broke.
- Git — Current branch, change count, a message field, and Commit all (saves the project first, by default).
- Backup — Display what a backup to your configured folder would copy, and Back up now with a click.
- Phone Remote — The link as a QR code to scan right off the palette, and a one-click toggle to enable. With FNS_Remote in the project (not released yet) it shows that session's code, with a switch between the full page and the client link, and the button opens the package's own pairing window inside TouchDesigner. Without the package it shows the launcher's fleet link — controlling parameters from the phone needs FNS_Remote.
- Windows — The session's OS windows exactly as the launcher lists them (main window, torn-off panes named by content, Perform window) — focus, minimize, restore each, bring all forward, or save/apply/clear the project's window layout.
Commands: arguments and inline run
Commands can declare keyword arguments. They render as ghost chips after the label and
can be filled through a short prompt flow — or typed inline. For example, if a recorder
command declares seconds, typing rec 2 in the search field fills
it and fires immediately when the rest is covered by defaults. The registry validates
values by declared style before the tool's method is called, so a bad number or a missing
required argument refuses the run with a named error rather than half-doing it.
In the Commands sub-tab, the favourite star appears on hover over any command; pinned favourites stay visible. Favourites rank first in the list and carry a ★ Favourites group at the top.
The menu-bar button
The companion also puts a small TDXLU button in TouchDesigner's own menu bar, beside the path field — one click opens the companion's parameters without hunting for the component in the network. It is on by default and lives on the companion's Registry page as Menu Bar Icon; turning it off hides the button and leaves everything else alone.
It rides the same registry idea as the tabs: FNS_MainMenuRegistry, a shared place any FunctionStore tool can publish a menu-bar widget into, so several tools can sit up there without fighting over the bar. The companion carries its own copy, so a project that also installs the package from the store ends up with one registry, not two.
Turn it off
Disable the feature with Palette tabs in TouchDesigner under Settings → Advanced → Control panel server, or per-session on the companion's Registry parameter page (which also holds Install / Remove / Reload / Open Palette Browser buttons). Without a running launcher the tabs show a hint instead of content.
Autosave
TouchDesigner has no autosave. FNS_Autosave adds one: a timer that runs
inside the session and saves the project for you. It is a free package in the
FNSTools store — install it into a project and that session's card on the
Sessions tab grows an Autosave row: Open sets it up, and while it
is armed a ↻ chip beside the session's name shows the interval. The timer itself is
the package’s, so it keeps saving with the launcher closed.
Set the interval in minutes and pick what a save means:
| Save mode | What it writes |
|---|---|
| TouchDesigner Save | The same save TD's own menu does, so it follows your Increment Filename when Saving and Copy to Backup Folder preferences — with increment on, a new numbered .toe each time |
| Overwrite the open .toe | Always writes back to the file you're working in, whatever those preferences say |
Two skips keep it out of a show's way — only save when something changed and
skip while the project is in Perform Mode — plus a Save now that
ignores both. A save stalls the frame while the .toe is written, so the interval is
yours to pick; the dialog shows when the last save landed, or why the last scheduled one was
skipped.
The settings live on FNS_Autosave's own parameters inside the project, so the whole
feature works from inside TouchDesigner with no launcher running — the launcher's dialog and the
palette tabs' session bar edit the same values. The launcher reaches the
package through the companion, so the session needs both.
Collect
The "gather everything before the gig" button. Collect scans the running project for external
audio, movie, image and geometry references, copies the files into
{project}/collected/<category>/, relinks every reference relative, then saves.
- Dry-run first — the scan plan is a checklist grouped by media type. Untick a row to leave that file and its references alone, or toggle a whole type (video / audio / image / geometry / other) at once.
- Expression refs — a reference like
app.samplesFolder+'/Map/Banana.tif'is collected by freezing the evaluated file into a constant relative path. Opt out per run, or globally with the Freeze Expression Refs toggle. - Never touched — references already inside the project folder, bind/export-driven parameters, and Embody-managed files. Originals are never moved or deleted.
Collect ships as the FNS_Collect package from the FNSTools
store — not released yet; the FNSTools tab lists it once it is. It works entirely inside
TouchDesigner — its own panel UI carries Scan, Collect & Save, the freeze toggle, and
the clickable scan plan, with no launcher needed — and when TDXLU is running it announces the same
actions into the Sessions view. Pair it with
the media browser's Unused scan to see what you'd be shipping that nothing references.
FNSTools
The FNSTools tab is a store, an installer and a settings editor for the FNSTools toolkit — the same catalog as tools.functionstore.xyz/get, without leaving the launcher. Browsing, downloading and installing are free; the Plus packages unlock with a membership — see Free & FNSTools Plus.
Launcher capabilities
Some packages announce their commands to the running session, and TDXLU renders them where they
belong — in the Sessions view and its right-click menu. A handful get purpose-built UI rather
than a plain button: FNS_Autosave (free) arms the autosave
timer, FNS_Collect drives the Collect checklist,
FNS_MediaBrowser is the media browser, and
FNS_Remote serves the phone, multi-touch included.
FNS_Collect, FNS_MediaBrowser and FNS_Remote aren't released
yet — the tab hides unreleased tools until they are.
Each is a complete TouchDesigner tool in its own right — it runs from inside TD with the launcher closed, and its panels are its own. Installing one alongside TDXLU simply lights up the session view as well; the launcher itself ships none of these features, so an install is what adds them, and an uninstall is what takes them away.
Catalog
The current release rendered by category, each package with its description, version and docs
link. What the target session already has is pre-checked, with ✓ 1.1.0 and
1.1.0 → 1.2.0 update badges; a dot marks what's already mirrored on this machine.
An All / Free / Plus filter and Select All / None (plus a
checkbox on each category header) act on the rows shown. Plus packages carry a tier badge —
✦ Base or ✦ Pro while locked, ✓ once they're
yours — and a locked badge opens Function Store's
Patreon join page;
Sign in for Plus… unlocks the ones your membership covers. Tools that aren't
released yet don't appear.
Tick the tools the project should have, then:
| Action | What happens |
|---|---|
| Install into <session> | Downloads what's missing (sha256-verified), then drives the toolkit's own installer inside the running session over the companion bus, after a Confirm step. No toolkit in the project yet? The one-drop bootstrap goes in first. A session without the companion is listed under Needs the companion, with the drag handle instead |
| Download selection for offline use | Stocks the local store without touching any session — no TouchDesigner needed at all. The store is machine-wide, so TD's own installer reads it later |
| Mirror the whole release | Download every package in the release locally, for working offline |
| Copy Textport install script | The one-line paste for a machine or session the launcher can't reach |
| Open store folder | Show the machine-wide store on disk |
Tool settings
The toolkit's global, per-tool configuration, edited from the launcher:
- With a session running — the launcher talks to the toolkit's own settings service, so you get real parameter metadata: menus, ranges, validated writes that TouchDesigner persists itself. Parameters driven by a bind or an expression are shown but stay read-only.
- With nothing running — the config file is edited directly (atomically, with a
.bakkept). Tools pick up their section the next time they load.
On the Palette tab
The Palette tab grows an FNSTools shelf next to the Toolbox: every package as a standalone component, grouped by category. ◆ means it's on this machine — drag it into a network or place it into a session with ↳; ◇ downloads on click; ◑ flags a store copy that's gone stale.
Tools installed this way can also publish actions to the quick-launch palette — see Tool commands. Settings → Library → FNSTools sets the release bucket URL, in case you run a mirror or a staging bucket instead of the official one.
Phone Remote
One tap on the header's 📱 Phone button enables LAN access and shows a QR — scan it and the remote opens on your phone (same Wi-Fi, token-gated). Add it to the home screen once and it installs as a standalone app; the pairing survives restarts.
The page is your fleet remote: every session at once, and what the launcher can do to each — launch, focus, relaunch, kill. Controlling what is inside a project — parameters, multi-touch, save and snapshot — is the FNS_Remote package's job, and this page links you straight to it per session. FNS_Remote isn't released yet; until it is, sessions show no such link.
- Every session is a tab — live or ended. The open tab shows the session's facts, a heartbeat chip when the watchdog is armed, a live perf readout (fps / cook / drops / GPU / CPU / RAM), and Focus / Relaunch / Kill / Dismiss. Ended sessions relaunch with one tap; + Launch opens any recent project, so the phone is a remote of the whole launcher.
- Hold-to-confirm — destructive taps (Kill, and live-session Relaunch) arm on press-and-hold with a filling bar and a haptic buzz; release early to cancel.
- Straight into a session's own controls — a session running FNS_Remote shows Open remote on its tab, and the tap lands on that session's own page, served by TouchDesigner itself with its own address and its own code. That is where the exposed parameters, the multi-touch pad and the save / snapshot / record buttons live. A second Client link button hands out the reduced page — only the controls that were exposed, nothing else — for an operator or a client.
- Why the split — this page is the fleet: the things only the launcher can do to a TouchDesigner process, across every session at once. What happens inside one project belongs to that project, so it keeps working with the launcher closed and a phone always talks to the session it is actually controlling. A session without the package simply shows no link, and says so.
- Yours to run — Settings → Advanced → Control panel server holds the port (changing it rebinds a running server live), the LAN toggle, and Stop server. Regenerate code in the 📱 Phone dialog mints a new code and the previous link stops working.
Phone multi-touch
The phone is also a multi-touch surface for the network — served by the FNS_Remote
package from the FNSTools store (not released yet; the FNSTools tab lists it
once it is), which hosts the page from inside TouchDesigner and therefore works with the launcher
closed. Install it, drop it into a project,
turn Phone Touch on, and every finger arrives as CHOP channels — several phones
at once:
| Output | Channels / rows |
|---|---|
null_touch | t<N>x, t<N>y, t<N>force, t<N>active per touch slot, plus touchcount and clients |
table_clients | One row per connected phone: address, screen size, user agent |
Y is flipped by default so 0 is the bottom of the phone screen — matching TD's bottom-up UV
convention. Positions are 0–1 unless Normalize is off. Three buttons build the receiving operators
for you (Select CHOP, Select DAT, or one receiver COMP holding both), all referencing the
op.FNS_REMOTE global shortcut so they keep resolving wherever you drag them.
Touch only, by design — motion sensors would drag TLS certificates into a live rig; multi-touch
works over plain HTTP everywhere.
Toolbox
A favorites shelf pinned at the top of the Palette tab, in categories you define. It lives in the launcher config, so it's the same set no matter which palette folders are scanned. A tool is one of:
| Kind | Source | Behavior |
|---|---|---|
| Local | Any .tox path on disk | Drag straight into TD; flagged (missing) if the file vanishes |
| URL / GitHub | Direct .tox URL or owner/repo[#Asset.tox] | Fetched into the cache on pin; ⟳ re-fetches, so a GitHub tool tracks its latest release |
| Package | pip spec for the configured index | Install into a running project via From package… |
Pin with + Tool, from any palette .tox, or just drop a file onto the
Toolbox — onto a category row to pin it there. Tools carry an optional label and notes. A
Load .tox into bar names the running session with the companion and sends the
selected component into its network editor; every row also gets a quick ↳ hover
action doing the same.
Components from anywhere
A session card's Add to project ▾ offers Local .tox…, From URL / GitHub… and From package…; each drops the component into the live network editor through the companion.
From URL…
- Any direct
.toxURL on any host — object storage, CDN, LAN address; presigned query strings are fine. owner/repoor a GitHub URL resolves the latest release asset; add#Asset.toxto pick a specific one.- Downloads are cached keyed by URL + filename; redirects followed (10 hops), 512 MiB cap. The URL must contain the
.toxin its path — share links that hide the filename aren't resolved yet.
From package…
Browses a configurable package index (defaults to PyPI with a tdp- name filter — clear
it for a small curated index) or takes a custom uv / git+https spec,
installs it into the project's .venv — with uv when it's on the machine,
otherwise with the env's own pip — resolves the package's ToxFile, and loads it. No
.venv next to the .toe yet? From package… sets one up first, and
Set up Python env on the session card's Companion row does it on its own:
TouchDesigner's TDPyEnvManager builds the env in one click (Derivative's disclaimer
asks first). The Companion row shows the env's status.
Both dialogs remember successful adds and offer them back as clickable Recent entries.
Git & backup
Git panel
Changes and history, diffs, stage/commit, branch, pull/push. Push and pull use your installed Git
and its credentials; an optional GitHub token (Settings → Accounts → GitHub)
overrides HTTPS auth. Creating a repo seeds a TouchDesigner-aware .gitignore, so
Backup/, increments and crash autosaves stay out of the first commit.
Backup panel
Project folder ↔ USB or any synced folder, with include/exclude globs and a max file size.
Backup, restore, sync — no deletes, ever. Or connect Google Drive, Dropbox,
OneDrive or Box directly: a one-time rclone download, sign in via your browser, then
the service is a backup destination.
Settings → Backup holds the root folder, the globs and the size cap, plus Skip TouchDesigner's Backup/ folders — off by default, since some people work straight out of those numbered saves. A destination inside the project folder, or one that contains it, is refused.
Heartbeat watchdog
A tray watchdog for installations: the companion sends TCP pulses, the launcher listens. On a stall it can relaunch the project automatically and send an SMTP email alert — same on relaunch, so you know the show restarted before anyone calls. Multi-project: watch several sessions at once. Arm it from the session's Heartbeat action — offered once the session runs the companion, whose pulse the watchdog listens for — or the Heartbeat panel; the phone remote shows the armed state, last pulse and restart count. Ports, timeouts and email alerts live under Settings → Monitoring.
Settings & shortcuts
- Settings, paged — eight pages in a sidebar (General, Keys, Quick Launch, Library, Backup, Accounts, Monitoring, Advanced) with a search box that finds a setting by the name of its control. Every "open Settings" button in the app lands on the section it means.
- General — Theme & view (colour theme, gallery or list, Show the FNSTools tab); Tray & login (tray icon, close-to-tray, start at login, minimized to the tray); When TDXLU opens (the tab it starts on, or the one it was left on); Opening a project from Finder/Explorer (what to launch a double-clicked
.toewith when its exact TD build isn't installed: latest, closest, a pinned build, or always ask); After launching a project (switch to Sessions, hide to the tray, or quit); Updates (the daily check, and versions you skipped); Lists & prompts. - Keys — the in-app shortcuts and the global hotkeys.
- Rebindable keys — tab switching, search, the window switcher (Alt/⌥+W), Settings, Help, launching the startup file (Ctrl/⌘+D), the view toggles, folder reveal, the README keys, and the panel toggles (unbound by default) are all editable, each with Reset. Template slots stay fixed on Ctrl/⌘+1…9 — one binding per slot.
- Three global hotkeys — the main window, Quick Launch, and the main window on the Palette tab; each with its own combo and on/off toggle.
- Quick Launch — the five prefix characters, Rank by usage, which tool commands show, favourites, and command presets.
- Library — extra palette folders, the package index behind From package…, and the release bucket the FNSTools store reads from.
- Accounts — FNSTools Plus sign-in, the GitHub token, and the Patreon login.
- Monitoring — the Heartbeat watchdog, its email alerts, and the Performance stats.
- Advanced — the control panel server behind the Phone Remote and the palette tabs, Migrate settings (export/import the whole configuration to another machine), and maintenance.
Displays & GPU
For machines driving a show off more than one graphics card. Two separate things, often confused: GPU affinity binds a TouchDesigner process to one card, and window placement puts that process's windows on the displays attached to it. You want both — a window straying onto another GPU's desktop copies pixels between cards, which is the cost affinity exists to avoid.
GPU affinity — set at launch
Right-click a project → GPU affinity → pick a monitor. The launcher passes
TouchDesigner's own flag when it starts the process
(-gpuformonitor, or -gpubusid for an exact card set by hand in the
sidecar). Windows only, TouchDesigner 2022.20000 and up — the menu does not appear otherwise, nor
on a machine with a single display.
It applies on the next launch: a process can only be bound at start. TouchDesigner counts
monitors left→right, bottom→top — not the order Windows lists them — so confirm a
binding took in the Monitors DAT's affinity column.
Window placement — set in the session
TouchDesigner has no command-line option for which display a window opens on; placement lives in
Window COMP parameters. So the companion TOX does it from inside the
running session — reading and writing display, justification, offset, size, borders
and always-on-top, and opening or closing a window.
Save the current arrangement into the sidecar and the companion restores it shortly after the
project loads, once TouchDesigner's own startup Window Placement has run. A layout can be kept on
file without being restored (apply_on_load: false). Placement parameters driven by an
expression are never overwritten — they are reported back as locked instead. Saves cover
project-level windows only: a loaded palette contributes dozens of internal popup windows that
nobody wants in a sidecar.
Free & FNSTools Plus
Every feature of the launcher is free, with no account and no licence key: launching with build detection, versions, tags, the quick-launch palette, the palette browser and Toolbox, session control, companion basics (save, thumbnail, preview video), the fleet Phone Remote, window management and the performance readout, loading components from disk, URLs and packages, Patreon import, git, backup, the Heartbeat watchdog, multi-GPU display control, and the FNSTools store and installer — including the Sessions-view hooks for the launcher capabilities its packages add. The packages themselves are free or Plus, as their badges say.
What a membership pays for is the FNSTools Plus packages: the tools on the
FNSTools tab that carry a tier badge. Each one unlocks at the tier its badge names —
Base or Pro — on Function Store's
Patreon.
FNS_Autosave is free. FNS_Collect, FNS_MediaBrowser and
FNS_Remote — the package that controls what is inside a running project from
a phone — aren't released yet. The launcher links you to these packages; it does not ship them.
Sign in once per machine from Settings → Accounts → FNSTools Plus or with Sign in for Plus… on the FNSTools tab, then install the packages from the FNSTools tab. Cancelling never locks anything already in your projects.