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.
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 → Opening a project from Finder/Explorer: 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 a few seconds after startup, plus About → Check for 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". Launches and
in-app updates are unaffected after that.
The tabs
| Tab | What it holds |
|---|---|
| Recent | 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. |
| Current | TouchDesigner sessions running right now — including ones opened outside the launcher, found by process scan. An inspector, not a launcher: see Running sessions. |
| Templates | Starter .toe files in your own order (Ctrl/⌘+↑/↓ reorders). Each position gets a shortcut — Ctrl/⌘+1…9 launches that template from anywhere in the app — and 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, no session required to download. See FNSTools. |
| Patreon | Browse .tox components from creators you support and load one into a running session. Needs your Patreon session cookie (Settings → Patreon explains where it lives and why a cookie — Patreon's official API can't list post attachments). |
Tab / Shift+Tab cycle the tabs, or Alt/⌥+1…6 jumps to one. 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 Current tab also carries a badge with the number of sessions running right now.
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 | |
| 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. 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, Snapshot, 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 → Hotkeys — the overlay's placeholder and hints follow whatever you pick. Three global hotkeys are configurable independently: 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 — a list of every command with checkboxes for favourite status
- 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 — the full contract is
docs/fns-command-registry.md in the TDXLPP repository. 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 |
| 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 Current 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.
| Action | Effect |
|---|---|
| Focus | Bring the TD window to the front |
| Explore | Reveal the .toe in the file manager |
| Watch | Hand the session to the Heartbeat watchdog |
| Relaunch… | Confirm dialog — pick the TD version there, optionally killing the current process first |
| Kill | Terminate the TD process (with confirmation) |
Accidental-kill insurance: a session the launcher started that ends — killed or crashed — stays as a dimmed ended row. One click relaunches it with the build it last ran, no confirm needed (its process is already gone); Dismiss removes the row. Stale 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. You can edit the file by hand — or author it from inside
TouchDesigner: the companion's Media page edits the project's title, description, tags and
gallery hero, saved to the sidecar. Use Preview As Hero captures a still and
assigns it in one click. Launcher-managed fields are never touched.
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:
install it and the launcher shows it as a side panel on the Current 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 — the Companion bar on the Current tab offers a drag handle when a session doesn't have it. 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 phone |
| Snapshot | Capture preview/preview.png plus the project icon — the gallery picks both up automatically |
| Record | 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 |
| Load tox / From URL / From package | Drop components into the live network editor from disk, GitHub, any URL, or a package index — see Components from anywhere |
| Media / Sidecar | The media browser (from the FNS_MediaBrowser package) and sidecar authoring pages, usable inside TD with no launcher running |
| Heartbeat | The crash watchdog listens for its TCP pulses Pro |
| 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 Companion bar offers 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 and shows an
MCP panel with the Envoy bridge's status and port, and can use it as a last-resort
transport for companion actions if the bus is ever down. Without it, 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 per session. 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), Snapshot
(captures preview/preview.png and the project icon), Record
(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.
Right side: an optional health readout (fps, cook time in ms, dropped frames, GPU memory used/total)
when the launcher's Settings → Performance monitor is 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.
- Media — Show missing media references; re-root the relative paths that a folder move broke.
- Git Pro — Current branch, change count, a message field, and Commit all (saves the project first, by default).
- Backup Pro — 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, a one-click toggle to enable, and the list of COMPs your phone's Control page exposes; tap to add more via the network browser.
- 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.
Turn it off
Disable the feature in Settings → Companion → Palette tabs in TouchDesigner, or per-session on the companion's Palette parameter page (which also holds Install / Remove / Reload / Open Palette Browser buttons). Without a running launcher the tabs show a hint instead of content. The feature is part of the paid tier, like the other companion features.
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 and the launcher grows an
Autosave button on the Current tab's Companion bar (off until you turn it on,
showing the interval while it runs). 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 the companion's own Autosave parameter page, so the whole feature works from inside TouchDesigner with no launcher running. Needs companion 0.10.0 or newer — the Companion bar offers the in-place update if the session is on an older one.
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. 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 Current 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. It's part of the free tier.
Launcher capabilities
Some packages announce their commands to the running session, and TDXLU renders them where they
belong — in the Current 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.
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.
Store
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 installed ✓ and
1.1.0 → 1.2.0 update badges; a dot marks what's already mirrored on this machine.
Tick the tools the project should have, then:
| Action | What happens |
|---|---|
| Install | Downloads what's missing (sha256-verified), then drives the toolkit's own installer inside the running session over the companion bus. No toolkit in the project yet? The one-drop bootstrap goes in first |
| Download only | 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 |
| Copy Textport script | The one-line paste for a machine or session the launcher can't reach |
| Refresh store | Mirror the whole release locally, for working offline |
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 → 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.
- 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 / Save / Snapshot / Record / Relaunch / Kill. 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.
- Live parameters — the exposed controls with their parameter pages as tabs, search, −/+ nudge steppers on integers, and a ★ pin that floats your key faders to the top (remembered per project). Expose more COMPs from the phone itself via a lazy network-tree browser.
- Client link — a second pairing code for operators and clients: only the controls you authored, no session actions, no launching, no browsing. Enforced by the server — every other API route is refused for that token — not merely hidden in the page. Regenerate invalidates both links at once.
- Yours to run — Settings holds the port (changing it rebinds a running server live), the LAN toggle, and Stop server.
Phone multi-touch
The phone is also a multi-touch surface for the network — served by the FNS_Remote
package from the FNSTools store, 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 Pro
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
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 with uv pip install into the project's .venv, resolves the
package's ToxFile, and loads it. Requires uv on PATH and a
.venv next to the .toe — the Companion bar shows env status and
Ensure env sets one up via TDPyEnvManager.
Both dialogs remember successful adds and offer them back as clickable Recent entries.
Git & backup Pro
Git panel
Changes and history, diffs, stage/commit, branch, pull/push — with a GitHub PAT in Settings for
private remotes. 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.
Heartbeat watchdog Pro
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 Watch action or the Heartbeat panel; the phone remote shows the armed state, last pulse and restart count.
Settings & shortcuts
- Settings, paged — ten categories in a sidebar 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.
- Rebindable keys — tab switching, search, launching the startup file, the view toggles, folder reveal and the README keys 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.
- Tray & login — close-to-tray, quit-after-launch, start at login (minimized to the tray).
- Opening 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. - FNSTools — the release bucket the FNSTools store reads from.
- Settings export/import — carry the whole configuration to another machine.
Displays & GPU Pro
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 & Pro
The free tier is a finished launcher, not a demo: launching with build detection, versions, tags, the quick-launch palette, the palette browser, session control, companion basics (save, snapshot, record), the Phone Remote, window management and the performance readout, loading components from disk, URLs and packages, and the FNSTools store and installer — including the launcher capabilities its packages add to the Current view. Pro adds Toolbox, Patreon import, git, backup, the heartbeat watchdog, and multi-GPU display control.
Unlock with any paid Patreon tier or a license key (pay once, lifetime updates, up to three computers) — or start the 14-day Pro trial from inside the app, no account, no card. Cancelling never locks the app; you drop back to the free tier. The full split →