td_health
Find silent failures in TouchDesigner projects: uncooked operators, disabled outputs, shader compile errors, callback tracebacks, and slow cooks. Run after building to catch what nothing reports.
Instructions
Find what is quietly broken — the failures nothing reports.
Run this after building anything, and whenever a composition "looks fine but does nothing". td_errors only covers what TouchDesigner calls an error; this additionally catches:
operators that never cook, because a branch nothing displays or records is never pulled and therefore is not running at all
output operators switched off (audio device, movie recorder, MIDI, OSC) which produce nothing and report nothing
GLSL operators whose shader failed to compile, quoting the compiler's own line: TouchDesigner only warns that an Info DAT would show the details
tracebacks raised inside callbacks and extensions (Execute DAT, Replicator, component callbacks), which are kept apart from the error list. A Script operator's onCook raising during a cook Python asked for is not covered — that traceback goes back to the caller instead
operators costing more than half a frame to cook, and the resulting frame rate collapse. A cook time is named by the frame it was measured on, so one left over from a cook long before this check is set apart as stale rather than blamed for the current frame rate
bypassed operators, and the current licence
feedback loops (Feedback TOP, and the CHOP and POP that hold state between frames), which cook(force=True) does not advance: frames made by forced cooks carry a stale trail
bypassed gain operators (Level, Math, HSV Adjust), which pass their input through at full strength instead of switching the layer off
Level TOPs that can output negative floats (float format, no clamp, and contrast above 1, inlow above 0 or outlow below 0 — black level only cuts to 0), and whether an Add below them takes those values away from what it adds to
reads of the application clock (absTime) or an unseeded random generator, which keep a render from reproducing between runs
interval is the gap between the two samples, in seconds, and is capped:
this process sleeps through it and answers nothing else meanwhile.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | /project1 | |
| interval | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |