TOOLS FOR TOUCHDESIGNER

FNSTools

Save operator templates, promote parameters by dragging, map MIDI and OSC, and navigate your networks with shortcuts. FNSTools is a collection of TouchDesigner tools you can install individually.

Most tools are free and MIT licensed. Tools that unlock with Patreon are marked Patreon.

A few things you can do

Recording coming soon

Promote a parameter

Drag a parameter onto a component to promote it.

Read the instructions →
Recording coming soon

Reuse an operator setup

Save an operator template and bring it into another network.

Read the instructions →
Recording coming soon

Navigate with shortcuts

Bookmark a network location and jump back to it.

Read the instructions →

Ready for the show

One switch puts FNSTools into Perform Mode. The overlays and helpers you use while building stop, the FNS button turns red, and everything your show uses keeps running.

Switch back and every tool returns as you left it. Perform Mode follows TouchDesigner's own (F1), and a show file saved with it on opens ready to go.

How Perform Mode works →

What's in the toolkit

85 packages, each installing on its own. Core goes in as a unit; everything else is optional. Open a tool to see what it does, tick the ones you want and take them to the picker.

Interface The window, the menus, the dialogs and the keys. 7 tools
  • BorderlessTDBorderless TouchDesigner window, plus timeline hiding.Docs ↗8 features
  • ColorUIOperator and family colour palettes, with the active palette roaming through config.Docs ↗10 features
    • Recolour UI elements: Every colour in TouchDesigner's interface in one list, each with its default and a reset.
    • Operator family colours: Recolour whole operator families, POPs included.
    • Save and reapply your colours: Your colours are stored in the component, applied as the project opens, and follow you to other projects and through updates.
    • Filter the list: Narrow the list by name with wildcards, to changed colours only, or to colours close to a reference colour.
    • Change many at once: Give one colour to everything listed, or to a whole group, and reset a group in one go.
    • Randomize and undo: Throw random colours at the whole interface, then put your own colours back with one click.
    • Share your colours as JSON: Export writes only the colours you changed to a JSON file, to keep with a project, commit or send to someone.
    • Import a JSON palette: Import applies such a file; its colours take precedence over the ones stored locally, and elements this build does not know are skipped.
    • Open from Hub or quick-launch: The colour editor opens from the OpColor tab of Hub (the FNS button in the main-menu bar), Open color UI in quick-launch, or Open UI on the component.
    • Console tab in the browser: With Expose to Console on, the same editor is served in the browser as the ColorUI tab of Console, the toolkit's web front.
  • CommandPaletteA command palette inside TouchDesigner: every command your FNS tools declare and TouchDesigner's own palette components in one ranked list, opened with a hotkey and aware of what you are looking at. Manage favourites and hidden commands from its tab in Hub.Docs ↗16 features
    • Find any command on one key: Opens over the network you are in with every command your FNS tools declare, TouchDesigner's built-in commands and its palette components in one ranked list.
    • Context-aware ranking: Commands about the parameter under your mouse, the selected operator or the current network come first.
    • Typo-tolerant search: Initials, typos, letters in order and British or American spellings all find a command, with strict matches ranked first.
    • Search by what a command does: A word from a command's help or its tool's documentation finds it, so copy finds PasteFromClipboard, and the row says why it matched.
    • Actions first for words like copy: A word that starts command titles, such as copy, open or reset, lists the commands that start with it first, then components named with it.
    • Scoping prefixes: A leading character narrows the list to commands, tool commands, components or one tool's commands.
    • Navigate the network: / is the root, ./ where you came from and each .. a level up; Right drills into a row and Left backs out.
    • Step through a command's values: A command that takes values asks for them one at a time: a menu as pick rows, anything else as a field naming its type and default.
    • Presets that run on Enter: Alt+S saves a command with its values as a preset row, which runs on Enter without prompting.
    • Place palette components: TouchDesigner's palette components, your own folders included, land on your mouse ready to place, or drag into any pane.
    • Stars and hidden commands: Star commands with Ctrl+D to lead their tier, and hide the ones you never use with Ctrl+H.
    • Rank by usage: Commands you run often rank higher, the lift fading over a couple of weeks unused; Rank By Usage switches it off.
    • Query history: Alt+Up and Alt+Down cycle through the queries you have run before.
    • Commands tab in Hub: Every registered command, hidden ones included, with Star and Hidden toggles shared with TDX Launcher Ultra.
    • Install from the palette: A tool you can install but have not yet shows as an Install row; Enter installs it.
    • Call extension methods: ~ lists the public methods of a COMP's extensions and calls them with the arguments you type.
  • HotkeyManagerUnified hotkey discovery, conflict detection and rebinding UI across the whole toolkit.Docs ↗8 features
    • Find every hotkey in the project: Scans the whole project, toolkit tools and your own components alike, for Keyboard In CHOPs and DATs and shortcut parameters, one row per binding.
    • Rebind by pressing keys: Click a Hotkey cell and press the new keys; a combo already in use asks you to press it again to take it.
    • Reset a binding: Right-click a Hotkey cell to put that binding back to its default.
    • Conflict detection: Combos bound by more than one tool are flagged CONFLICT, and clicking the flag jumps between the rows that share it.
    • Copies listed once: A component copied around the project is one row, and rebinding it rewrites every copy.
    • Persist bindings across projects: Toolkit hotkeys follow you to other projects and through updates, and any other binding can opt in with a tag or a click.
    • Save, load and defaults: Save, reload or put back the default bindings, or force the defaults on every load to get a machine back to a known state.
    • Discovery rules for tool authors: Where to put a binding so it is found and gets a default that survives renames and moves.
  • OpMenuModsOP Create dialog extras: IO filter buttons, your own search keywords per operator type, and acronym search (type m f o for Movie File Out).Docs ↗5 features
    • Filter IO operators: Buttons at the top right of the OP Create dialog show only IO operators, hide them, or show everything.
    • Custom search keywords: Give any operator type your own search words, so typing music finds Audio File In and webcam finds Video Device In.
    • Keyword table in Hub: The keywords live in one table, edited from the SearchWords tab of Hub and synced across project files.
    • Acronym search: Type the start of each word of an operator's name, such as m f o, to find Movie File Out.
    • Remove cleanly, shared with other tools: The mods apply through OpMenuRegistry, so several tools can decorate the dialog together and it returns to stock when they are removed.
  • QuickPanePane layout shortcuts.Docs ↗4 features
    • Split by drag gesture: With a COMP selected, hold the modifiers and drag toward a side: a pane opens there, already inside the COMP and homed. The same drag closes it.
    • Split by arrow keys: With a COMP selected, Ctrl+Shift and an arrow key splits on that side and drops you into the component; the same key closes the pane it opened.
    • Open a pane on each side at once: Keeps a pane on each side at once, and marks the panes it opened with a green border so you can tell them from your own.
    • Split pane command: A Split pane quick-launch command asks for the direction, right by default, so you can split without either gesture.
  • SearchPaletteSearch field for TouchDesigner's palette browser, installed into the palette on startup. Based on Yea Chen's TD-SearchPalette.Docs ↗9 features
    • Find components in the palette browser: A search field in TouchDesigner's palette browser lists the matching components from every folder; it is put in every time a project opens, or added and removed on demand.
    • Focus the field by hotkey: Ctrl+Shift+F brings TouchDesigner's own palette tab to the front and puts the cursor in an empty search field; the key is rebindable in HotkeyManager.
    • Ranked substring search: Finds a word anywhere in a name, combines several words, and lists exact, prefix and word-start matches first.
    • Wildcard patterns: Words with * or ? match as patterns from the front of a name, so a wildcard can only widen the search.
    • Exclude matches with a minus: A word starting with - takes its matches out of the results.
    • Fuzzy fallback for typos and spellings: When nothing matches as typed, it tries the other side's spelling, initials, a typo, and finally letters in order.
    • Folder search: A word containing / matches the palette folder, so tools/ on its own lists a whole folder.
    • Latest version only: Numbered or duplicate copies of one component collapse to the most recently modified file.
    • Jump by word in the field: The field edits like TouchDesigner's own text fields, including Ctrl+Left and Ctrl+Right to jump by word.
All 60 Interface features →
Network Place, find, swap and move between operators. 15 tools · 1 Patreon
  • AltSelectAlternative selection helpers for operators in the network editor.Docs ↗5 features
    • Drag out a Select with Alt: Alt-drag a selected operator and it stays where it was, while a Select pointed at it appears where you let go.
    • Match the operator family: Works for TOPs, CHOPs, SOPs, DATs, POPs and panel COMPs, each getting the matching Select.
    • Ready to use: The new Select arrives selected and current, with its viewer on and a tint that marks it as a reference.
    • Undo in one step: A single undo takes the Select away again.
    • Find them later by tag: Every Select it makes is tagged FNS_AltSelect, so a Find or a findChildren(tags=...) sweep can list them.
  • AutoCombineHold Alt while placing a generator TOP to have it come in pre-set to composite over its input.Docs ↗5 features
    • Composite as you place: Hold Alt while placing a generator TOP such as a Noise, Circle or Rectangle onto a chain, and it comes in set to combine with its input.
    • Blend and format defaults: The Combine with Input mode, the Operation, the Pixel Format and the Noise TOP's RGB mode all come from your settings on AutoCombine.
    • Alt or another modifier key: Pick the key that arms the gesture; the default chooses the right one per platform.
    • Skip reloads and large batches: Acts only on the operator that just appeared in the network you are looking at; operators surfacing deeper down and large batches are left alone.
    • Toggle from quick-launch: The Toggle AutoCombine command switches it off and on without opening its parameters.
  • AutoResHold Alt while placing a generator TOP to have its resolution follow the project (or the panel it sits in).Docs ↗5 features
  • CookBarDraws a bar above every operator in the network you are viewing: its cook time on top, its GPU memory below, so the expensive parts of a network stand out at a glance, with the numbers beside them if you like. A Top List in a corner names the heaviest operators and takes you to one with a click. Its toolbar button switches it on; Ctrl+right-click the button for a global Hog CHOP to stress-test against. Based on Anton Heestand's Cook Bar.Docs ↗9 features
    • Toggle from the toolbar or quick-launch: Click the toolbar button, run Toggle cook bar from quick-launch or switch Active on; the button lights up while the bars are on.
    • Cook time at a glance: A bar above each operator shows its CPU plus GPU cook time, green to red up to 1 ms and growing taller past it, with stripes while it cooks.
    • GPU memory at a glance: A bar below each operator shows the GPU memory it holds, cyan to blue up to 100 MB and growing taller up to 1 GB.
    • COMP totals: On a COMP, the bars add up the cook time and GPU memory of everything inside it, so you can find the heavy part from the top of a project down.
    • Cooking-off marker: A COMP whose cooking is switched off gets a grey hatched bar, so a frozen network explains itself.
    • Numeric values beside the bars: Each bar can write its number beside it, cook time above the operator and GPU memory below.
    • Top List of the heaviest operators: A corner list names the heaviest operators by cook time or GPU memory; click a row to select that operator and zoom to it.
    • Stress test with a Hog CHOP: A global Hog CHOP eats part of every frame on purpose, so you can watch how the network copes; the toolbar button turns red while it runs.
    • Overlay that leaves the network untouched: The bars draw on the shared network overlay, which leaves before every save, so display flags, annotations and operators stay as they were.
  • GlobalOutSelectBrowse Global OP Shortcuts and the out operators inside them in a tree, and drag any of them into a network as a Select.Docs ↗4 features
  • iopBrowserBrowse the internal operators and the OP tree of the network you are in, from a popup opened off the pane bar. One browser instance serves every pane; the bar carries only the button.Docs ↗6 features
    • Browse the iops in reach: A button on the pane bar lists the iops available from the COMP you are in, those of every parent from the nearest up.
    • Drag or jump to an iop: Drag any listed iop straight into the network editor, or use the list to navigate to it.
    • Find an operator in the OP tree: The popup carries the network's OP tree with search, for finding an operator without leaving the pane.
    • Add an iop by drop: Dropping an operator on the button makes it an internal operator shortcut of the network you are in, root included; CustomParTools, if installed, asks for the name.
    • Open from ParentHierarchy: ParentHierarchy opens the browser for you when both are installed.
    • Share one browser across panes: Each pane bar carries only the button, and every button calls the same browser.
  • OpenOpPatreon · BaseA one-button shortcut to a deeply nested operator: drop it on the field once, then a pulse opens its parameter window, its viewer window, or both.Docs ↗3 features
  • OpTemplatesA library of preconfigured operator templates to drop into a network.Docs ↗15 features
    • Template by drag and drop: Drop an operator set up the way you like onto the toolbar icon and it becomes a template for its type.
    • Place a template on create: Hold the alternatives shortcut (Ctrl+Alt by default) while placing an operator marked >>> in the OP Create dialog, and your template goes down in its place with the wiring kept.
    • Variants of one operator type: Keep as many named variants of one operator type as you like and pick one from a menu as you place it.
    • Operator chains as templates: Operators wired after the template operator are placed together with it, such as the shipped LFO, Math and Null.
    • Network snippets as templates: A Base COMP in the type's template holds a whole network, such as a Render TOP with its geometry, camera and light, placed as one template.
    • Substitute a COMP for the operator: A Base COMP inside a snippet's Base COMP makes the template land as that COMP.
    • Insert into a connection: Templates, chains and networks drop into an existing wire, with In and Out operators marking where a network connects.
    • Shared alternatives menu: Other tools that offer themselves for the same operator type are listed beside your templates, with tools from your store below a divider.
    • Global or per-project library: Keep one library for every project on the machine or one inside the project file, or follow the toolkit's Config Scope.
    • Push project templates to global: Push To Global copies the project set to the global file whenever you like, asking first when the file exists.
    • Save the templates: Under global scope, middle-click the toolbar icon or press Save Templates; under project scope, saving the project saves them.
    • Open the library: Left-click the toolbar icon, or run Open templates from quick-launch, to browse or edit the library in a floating network editor.
    • Edit one type's templates: Right-click a type in the OP Create dialog and pick Edit Templates... to work on its templates.
    • Starter set: Ships with templates for 18 operator types to start from.
    • Library kept across upgrades: On the first start after an upgrade it finds the newest library you saved under an older name, and keeps the file it replaces beside it.
  • ParentHierarchyHover a parent in the pane-bar path with Alt to see its parent shortcut, global shortcut and internal operators, and Ctrl to see its custom parameters and values. Click any item to copy a reference to it. It works on the path you already have and adds no button of its own.Docs ↗8 features
    • Shortcuts on Alt-hover: Hold Alt over a COMP in the pane-bar path to see its parent shortcut, global shortcut and internal operators.
    • Parameter values on Ctrl-hover: Hold Ctrl to see where each iop points and every custom parameter with its value; press Ctrl again to poll the values.
    • Copy a reference with a click: Clicking any listed item copies a reference to it, ready to paste into an expression or script.
    • Open parameter customisation: Right-clicking a listed parameter opens the parameter customisation window for it.
    • Hover the existing path bar: Works on the path the pane bar already shows, so the bar keeps its buttons and its length.
    • iopBrowser integration: With iopBrowser installed, the same hover also lists the internal operators in its browser.
    • Extension API on hover: Each COMP lists its extensions by Extension Name or class; hovering one expands its promoted methods with signatures, properties and typed attributes.
    • Copy extension calls: Clicking an extension or member copies an ext. reference, such as ext.TimelineToolsExt.AcceptsDrop(items), with the signature intact.
  • PasteFromClipboardPaste the image on the clipboard into the current network as a Movie File In, a Script TOP or an annotation. Windows only.Docs ↗5 features
    • Paste a clipboard image: Alt+V pastes the image on the clipboard into the current network, at the mouse, with three ways to paste on the keys 1, 2 and 3.
    • Paste as Movie File In: Saves the image in the tool's Save Folder, clipboard_images by default, and reads it with a Movie File In.
    • Paste as locked Script TOP: Stores the image in a locked Script TOP, which grows the .toe file but avoids external dependencies.
    • Paste as annotation: Pins the image in the network as an annotation the size of the image, kept inside the .toe like the Script TOP.
    • Paste image files: Image files copied in Explorer paste from the original files, several at once, laid out in a row.
  • QuickCollapseCollapse a selection into a component, with an optional customize dialog.Docs ↗4 features
  • QuickMarksBookmark network locations and jump back to them with Ctrl+number. Your marks show on the network editor: a list in a corner you can click, and a pin at each marked spot. Bookmarks stay project-local by design. Based on Alex Guevara's QuickMarks.Docs ↗8 features
  • SearchFixMakes the network editor's find bar find things: any part of a name, case-insensitive, with wildcards, optionally fuzzy and inside child networks. Keeps the bar's arrows and Home toggle; a Legacy toggle brings TouchDesigner's own search back.Docs ↗8 features
    • Find any part of a name: Finds operators by any part of their name in any case; typed spaces become underscores, and a text split into parts needs every part to match.
    • Wildcard patterns: Patterns like noise*, *out? and [ab]lur* match whole names as in TouchDesigner's pattern fields, and a leading ^ inverts the match.
    • Fuzzy matching: When switched on, also finds word initials, a typo or two, or the letters in order, listed after every plain hit.
    • Rank the best results first: Exact names rank first, then names starting with the text, then word matches, then anywhere, with shallower operators before deeper ones.
    • Step through results: The arrows step through results, the first is picked as you type, and with Home on the pane centres on the picked operator.
    • Deep search into child networks: A Deep checkbox and depth field in each pane's bar search the networks inside the current one; picking a hit takes the pane into its network.
    • Restore TouchDesigner's own search: A Legacy checkbox in the find bar brings back TouchDesigner's own search for every pane, and switching SearchFix off restores every bar as it was.
    • Close the bar from inside it: The find bar shortcut also closes the bar while you are typing in it.
  • SwapOpsSwap one operator for another while keeping connections intact.Docs ↗5 features
    • Swap two operators: Two selected operators trade places and connections, from the hotkey, the toolbar button or quick-launch.
    • Wires stay on their inputs: Connections keep their input and output numbers, so a Merge or Composite keeps its input order, and COMPs keep their top and bottom connections.
    • Mirror a row: With more than two operators selected, the row is mirrored end to end.
    • Keep extra inputs in place: When one operator takes fewer inputs than the other, the inputs it cannot hold stay where they were.
    • Undo the whole swap in one step: A single undo puts everything back.
  • SwitchOPsOne hotkey jumps focus back and forth between the last two operators you selected, across networks.Docs ↗3 features
    • Toggle between the last two operators: Jumps focus back to the operator you were on before this one, and back again on the next press.
    • Jump back across networks: Remembers the last two selected operators wherever they are, so after diving into a component you return without retracing the path.
    • Rebind the key: Rebind it on the tool or in HotkeyManager, like every shortcut in the toolkit.
All 93 Network features →
Parameters Promote, bind, link, randomize and reference parameters. 7 tools · 1 Patreon
  • CustomParToolsPromote parameters to a parent with binds or expressions, customize name/label/range on drop, plus extension creation, parent shortcuts, parameter clearing and IOP promotion. Also carries the pane-bar drag-drop hijack and path-cell injection, and four stock-TouchDesigner shortcuts for opening parameters and the COMP editor.Docs ↗16 features
    • Promote by drop: Drop a parameter on the button or on a parent in the path bar and it becomes a custom parameter there, bound back to the original.
    • Customise as you promote: Hold Ctrl while dropping to set the name, label, range, clamping and default before the parameter is created.
    • Menu parameter from a table: Drop a Table DAT and the parent gets a menu parameter that takes its entries from the table.
    • Promote the hovered parameter: Alt+X promotes the parameter under the mouse and Alt+\ opens it in the Component Editor, with nothing to select or drag.
    • Clear dangling binds and expressions: Switches parameters with a dangling bind or a failing expression back to constant and clears script errors, on the selected COMP and its immediate children.
    • Add a parent shortcut: Gives a COMP a parent shortcut from the button or quick-launch, starting from its name or the shortcut it already has.
    • Internal OPs by drop: A Ctrl+Alt drop adds an operator to the parent, or to a parent in the path bar, as an iop.
    • Open parameters and the Component Editor: Open the parameter dialog or the Component Editor for the selected operator or the current network's COMP from the button, the keyboard or quick-launch.
    • Create an extension in one click: QuickExt gives a COMP a Python extension with the starting code written, ExtUtils docked and the extension slot filled in.
    • Switch parts off: Each part switches off on its own, and its button or pane-bar widget goes away with it.
    • Parameters as extension properties: CustomParHelper gives an extension self.evalSpeed and self.parSpeed for every custom parameter.
    • Callbacks by parameter name: A method named onParSpeed runs when the Speed parameter changes, with matching names for pulses, parameter groups and sequences.
    • Declare parameters in code: Helpers such as CustomParHelper.Float and CustomParHelper.Menu create custom parameters from __init__, with page, range and help text.
    • Name your own handlers: @CustomParHelper.onPar('Speed') binds any method to a parameter, and a mistyped parameter name is reported in the log.
    • Execute callbacks without nodes: NoNode registers CHOP, DAT and parameter execute callbacks from extension code or from decorators on the methods, with no execute DATs in the network.
    • Keyboard shortcuts from code: NoNode.RegisterKeyboardShortcut binds a key such as ctrl.k to an extension method, and DeregisterKeyboardShortcut removes it.
  • ExprHotStringsAbbreviations that expand into TouchDesigner expressions as you type in a parameter field.Docs ↗6 features
    • Abbreviation table: A table of abbreviations and what they expand to, so #AT typed as an expression becomes absTime.seconds.
    • Inline expansion: With Replace inline on, abbreviations also expand in the middle of an expression and can be combined, as in #AT * 0.2.
    • Externalize the table to a file: With Externalize on, the table is kept in a file, so your abbreviations follow you from project to project.
    • Wrap a name in op(): #@noise1.par.amp becomes op('noise1').par.amp.
    • Parent shortcut abbreviations: #! becomes the closest parent shortcut, and #!! the same with .par after it.
    • Promote a parameter while typing: #@! and #@~ turn the parameter you are typing in into a custom parameter on its parent, linked by a bind or an expression.
  • LinkOPsPatreon · BaseLinks the parameters of several operators so a change on one lands on all of them, with exceptions by operator and by parameter, an automatic mode and a one-shot sync.Docs ↗7 features
  • OpToClipboardCopy the selected operator's reference to the system clipboard, ready to paste into an expression.Docs ↗4 features
  • ParOPDropCreate Parameter CHOP/DAT and Parameter Execute DAT nodes inside a COMP from its custom parameters, by drag and drop or hotkey.Docs ↗4 features
  • ParRandomizerRandomize parameter values within range, for quick exploration.Docs ↗6 features
    • Randomize an operator: A click on the toolbar button, or Alt+Shift+R, gives every parameter on the selected operator's open page a random value within its range.
    • Randomize one parameter: Hover a parameter and press Alt+R, or drop it on the button, to randomize just that one.
    • Randomize by drag and drop: Drop an operator on the button to randomize it without selecting it first.
    • Expressions left alone: Parameters driven by an expression or an export keep their value; only constant and bound ones change.
    • Reset parameters: Ctrl+Shift+R puts the hovered parameter back to its default; Ctrl+right-click or Ctrl+Shift+Alt+R resets the whole page.
    • Store current values as defaults: Ctrl+Shift+right-click makes the current values of the operator's custom parameters their defaults.
  • SetSmoothnessSet Input/Viewer Smoothness on selected TOPs, or on every TOP in the network.Docs ↗5 features
All 48 Parameters features →
Project Saving, backups, media files and housekeeping. 2 tools
  • MiscTwo small toolbar utilities: a Background Viewer toggle for the network's backdrop TOPs and CHOPs, and a global Mouse In CHOP you can drag channels from onto parameters.Docs ↗3 features
    • Global Mouse In CHOP: A popup with a global Mouse In CHOP whose channels you drag straight onto parameters, with no operator to place first.
    • Background viewer toggle: Turns the current pane's backdrop TOP and CHOP viewers on or off in one click.
    • Clear TOP display flags: Right-click the Background Viewer button to turn off the display flag on every TOP in the current network.
  • ResetPLSReset stateful operators (feedback, cache, timers, counts) across the project, with a pattern-based exception list. Bound to ctrl+0.Docs ↗9 features
All 12 Project features →
Developer Extensions, editor integration and kits for your own tools. 5 tools · 1 Patreon
  • CommandKitDrop-in kit that lets ANY component publish quick-launch commands to the in-TouchDesigner command palette and the TDX launcher: decorate a promoted method, or declare a spec. Guarded: with no registry in the session nothing happens and nothing errors.Docs ↗9 features
    • Publish commands from any component: Drop the kit in as a direct child and the methods you mark appear in the CommandPalette and the TDXL launcher.
    • Safe without a registry: With no command registry in the session nothing happens and nothing errors, so the component works the same for people without the palette.
    • Decorator for command methods: The fns_command decorator derives label, help and prompted parameters from the method name, docstring and signature; Literal hints become menus.
    • Context, state and identity options: Decorator extras set a context for greying out, a live state chip, surface, capability, hidden, and a canonical identity shared across packages.
    • Declare commands without imports: Promote an FnsCommands() method that returns a spec list, with no imports at all: id, label, method, help, prompted params and every decorator extra as plain dict keys.
    • Announces on load: Once the component declares a command the kit tags it and registers it, so a registry that arrives later still finds it; nothing to unregister.
    • Check that commands arrived: Three reads tell you whether your commands are served, and a short ladder says what to look at when one is missing.
    • Announce again after changes: Call Announce() to republish the component after its command set changes at runtime.
    • Tell placed copies apart: Promote FnsInstance() and FnsToolName() so palettes distinguish multiple copies and favourites reach all of them (FNS_CommandRegistry 3.2.1 or newer).
  • ConfigHostA standalone ConfigRegistry host. Drop it into a component to give it roaming settings; its parameters save and reload with your config, with per-parameter and per-page exclusions.Docs ↗7 features
    • Roaming settings for any component: Drop it inside a component and that component's custom parameters are written into the shared settings file and restored on load.
    • Parameter and page exclusions: Name patterns, or whole parameter pages, stay out of what is saved, for parameters that must boot at their defaults.
    • Registry page on the parent: The host's key settings are mirrored onto the component as a Registry page, so it can be configured without opening the host.
    • Edit on the settings page: With the toolkit installed, the component is listed on the FNS settings page beside every FNS tool, its parameters editable there.
    • Named settings section: The canonical name is the section the settings are stored under, defaulting to the component's name; renaming it orphans values saved under the old name.
    • Global or per project: Follows the toolkit's choice between one settings file shared by every project and settings kept in the .toe.
    • Save and load callbacks: onConfigSave and onConfigLoad save and restore anything JSON-serializable, such as table rows; a pulse writes the starter DAT.
  • OpenExtOpen an operator's extension source quickly.Docs ↗3 features
    • Open extension by hotkey: Ctrl+E on a COMP opens its first promoted extension in the external editor TouchDesigner is set to use; on a COMP without one nothing happens.
    • Command palette entry: Also published as the quick-launch command Open extension of current, so it runs from the command palette without the hotkey.
    • Sync edits back with VSCodeTools: With the extension synced to a file by VSCodeTools, every save in your editor lands back in the running component.
  • SeqModPatreon · BaseWatches a sequence of parameters on any COMP: name the target and the sequence, and the block parameters are published as one list, with a callback for every block added or removed.Docs ↗3 features
    • Follow a sequence's blocks: Point it at a COMP and name the sequence, and the list of block parameters stays current as the sequence grows and shrinks.
    • Publish the block parameters: Publishes the block parameters as name patterns in ParNames and as a table on out1, ready for a Parameter DAT, a UI builder or a script.
    • Add and remove callbacks: Create Callbacks makes a DAT whose OnAddBlock and OnRemoveBlock hooks run once per block; errors are reported on SeqMod itself.
  • VSCodeToolsVS Code integration: open externalized scripts, sync files and generate TouchDesigner type stubs.Docs ↗6 features
    • Open the project in VS Code: One click creates the project's workspace file and opens it in VS Code or Cursor.
    • Sync a DAT to a file: Ctrl+Shift+E writes the DAT you are on to a file named after it, and from then on the DAT and the file stay in sync both ways.
    • File type and folder picked for you: The file extension comes from the DAT's language or contents, and an extension's script goes in a subfolder named after its COMP.
    • Choose the name and path: Ctrl+Shift+Alt+E asks for the file's name and path before syncing.
    • Python typing stubs: Deploys stubs for your extensions and TouchDesigner's built-in Python typings, so the editor autocompletes them, through an integration of Stubser.
    • Clear syncs before shipping: Drops the syncs and the tool's tags for the selected DATs, a network, or the whole project, so the content lives in the .toe again.
All 28 Developer features →
Miscellaneous Small helpers that fit nowhere else. 1 tool
  • HydroHomieA toolbar reminder to drink water at an interval you set. Off by default.Docs ↗4 features
    • Drink water reminder: A small alert icon pulses on the toolbar at each interval, 45 minutes by default; click it away until the next one.
    • Set your own interval: Set the minutes between reminders, from the parameters or from quick-launch.
    • Enable at project start: With On Start Active on, the reminders start as soon as the project opens.
    • Quiet during a show: While FNSTools Perform Mode is on the reminder neither animates nor pops up.
All 4 Miscellaneous features →
Time & sequencing Timelines, tempo, presets and sequences that move over time. 1 tool
  • QuickTimeA toolbar clock that hands out drag-and-drop time references for parameters: resettable and scalable absTime and absFrame, frame, and a progress value for perfect loops.Docs ↗4 features
All 4 Time & sequencing features →
Control & mapping MIDI, OSC, your phone and hardware controllers. 4 tools
  • midiMapperMap MIDI controls to parameters, with a learn mode you drive by dropping a parameter on the toolbar button. Mappings are saved into the project folder by design; the tool's own settings roam through config.Docs ↗8 features
  • oscMapperMap OSC messages to parameters. Mappings are saved into the project folder by design.Docs ↗4 features
  • ParHoverMIDI_VSN1Adjust any parameter by hovering over it and turning an endless MIDI encoder, built for the Intech Studio VSN1 with screen and LED feedback: parameter slots and banks, ParGroup control, step sizes, shortcuts for reset and clamp, and network zoom when no parameter is under the mouse. Lands at the network root; one instance per project.Docs ↗10 features
  • TDXMap14-day trial, then Base or ProMIDI controller mapping with a live web UI: multiple devices, banks, Smart Learn, button actions, 14-bit controls. Pro adds smoothing, pickup mode, easing curves, slot and modify modes.Docs ↗9 features
All 31 Control & mapping features →
CHOPs & sensing CHOP operators: shape, generate and read channels. 7 tools · 7 Patreon
  • ChopBankPatreon · BaseA bank of channel processors: one block per channel, each with its own range, exponent curve, zero-below, lag and speed mode, built from the input with one Snap Input, with gain before and after and every block promoted as a property. An alternative for the Math CHOP and the Constant CHOP.Docs ↗6 features
  • ChopProcessPatreon · BaseShapes channels in one node: limit, remap between ranges with an exponent curve, zero at the bottom, lag, and an optional speed mode that turns the result into a running total. An alternative for the Math CHOP.Docs ↗6 features
    • Limit and remap with a curve: Limits incoming values to a range and remaps that range onto another through an exponent curve.
    • Zero Below: Makes the bottom of the input range output 0, so a fader switches fully off at its lowest point yet starts usefully once moved.
    • Lag smoothing: Glides toward new values with a lag.
    • Speed mode: Treats the result as a speed and outputs its running total, which can be clamped, looped or bounced between limits.
    • Shape a whole fader bank in one node: Every input channel goes through the same chain, so one node shapes a whole fader bank; with nothing connected, the Value parameter is processed.
    • Replace a Math CHOP: Create a Math CHOP with the alternatives shortcut held and ChopProcess is offered in its place, wired into the same spot.
  • ConstantCHOPPatreon · BaseA Constant CHOP with typed values: numbers, toggles, tuples, text, paths or operator references, each promoted as a property you can read and set from Python, and a snap from its input. An alternative for the Constant CHOP.Docs ↗6 features
    • Typed constants: Every constant can be a float, integer, toggle, four-value tuple, string, file or folder path, or operator reference.
    • Channels plus a table: Numbers, toggles and tuples come out as CHOP channels, and every constant also comes out as a DAT table of names and values.
    • Switch type without losing values: Changing the type keeps each value wherever it converts.
    • Snap from the input: Snap Input turns whatever is wired in into constants, one per channel, named and valued from it.
    • Replace a Constant CHOP: Create a Constant CHOP with the alternatives shortcut held and ConstantCHOP is offered in its place.
    • Constants as properties: Each constant is a property that reads and sets it, a _out property reads the output, and a prefix avoids clashes.
  • EaseInterpolatorPatreon · BaseCrossfades between two CHOPs through an easing curve: thirty classic easings from sine to bounce, or a custom curve from a third input, all driven by one Select value.Docs ↗4 features
  • KinectSinglePlayerPatreon · BasePicks one player out of a Kinect skeleton stream: whoever stands inside the bounds you set becomes the active player, and their joints ride out as clean channels until they leave.Docs ↗5 features
  • MoveDetectDirPatreon · BaseReads which way things move in a camera or any image with optical flow and turns it into left/right and down/up channels, with thresholds, inversion and filtering, for swipe and gesture triggers.Docs ↗5 features
  • TopToMidiPatreon · BaseSamples an image at points you define and turns the pixel values into MIDI notes in a musical scale, with trigger gating, retrigger control, a MIDI-learned custom scale and output to a MIDI Out or VST CHOP.Docs ↗11 features
    • Sample an image at points: A SOP's points or a TOP's pixels say where the input image is read, and each sample point becomes a note.
    • Index mode: Each sample point plays its own note whenever its pixel passes the threshold, so a pattern sweeping across the picture plays an arpeggio.
    • Value mode: The pixel's brightness picks the note, quantised to a number of steps.
    • Scale mapping: Maps every note into a scale from a root note and octave, from major and minor to the church modes.
    • Trigger gating: Gate lengths, a minimum sustain and a retrigger delay keep a busy picture from spraying notes.
    • Custom scales: Type your own scales into a table and they join the Scale menu.
    • Learn a scale from a MIDI keyboard: With MIDI Scale Learn on, the notes you play one by one become the scale.
    • Play along on a MIDI keyboard: With MIDI Live on, the scale follows the keys you hold, so you can duet with the picture.
    • Send notes to MIDI Out or a VST: Sends the notes to a MIDI Out CHOP, an Audio VST CHOP or both, and outputs them as a CHOP for anything else.
    • Sampling preview: Shows the sample points over the image in a window where you can drag, scale and reset them.
    • Install the mingus dependency: Install mingus writes a requirements file and hands it to the Python Environment Manager, which installs it into the linked environment in the background.
