Docs Core
TimelineRegistry
Publish 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.
◈ Core
Timeline Registry
TouchDesigner's timeline bar is a fixed piece of chrome. This registry makes it extensible: a tool publishes a panel COMP and it appears in the bar, in a zone it picks, without that tool knowing anything about the dialog's layout.
The stock blocks stay where they are, as they are. Contributions are shown through Select
COMP mirrors anchored to TD's own blocks, and /ui is never saved with a
project, so the whole surface is rebuilt on every load; the registry
re-registers each time.
It ships as its own core package, promoted to /sys (global shortcut
op.FNS_TIMELINEREGISTRY), alongside the other surface registries.
With nothing contributed, the bar stays stock. The surface appears with the first registration and disappears with the last, and the bar returns to its stock height.
The three zones
- transport: beside TD's own play controls, in the existing row.
- properties: with the time-properties block at the left.
- background: a full-width strip in the frame-ruler band, drawn underneath the ruler numbers (TD's own ruler background is transparent, so it shows through).
background is a grow zone: it makes the bar taller by its own height and
the bar's fixed-height blocks follow, so the transport row keeps its full height
and its controls stay unclipped. The dialog height is always
recomputed as base plus growth and never incremented; the bar's height is saved in
the .toe while /sys is not, so an increment-and-restore scheme would creep
taller every session.
For tool authors
A tool that wants a timeline widget ships a small host copy of this registry, the same shape as a toolbar or navbar entry. The host's Registration page names the contribution: the tool COMP, a canonical name, the zone, order, and whether it is displayed.
From Python, op.FNS_TIMELINEREGISTRY.RegisterWidget(comp, 'mytool', zone='transport', order=20) does the same, with UnregisterWidget() and
SetWidgetZone() as the rest of the API.
Registration takes a frame: the entry is stored first and its zone arrives with the host's parameter a frame later, so anything that depends on the final zone settles a frame later.
TimelineTools is the reference consumer; it uses
transport for its own controls and background for the media strip.
Get it
Tick it on the install page and it installs with the rest of your setup and stays up to date.
Download FNS_TimelineRegistry.tox Version 3.2.5, the tool on its own. It works in any project, and this copy never updates itself.
Parameters
Registration
| Control | Type / default | What it does |
|---|---|---|
Widget COMPComp |
operator.. | Panel COMP published as the toolbar widget. Defaults to the parent component. |
Canonical NameCanonicalname |
textempty | Unique name for this widget in the global toolbar registry. |
Callback DATCallback |
operatorempty | Optional DAT with toolbar callbacks for this widget. |
Auto-registerAutoregister |
on / offoff | When on, keep this widget published into the global toolbar registry while this component exists. |
RegisterRegister |
button | Publish once into the global toolbar registry, even if Auto-register is off. |
UnregisterUnregister |
button | Take this tool's contribution back out of the registry and turn Autoregister off, so it stays out. Register puts it back. |
Registration StatusRegstatusread-only |
textempty | Read-only status of this host registration. |
Timeline OrderMenuorder |
number-1 | Preferred order among registered widgets, managed by the global registry. -1 = no preference (append at the end). |
DisplayedDisplayed |
on / offon | Default visibility of the widget in the toolbar (managed by the global registry). |
Bar WidthBarwidth |
number0 | Width of this widget in the toolbar. 0 = auto (follow the widget). Persisted here; the registry writes manager edits back. |
Bar HeightBarheight |
number0 | Height of this widget in its zone. 0 = the zone's own row height. The registry sizes the SOURCE panel to this, because a mirror is a window onto the widget and not a scaler, so an oversized source shows only its top-left corner in the slot. |
Timeline ZoneZone |
menuTransport | Which part of TD's timeline this widget is published into. 'Transport row' appends it after the native play/stop controls. 'Properties block' places it in the left 279px column. 'Background strip' spans the full width in the frame-ruler band and is drawn UNDERNEATH the ruler. The ruler's own background is transparent, so it shows through. |
Help URLHelpurl |
textempty | The tool's wiki/help page opened from the Configurator (right-click the Name cell). Leave empty to auto-discover from a docsHelper COMP (its Url par) inside the registered panel or its parent. |
Promote ParametersPromotepars |
on / offon | When on, the host mirrors its key Registration parameters onto the parent tool as a bound 'Registry' page. Turn off before shipping a tool that should not expose registry controls. |
Pre-Save HealPresaveheal |
on / offon | Before each project save, re-check this registry: update entries whose component moved, drop entries whose component is gone, and republish a host that initialised before the global registry existed. Off skips the sweep for this registry only. |