All 43 CHOPs & sensing features →
Visual TOP operators: distort, colour, mask and generate images. 11 tools · 8 Patreon
  • CircularDistortionTOPPatreon · BaseA circular distortion for images: rings of displacement around a centre you place, with phase, frequency, amplitude and a mode blend, and a choice of how the input extends past its edge.Docs ↗5 features
  • ColorGenPatreon · BaseA colour palette generator: a lookup of any length shaped by a phase step per channel and per channel exponents, with a lookup ramp as a second output.Docs ↗4 features
    • Palette from a formula: Red, green and blue follow one curve, offset from each other by a phase step and bent by an exponent each, so a few values give a whole family of gradients.
    • Animate with one Phase: One Phase value scrolls the palette and lands back where it started at 1, so it loops cleanly when you animate it.
    • Palette strip: out_col is the palette as a colour strip, as many pixels wide as the palette has colours, ready for a Lookup TOP.
    • Colour an image through the palette: out_lookup colours the input image through the palette; with nothing wired, a built-in 0 to 1 ramp shows the palette.
  • ColorGenProPatreon · ProA cosine palette generator in GLSL: the full coefficient set per channel, an RGB and D mode, blackout and soft regions, and a lookup ramp as a second output.Docs ↗6 features
    • Cosine palette with every coefficient: Offset, amplitude, period, phase and exponent for red, green and blue, for smooth gradients that loop cleanly.
    • RGB and D mode: Drives the three phases from one Offset, Amplitude and Exponent, so a single value scrolls the whole palette.
    • Blackout region: Keeps the start of the palette black, added to the length or taken from the colours, with a soft edge you shape.
    • Palette strip output: out_col is the palette as a colour strip, and Length sets how many colours it holds.
    • Colour an image through the palette: out_lookup colours the input image through the palette; with nothing wired a built-in 0 to 1 ramp shows the palette.
    • Reset to the shipped coefficients: Default restores the shipped coefficients and leaves any parameter driven by an expression alone.
  • ComplexMixCombines two UV fields as complex numbers: add, subtract, multiply, divide or raise one to the other, optionally weighted by a third input, then samples an image through the result.Docs ↗6 features
  • ComplexOpTreats the image plane as the complex plane and applies a complex function to it: square, root, exp, log, the trigonometric and hyperbolic families, with iteration, a pre and post transform and a choice of edge handling.Docs ↗7 features
  • FeedbackDisplacePatreon · BaseA feedback loop with a displace stage inside it: opacity, crossfade, filter size, displacement driven by a built-in noise or a second input, a per-pass transform, reset and a dry/wet mix. An alternative for the Feedback TOP.Docs ↗6 features
    • Trails with opacity and blur: Each pass is composited over the input with an opacity and a blur, so trails, smears and echoes come straight from the parameters.
    • Noise or image displacement: Warps every pass by a built-in animated noise, or by a displacement map wired into the in_displace input.
    • Zoom, spin and drift each pass: Applies a transform on every pass for drift, zoom and spin, including infinite zooms.
    • Reset the loop: Hold Reset to clear the loop, including the faint ghost an 8-bit loop at a high opacity leaves behind.
    • Mix dry and wet: Dry / Wet Mix blends the whole effect with the input, and Cross fades between the fresh input and the loop.
    • Replace a Feedback TOP: Offered in place of a Feedback TOP created with the alternatives shortcut held, wired into the same spot; also on the OP Create dialog's FNS tab.
  • InstanceTrailerPatreon · BaseTurns one moving image into a trail of its recent frames: a cache laid out in a row or column with exponent-shaped spacing, plus the offsets as a CHOP for instancing.Docs ↗5 features
    • Trail of recent frames: Caches incoming frames while an input is wired and lays the latest copies side by side, oldest at one end, newest at the other.
    • Reach and copy count: Set how many copies the trail holds and how many frames back the oldest one reaches.
    • Shape the time spacing: An exponent spaces the delays, so the copies bunch up near the present or fan out evenly into the past.
    • Row or column layout: Lays the copies out left to right, right to left, top to bottom or bottom to top.
    • CHOP output for instancing: A second output carries the trail as a CHOP in the same layout as the texture, for instanced geometry or CHOP-side use.
  • MaskDrawPatreon · ProDraw a mask with the mouse straight onto the image: a panel you paint in, with the mask and the masked image as outputs, a lock and a reset.Docs ↗7 features
    • Paint and erase on the image: Paint on the input image with the left button and erase with the right; the panel follows the input's aspect.
    • Output the mask and the masked image: Outputs the drawn mask and the input inside the painted area, to key a composite, drive a Level or mark a projection surface.
    • Reset the mask: Middle-click in the panel clears the mask, and so does Reset, which keeps it clear while it is on.
    • Show or hide the button bar: Ctrl and middle-click shows or hides the button bar, and Show Input, Show Mask and Show Brush choose what the panel draws.
    • Lock a finished mask: Lock keeps a finished mask from being changed by a stray click or reset.
    • Pause drawing: Switching Active off hides the brush and ignores the mouse, and the mask stays as it is.
    • Save the mask with the project: Optionally bakes the mask into the component on every save, so it is back when the project reopens.
  • PrismTOPPatreon · BaseA kaleidoscopic prism: the input rendered through instanced, rotating polygon facets in up to three ring patterns, with softness, a chromatic distortion pass, fit and transform, and a dry/wet mix. An alternative for the Tile TOP and the Mirror TOP.Docs ↗7 features
  • RealRampPatreon · BaseA ramp with a true phase and period and its colour keys as parameters: vertical, horizontal, radial or circular, holding, zeroing, repeating or mirroring past its ends, so a driven phase never drifts or snaps the way a keyed Ramp TOP can. An alternative for the Ramp TOP.Docs ↗8 features
  • ThresholdColorA Threshold TOP that keeps the colour: pixels that pass the test come through in their original colour with a soft edge. An alternative for the Threshold TOP.Docs ↗5 features
All 66 Visual features →
3D and Particles POP operators, particle systems and 3D stacks. 4 tools · 3 Patreon
  • ExpressionPOPPer-point attribute expressions for POPs: write lines like P = P + N * 0.1 and they compile to a GLSL compute shader, with local variables carried between lines. An alternative for the Math Combine POP.Docs ↗5 features
    • Point math in plain lines: Write one expression per line, such as P = P + N * 0.1, and read any point attribute of the input by its name.
    • GPU compute shader from your lines: The lines compile into a GLSL compute shader on the GPU, so the math stays fast however many points come in.
    • Local variables: Typed locals such as vec3 offset = N * 0.2 carry over to every later line, so a long calculation splits into readable steps.
    • GLSL code and compile errors: The viewer switches between the points, the generated GLSL and the compile result, and the code and the result also come out as DATs.
    • Replace a Math Combine POP: Offered in place of a Math Combine POP, wired into the same spot, when you create one with the alternatives shortcut held.
  • LayerSep3DPatreon · BaseSlices an image into depth layers by a channel threshold and instances them as a stack in 3D, with per layer threshold, softness, mix, position, scale and rotation driven by curves or CHOPs.Docs ↗8 features
  • Particles2D_POPPatreon · BaseA 2D particle simulation as a POP loop: a source image emits particles, curl noise and wind effectors steer them with lookup ranges, trails stretch them, and the loop rides out as points for your own render.Docs ↗7 features
    • Emit from a source image: Particles are born from the image on in_source and carry its colours, each with its own life, mass and drag.
    • Curl noise field: A moving curl noise field swirls the particles, with its strength set per axis and its speed on the Curl page.
    • Wind with variance: A wind blows the particles along a direction you set, with random variance on top; it starts at zero.
    • Steer forces with images: Each force reads an image through its own lookup, so a picture or a mask decides where it is strong and where it is off.
    • Motion trails: Trails stretch the points along their motion.
    • Points out for your own render: The simulated points come out of out_loopout, ready for a Render TOP with your own material or any POP that takes points.
    • Insert your own POPs into the loop: out_loopout and in_loopin are the two ends of the simulation loop, so POPs of your own can sit inside it.
  • ParticlesGpuUltimatePatreon · ProA GPU particle system driven by images: a thresholded source emits particles, and look, life, turbulence, wind and force fields shape them, each optionally read from its own image, with a feedback pass for trails and one rendered output.Docs ↗9 features
All 29 3D and Particles features →
Show & output Scenes, slides, recording, audio and the perform window. 5 tools · 3 Patreon
  • FloatDataRecorderPatreon · BaseRecords a float texture such as a depth point cloud, a colour texture and a CHOP to files in sync, then plays the three back together against the timeline with a frame offset.Docs ↗5 features
    • Record a point cloud, colour and CHOP together: Rec writes a float texture such as a depth point cloud, a colour texture and a CHOP such as skeleton data to files at once.
    • Play back in step with the timeline: Plays the three files back in step with the timeline, with a frame offset to line them up, as textures and channels.
    • Live pass-through: With Play off, and always while recording, the outputs carry the live inputs, so nothing downstream has to be rewired.
    • Timeline fitted to the take: Sets the timeline's end to the length of the recording in one pulse.
    • Reload a new take: Reload picks up a take recorded over the same files and looks again for a missing CHOP file; until that file exists the CHOP player stays off, so a fresh node shows no error.
  • GlobalVolControlGlobal audio volume control.Docs ↗4 features
    • Master volume slider: Sets TouchDesigner's application-wide output level from the toolbar, leaving the Volume on every Audio Device Out and Audio Play CHOP unchanged.
    • Mute: The speaker button silences output without moving the slider, so unmuting returns to the same level.
    • Set volume or toggle mute from quick-launch: The Set volume command takes a level from 0 to 1, and Toggle mute mutes and unmutes.
    • Restore the level at startup: The level and the mute state are applied again as the project starts.
  • OutputA toolbar button for the perform window: drop an operator to route it, click to open or close, and switch NDI and Spout/Syphon streaming of the same window.Docs ↗6 features
    • Drop to set the Window Operator: Dropping a TOP or a COMP on the toolbar button makes it the Window Operator of the /perform window, without opening the Window COMP's parameters.
    • Open the perform window: Left-clicking the button opens the perform window.
    • NDI streaming: The right-click popup streams the perform window over NDI to machines on the same network, under NDI Source Name; on by default.
    • Spout and Syphon streaming: The same popup sends the perform window to other applications on the machine over Spout, or Syphon on macOS, under Sender Name; on by default.
    • Toggle streams from quick-launch: Switch the NDI and Spout/Syphon streams on and off from quick-launch.
    • Choose the Window COMP: The button's Perform parameter sets which Window COMP the drop and the click go to, taking effect on the next drop with nothing to re-install.
  • SlideShowPatreon · BaseA slideshow of a folder of images and movies: timed or stepped with next and previous, in order or random, moving on when a movie ends, with a crossfade between slides and a fitted output resolution.Docs ↗7 features
  • SwitchToolsPatreon · BaseA companion for any Switch, Cross or multi-input operator: index by slider, menu or bind, loop or clamp, colour the live input, cook only the inputs in use and unload the rest from the GPU, plus reorder, reverse, randomize and align the inputs.Docs ↗10 features
All 32 Show & output features →
Core The registries every other tool plugs into. Installed as a unit. 16 tools
  • CommandRegistryCollects the commands your tools declare and serves them to whatever can run them: the in-TouchDesigner command palette and the TDX launcher. Discovery is by tag, so a tool installed before any consumer still appears the moment one arrives.Docs ↗12 features
    • Share one list across palettes: The CommandPalette and TDX Launcher Ultra read the same commands, and favourites, hidden commands and presets made in one show in the other.
    • Tag-based tool discovery: Finds tools tagged fnscommands and harvests their commands, so a tool installed before any palette or launcher still appears when one arrives.
    • Curation that survives moves: Favourites, hidden flags and presets are keyed on tool name and command id, so they survive a tool being moved in the network.
    • Presets per copy or pinned: A preset runs on every copy of a tool, or is pinned to one instance label and waits quietly where no copy carries it.
    • Built-in TouchDesigner commands: Serves TouchDesigner's own actions, such as the Textport, dialogs, pane changes, saving, recent files, realtime, perform mode and cook rate, badged TD in the palette.
    • Newest version wins for duplicates: When two packages offer the same canonical command, the newest package version is served and the other set aside, so the list never doubles.
    • Tools work without it: Every call a tool makes is guarded, so with no registry in the session nothing happens and nothing errors.
    • Commands derived from methods: Builds each command's label, help and prompted parameters from the method's name, docstring and signature, with type hints setting input styles.
    • Declared context, surface and state: Tools declare what a command acts on, where it is offered, where its live value lives, its capability group and a cross-package canonical id.
    • Commands for each tool copy: Each copy of a multi-copy tool registers its commands under its own path, labelled by FnsInstance() and grouped under one name by FnsToolName().
    • Declaration validation: Enforces limits at harvest (24 commands per tool, 6 parameters, 5 contexts, 8 surfaces) and rejects malformed declarations with a reason.
    • Consumer API: Commands(), Run(key, args), RescanTools(), Shadowed(), Rev() and Version() let a palette or launcher list, run and re-harvest commands and check the contract version.
  • ConfigRegistrySettings persistence registry: one aggregated JSON in the user palette, so preferences follow you across projects and survive updates. The raw master, promoted to /sys.Docs ↗6 features
    • Settings page for every tool: OpenSettingsUI() opens one page, served by Console on localhost, listing every registered tool with its version and editable parameters.
    • Sync settings across projects: Gathers every tool's custom parameters, plus extra state from tools like OpTemplates, into one JSON file in the User Palette, outside the .toe.
    • Automatic load and save: Each tool loads its section once per session, which can be turned off per tool; settings save on project pre-save and before an update.
    • Save All and Load All: One pulse, or a quick-launch command, syncs every tool's settings to or from the JSON file at once.
    • Global or per project: Settings either roam through the one file to every project on the machine, or stay in the project file.
    • Host copy per tool: A tool persists its settings by carrying a small host copy, shown as its Registry page, which forwards to the single promoted /sys registry.
  • ConsoleThe toolkit's web front, served from inside your project: every tool's settings on one page, the install picker, and any tab a tool contributes. The raw master, promoted to /sys.Docs ↗15 features
    • Settings for every tool on one page: Each installed tool appears as a card with its parameters grouped by page, with a jump list and a search across all of them.
    • Open on any tab: Open Settings, Pick Tools and Open Console open it in Hub, the toolkit root's panel or your system browser, and the tab sits in the address so a reload or a link keeps it.
    • Install and remove: The installer's picker in a tab: check a tool to install it, uncheck an installed one to remove it, and its settings are kept for next time.
    • Updates in one list: Compares what you have installed with what the store publishes, shows each update's notes, and applies one update or all of them.
    • Community tools: Lists tools by other creators, and places some of them straight into the network you are working in.
    • Config scope, global or project: The Settings header switches your settings between global and project scope.
    • Export settings: Writes every tool's settings to one JSON file in the config folder and offers it as a download.
    • Import settings: Applies a settings file to the tools you have now and keeps the sections for tools you install later.
    • Show or hide tabs: The ⋯ button shows or hides each contributed tab, and the choice is saved on the tool that contributed it.
    • Runs only while in use: Served on 127.0.0.1 from inside your project; it starts when you open it and stops after ten idle minutes.
    • Contribute a tab: A stamped FNS_Console host publishes a tool's own HTML page as a console tab, with an optional Python DAT answering its requests.
    • Browser hand-off: While a tool's tab is exposed, the console switches the tool's own web render off, and back on when the exposure ends.
    • HTTP API: Routes on the console's port list and show tabs, read and set settings, export and import them, and drive updates from another page.
    • Python API: op.FNS_CONSOLE opens and closes the console, lists and shows tabs, and registers a tab without a host.
    • Hot-synced sources: Disk edits to the externalized console sources reach the running console on its next request.
  • HubThe FNS button in TouchDesigner's main-menu bar and the one-stop manager window behind it: the Toolbar, Navbar and Main Menu configurators as tabs, the console, and any tab a tool contributes. Drop a panel COMP on the button to register it into a surface.Docs ↗15 features
    • Open the hub: Left-click the FNS button in the main-menu bar, or run Open FNS Hub from quick-launch, and the hub opens on the tab you were last on.
    • Jump to any tab from the FNS button: Right-click the FNS button to jump to any tab or console page, bring a hidden tab back, switch Perform Mode, or open the docs.
    • Toolbar configurator: Reorder, group, hide and show the widgets on TouchDesigner's bookmark bar, and add dividers between them.
    • Navbar configurator: Reorder pane-bar items, flip them between the left and right side, and show, hide or group them.
    • Main menu configurator: Arrange the main-menu bar with TouchDesigner's own items included, so your entries can sit between them.
    • Reorder OP Create contributions: Reorder what tools add to the OP Create dialog, or switch a contribution off without uninstalling its tool.
    • Network overlay layout: Reorder, show and hide what tools draw on the network editor, and move each corner list to another corner.
    • Console tab: The toolkit's web console renders inside the hub, and its browser runs only while the tab is shown.
    • Commands tab: Lists every command the command registry serves, hidden and built-in ones included, to star or hide.
    • Tool tabs: The larger tool UIs, such as the OSC and MIDI mappers, sit in the same window, exactly the ones you have installed.
    • Arrange and hide tabs: Drag tabs into your order, hide one from its tool's Shown in Hub parameter, and pick a wrapping or single-row tab bar; the layout roams with your settings.
    • Perform Mode: Stops the tools that only serve the network editor for a show, turns the FNS button red, and brings everything back as it was. Follows TouchDesigner's Perform Mode by default.
    • Drop to register: Drop a panel COMP on the FNS button, pick a surface, and it gets a self-registering host and appears there at once.
    • Open a tab from Python: op.FNS_HUBREGISTRY.Open(tab='navbar') opens the hub on a tab by its canonical name, contributed tabs included.
    • Contribute a tab: A tool carrying a stamped FNS_HubRegistry host gets a tab showing itself, an inner panel, an operator in an OP Viewer, or a parameter page.
  • HubRegistryThe registry behind Hub's tab bar: tools contribute native panels, viewers or parameter pages as hub tabs. The raw master, promoted to /sys.Docs ↗8 features
    • Self-healing Hub tabs: Keeps one entry per Hub tab with its label, order and visibility, puts a mirror or viewer in the hub for each, and removes tabs whose tool is gone.
    • Arrange tabs: Drag a tab onto another tab to reorder them; the order roams with your settings.
    • Rename a tab: Tab Label on the tool's Registry page gives its tab a different label.
    • Hide a tab: Hiding a tab is written back to its tool's Shown in Hub parameter, so it stays hidden across projects until you show it again.
    • Contribute a tab through a host: A host copy names the tab: the tool's own panel, a panel inside the tool, or an OP Viewer of a DAT, CHOP, TOP, SOP, POP or MAT.
    • Parameter page tabs: Tab Parameters shows a Parameter COMP view of chosen pages of the tool, or every page with *, as a Hub tab.
    • Python tab API: RegisterTab(), Tabs(), SetTabDisplayed(), Open(tab=) and OpenDocs() register, list, show and open Hub tabs from Python.
    • Tab exposure callback: An extension implementing OnHubExposure(exposed) learns when its tab is shown; a palette Web Browser has its Active switched for it.
  • MainMenuRegistryTD main-menu surface registry, including project-name display. The raw master, promoted to /sys.Docs ↗6 features
    • Order, hide and place entries: Holds the order, visibility and left or right placement of every main-menu entry, TouchDesigner's own items and the ones tools publish alike.
    • Edit from the Hub MainMenu tab: The MainMenu tab of Hub reorders, hides or groups entries, so a tool's entry can sit between TouchDesigner's own items.
    • Restore TouchDesigner's order: The TD button in that tab puts TouchDesigner's own items back in their original order, all visible.
    • Publish an entry from a tool: A tool ships a small host copy of the registry beside its widget to get a main-menu entry, reachable globally as op.FNS_MAINMENUREGISTRY.
    • Pin next to a stock item: Anchor After pins an entry directly after a named TouchDesigner item, such as tutorials, and heals if that item comes and goes.
    • Lifecycle callbacks: An optional mainmenu_callbacks DAT hears when its entry is registered, unregistered, shown, hidden or moved to the other side.
  • NavbarRegistryThe pane-bar surface registry. The raw master, promoted to /sys; clone it to add your own pane-bar widgets.Docs ↗6 features
    • Widgets in every pane bar: Registered widgets are placed in every pane bar TouchDesigner has open and in the default bar new panes start from, so they show in panes you open later too.
    • Navbar layout in Hub: Hub's Navbar tab reorders pane-bar items, flips them between the left and right side, groups them and shows or hides them.
    • Layout follows you: Your pane-bar arrangement is saved with your settings and comes with you to every project.
    • Panel COMP to navbar package: Dropping any panel COMP on the FNS button registers it as its own self-installing navbar package.
    • Host copy registration: A tool that wants a pane-bar widget ships a host copy of this registry, picks a side and a kind, and registers on load.
    • Widget copy in each pane: Each pane bar gets its own copy of a widget, so a breadcrumb can show its own pane's path; RefreshWidget() re-copies after you edit it.
  • OpFamilyThe FNS tab in the OP Create dialog: an operator family whose members are FNS tools placed from the store as one node each, with stubs for projects that travel and in-place updates that keep retained parameters and state. Built with TDFam.Docs ↗8 features
    • Create FNS tools from OP Create: Adds an FNS tab beside COMP, TOP, CHOP and the others; each entry places an FNS tool into the current network as one operator.
    • Remove the FNS tab: Pick Tools, the FNS Tab in OP Create switch or Remove Operator Family take the tab away, the choice sticks, and the switch brings it back.
    • Members mirrored from the store: The tab lists exactly the members this machine's store holds, kept in step by the updater, and the same folder shows up in the Palette.
    • Replace a stock operator with a member: A member can also be offered in place of a stock operator, such as Random when you create a Noise CHOP with the alternatives shortcut held.
    • Stub operators for projects that travel: Placed members become light placeholders that keep their wiring, position, retained parameters and state, and come back as the real operators wherever the family is installed.
    • Update placed operators in place: Upgrades every placed member to the newest version in the family folder, keeping its retained parameters and state.
    • Sync, stub and update from quick-launch: Stub, replace, update and resync from quick-launch without dialogs, for the whole project or only the network you are in.
    • Manifest-declared retention: Each member's manifest declares which parameters and which state survive a stub or an update.
  • OpMenuRegistryOP Create dialog surface registry: search words, row decorations, right-click items, filter stages. The raw master, promoted to /sys.Docs ↗10 features
    • Shared OP Create dialog surface: Arbitrates between the tools that change the OP Create dialog, and the dialog goes back to stock when those tools are removed.
    • Arrange contributions in Hub: Hub's OpMenu tab reorders what the tools add to the dialog and switches any contribution off without uninstalling its tool.
    • Replace a stock operator with an alternative: Create a stock operator type with the alternatives shortcut held and installed alternatives are offered; one is placed with its wiring restored, several open a picker.
    • Alternatives from the store: Alternatives from tools downloaded to your store but not in the project are offered below a divider and placed from disk; >> marks such types.
    • Search word contributions: Tools add extra words that match an operator type, so searching music finds Audio File In.
    • Row decorations: Tools relabel rows in the operator list, such as the >>> OpTemplates puts beside every type you have a template for.
    • Right-click menu items: Tools add entries after TouchDesigner's own three in the dialog's right-click menu, such as OpTemplates' Edit Templates.
    • Filter-chain stages: Tools splice Script DATs into the operator list's filter chain to filter or rewrite the list itself.
    • Panel injection: Tools wire Panel COMPs into the dialog at a named anchor.
    • Callbacks DAT inside each tool: A tool's whole contribution is one opmenu_callbacks DAT inside the tool, so its menu behaviour travels in its own .tox.
  • OverlayRegistryOne overlay over the network editor you are working in, composited from every tool that draws there: each tool hands over its own image, and this registry fits it over your view, stacks it with the rest and shows it above the nodes, without touching your network's display flags or annotations.Docs ↗8 features
    • Stack every tool's drawing in one overlay: Stacks every tool's drawing into one image shown above the nodes of the network editor you work in; with nothing drawing, nothing runs.
    • Follows the view: Pan, zoom or open another network and the overlay follows, keeping everything in place at any zoom and sharp on high DPI screens.
    • Leaves your network untouched: Switches no display flag, dims no annotation, and is taken out before every project save.
    • Corner widgets: Tools can pin small clickable panels to a corner of the network editor that keep their size at any zoom and stack without overlapping.
    • Manage layers and widgets in Hub: FNS_Hub's Overlay tab lists every layer and widget: reorder them, hide one without switching its tool off, or move a widget to another corner.
    • Publish a layer: A tool hands over one TOP through a host copy of the registry, or from Python with RegisterWidget(), and the registry composites it with the rest.
    • View data for layers: The View page and View() give the covered network rectangle, render resolution, units per pixel and zoom; NetworkToPixel() converts network positions to pixels.
    • Panel widget API: RegisterPanelWidget() pins a tool's panel COMP to a corner with an order and margin; UnregisterPanelWidget() takes it away.
  • PaletteRegistryContribute tabs to TouchDesigner's Palette Browser: a tool publishes a native panel COMP and it appears beside the stock Palette tab, sized to the slot and notified on every tab change.Docs ↗8 features
    • Tabs in the Palette Browser: Adds a tab strip above the Palette Browser's list, with TouchDesigner's own Palette tab first and one tab per contributed panel.
    • Stock palette left intact: With nothing contributed the palette stays as TouchDesigner ships it; the strip appears with the first registration and goes with the last.
    • Switch back to the Palette tab: SearchPalette's Ctrl+Shift+F switches to the stock Palette tab before focusing its search field; other tools can call ShowTab('palette') the same way.
    • Register a tab from a host: A tool ships a small host copy whose Registration page sets the tab's tool, canonical name, panel, label, order and visibility.
    • Tab API from Python: RegisterTab(), Tabs(), SetTabDisplayed(), ShowTab(), CurrentTab() and UnregisterTab() on op.FNS_PALETTEREGISTRY manage tabs from code.
    • Tab change callback: An optional Callbacks DAT gets onPaletteTab(canonical, previous) on every tab change.
    • Panels fitted to the slot: A registered panel is resized to the slot, restored when the tab goes away, and keeps its state across tab switches, Web Render included.
    • Extra tabs from one tool: The Extra Tabs sequence adds one tab per block, and a block without its own panel reuses the first tab's panel.
  • PaneSearchRegistryPublish a control into the find bar of every network editor pane: it sits beside the bar's own Home toggle, one copy per pane, and appears in panes opened later too.Docs ↗5 features
    • Controls in every find bar: Copies a published panel COMP into every network editor pane's find bar after Home, one copy per pane, including panes that open their bar later.
    • Stock find bar when unused: With nothing contributed, every find bar stays as TouchDesigner made it, and the search itself is always left to the bar or to SearchFix.
    • Register through a host copy: A tool ships a host copy whose Registration page names the panel COMP, a canonical name, its order and whether it is displayed.
    • Python widget API: RegisterWidget(), UnregisterWidget(), RefreshWidget() and Instance() add, remove, refresh and find a find bar contribution from Python.
    • Reach the find bar's operators: A script in the contributed panel reaches the bar's search field and the pane's network path through me.parent(2).
  • PaneTypeRegistryNamed, persistent pane-type entries for TD's panebar: any COMP can appear in the pane-type dropdown and be recalled with configurable owner, type, window actions and callbacks.Docs ↗6 features
    • Recall a COMP from the pane-type dropdown: A COMP joins the pane bar's pane-type dropdown; picking it turns the pane into that COMP with the entry's owner, pane type, window behaviour and callbacks.
    • Register a COMP from the dropdown: Right-click a built-in row to register the network the pane shows as a new entry of that type, kept with the project.
    • Run one action on right-click: Right-click a registered row to run one step on its own, such as Set Owner, Tear Away or Open Floating Network Editor, or to unregister it.
    • Open a floating network editor: The Floating network editor quick-launch command opens a floating network editor on the network you are in.
    • Register a tool as a pane type: A tool ships a host copy of the registry and registers on load, declaring its COMP, pane type, and the window actions or callback to run on recall.
    • Callback on recall: An optional callback runs after the built-in actions, for what they cannot express: focusing a field, opening a panel, restoring state.
  • TimelineRegistryPublish a widget into TouchDesigner's timeline bar: transport controls beside the stock ones, an entry on the time-properties block, or a full-width strip in the frame-ruler band that gets its own row.Docs ↗6 features
    • Stock bar when unused: With nothing contributed the timeline bar stays stock, and it returns to its stock height when the last widget goes.
    • Background zone adds a row: The background zone makes the bar taller by its own height, recomputed from the stock height each time so the bar never creeps taller.
    • Publish widgets to the timeline bar: A tool publishes a panel COMP and it appears in the timeline bar, shown through mirrors so the stock blocks stay as they are.
    • Transport, ruler and graph-heading zones: A widget sits at the right end of the transport row, as a full-width strip under the frame-ruler numbers, or in the Animation editor's graph heading.
    • Register through a host copy: A tool ships a small host copy whose Registration page names the COMP, canonical name, zone, order and whether it is displayed.
    • Python registration API: RegisterWidget, UnregisterWidget and SetWidgetZone on op.FNS_TIMELINEREGISTRY add, remove and move widgets from Python; the zone settles a frame later.
  • ToolbarRegistryThe toolbar surface registry and mirror rail. The raw master, promoted to /sys; clone it to put your own tools on the bar.Docs ↗8 features
    • Bookmark bar slots, order and visibility: Keeps which widgets sit on TouchDesigner's bookmark bar, in what order and which are shown, so installing or removing a tool never leaves a hole or a dead button.
    • Mirror rail: Each button on the bar is a live view of the widget inside its tool, so no button COMP is ever copied into the bar.
    • Arrange the bar in Hub: The Toolbar tab of Hub reorders and groups widgets, sets their width and adds dividers between them.
    • Hide buttons you never use: Hiding a button from its row in Hub takes it off the bar while the tool stays installed.
    • Layout follows you: Your arrangement is saved with your settings and comes with you to every project.
    • Reset the toolbar layout: Reset toolbar puts every tool back in the slot it shipped in.
    • Drop a panel on the FNS button: Dropping any panel COMP on the FNS button gives it a self-registering host and puts it on the bar, the quickest way to add a tool of your own.
    • Register from a host or from Python: A host copy inside a tool registers it on load; RegisterWidget(), SetWidgetDisplay() and WidgetTarget() do the same work from code.
  • UpdaterIn-place toolkit updates, with settings preserved across the replacement.Docs ↗7 features
    • Check for updates: Compares every installed package with the published release, from the Updates tab or quick-launch, downloading only a small manifest.
    • Update only changed packages: Fetches only the packages that changed from the store, verifies each download's hash and replaces just those, leaving uninstalled packages uninstalled.
    • Settings kept across updates: Saves every tool's settings before anything is replaced, and each replaced tool comes back with them.
    • Store for offline installs: Keeps the whole release in this machine's store, so Pick Tools works without an internet connection.
    • Patreon sign-in and licence keys: Holds this machine's Patreon sign-in and Gumroad licence keys; the token lives in the operating system keystore, never in the project.
    • Release notes after an update: A pass that updated something prints the release and its notes in the Textport; the Updates tab keeps them, and one switch turns the line off.
    • Install agent skill: The Install agent skill command copies a reference to every installed package (promoted methods, commands, hotkeys, parameters, the registries) into the project's .claude/skills folder or your user skills folder, so a coding agent such as Claude Code knows the toolkit before it touches the project.
All 134 Core features →

Every package has its own page, and the docs are searchable, open the documentation →

Two ways to install

One container goes into your project, you pick the tools from there, and only those get downloaded. Start from a download or from the picker on this site; either way, the updater keeps it current.

Either

Download and drop

Drag FNSTools.tox into the root of a project. It is about 150 KB and arrives empty: the container you drop is where your tools will live.

Then pulse Pick Tools and the picker opens inside TouchDesigner. Browse by category, follow any card through to its docs, and review the plan before anything is written to your project.

Download
What the picker actually does

It downloads exactly the packages you ticked, plus the core registries they need, and verifies every file against the release manifest with sha256 before anything is installed.

Nothing else is written.

On the very first run it fetches the catalogue before it can show you anything, and says so while it does.

Or

Pick online and paste

The same picker is on this site. Tick your tools, copy the one line it gives you, and paste it into the Textport of an open project.

No download: the line fetches the container and your picks together and places the container in your project for you.

Choose tools online →
What the pasted line does

It carries only the names you ticked. Release, URLs and hashes are read from the published manifest at paste time, so a line you copied earlier still installs the current release.

It fetches the core registries, your selection and the container, verifies every file with sha256 before writing anything, then loads the container into the network you are in and hands it the selection to install.

Then

It stays current

Each package carries its own version, and the updater compares it against the published one. Update the tools you use, leave the rest alone, and keep your settings across the swap.

How updates work
Where your settings live

Preferences go into one aggregated JSON in your user palette, outside the project file, so the way you set a tool up follows you into the next project, and survives the next update.

MIDI and OSC maps are the deliberate exception: they save into the project folder, so they travel with the show.

Settings are preserved when a package is replaced. And the registries are promoted masters you can clone, so your own tools can sit on the toolbar, nav bar or OP menu too. How settings persistence works →

Make it the default

Save the project and set it as your startup file in Preferences → General → Startup File Mode. Every new project then opens with your tools already in it.

On macOS

Clipboard image paste is not available on macOS. Where the docs say Alt, press Cmd. Exceptions are called out per tool.

Finding help later

Alt-right-click (or Alt-middle-click) any toolbar icon to open that tool's page on this site. Option on macOS.

Use it from a coding agent

FNSTools ships an agent skill: a reference to every installed package, its promoted methods, quick-launch commands, hotkeys and settings, generated from the release you have. Run Install agent skill from the command palette and Claude Code, or any agent that reads the Agent Skills format, finds it in the project. How it works →

Building a tool for FNSTools?

The developer kit, FNSTools-DevKit.zip, holds the eleven registries, each as its own tox, with a README: the toolbar, the pane bars, the menus, the palette, the timeline, the settings file and the other surfaces a tool publishes into. Drop the ones your tool needs into a development project and build against them without installing the toolkit. It has no updater: take the kit of the release you target. Each registry's contract is on its page in the docs.

Prefer to choose your tools in the browser?

Free and Patreon

Most tools are free and MIT licensed, including for commercial work. No account is needed.

Tools marked Patreon unlock with a Patreon membership at the tier each tool names (Base, Pro or Coaching) or a Gumroad licence key. Install and update them through the same picker.

See the Patreon tools and licence details →

Full walkthrough

A full walkthrough with the TouchDesigner team on InSession. Recorded on an earlier release; some interfaces have changed.

Documentation

Tool reference

Find setup instructions, shortcuts and examples for each tool. Search the docs or start with one of these:

Support the project

Patreon memberships help fund development and unlock the Patreon tools. For questions, join the Discord. For bugs, open a GitHub issue.

More from Function Store

Project management and MIDI mapping, available separately.

From the community

9 tools by other creators that pair well with FNSTools, made and maintained by them.

See the community tools →

Who makes this

FNSTools is made by Dan Molnar, a Berlin-based artist and developer working as Function Store, with a few community contributors credited below. More are welcome, on GitHub or Discord. The tools grew out of building installations and live systems in TouchDesigner; the rest of that work is on his portfolio site.

About Function Store → See the work at functionstore.xyz ↗

Credits

FNSTools includes open-source tools and code I adopted and adapted for this toolkit. These are their original authors, along with people who helped test it.

MIDI & OSC mappers

I also learned a lot from reading these components.

by PlusPlusOneGmbH
SearchPalette

The palette search bar that is hard to work without once you have it, based on TD-SearchPalette.

based on the work of Yea Chen
IO filters, and TouchDesigner

The OP Create dialog filters, and the software all of this sits on.

by Greg Hermanovic
Clipboard image paste

Paste an image straight into a network.

by DotSimulate and Lake Heckaman
OpType acronyms

Find operators in the OP Create dialog by their initials.

by DotSimulate
QuickMarks

Bookmark spots in a project and jump straight back to them.

by Alex Guevara
Cook Bar

A bar above every operator showing its cook time and GPU memory, from cook_bar.

by Anton Heestand
Early testing and feedback

The people who used all of this while it was still sharp around the edges.

by Acrylicode and kim0slice