UNPKG

@bottobot/td-mcp

Version:

TouchDesigner Documentation MCP Server v2.3 - Pure MCP server for VS Code/Codium with comprehensive operator documentation for 629 operators + 7 tutorials across all categories (TOP, CHOP, SOP, DAT, MAT, COMP, POP). Features experimental POP operators wit

4,988 lines 214 kB
{
  "id": "timer_chop",
  "name": "Timer CHOP",
  "displayName": "Timer CHOP",
  "category": "CHOP",
  "subcategory": "Generators",
  "version": "",
  "lastUpdated": "2025-08-07T07:50:10.958Z",
  "sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\Timer_CHOP.htm",
  "url": "",
  "description": "The Timer CHOP is an engine for running timed processes. It outputs channels such as timing fractions, counters, pulses and timer states, and it calls python functions (callbacks) when various timing events occur.",
  "summary": "The Timer CHOP is an engine for running timed processes. It outputs channels such as timing fractions, counters, pulses and timer states, and it calls python functions (callbacks) when various timing ",
  "details": "",
  "usage": "",
  "tips": [],
  "warnings": [],
  "parameters": [
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Timer  is an engine for running timed processes. It outputs channels such as timing fractions, counters, pulses and timer states, and it calls python functions (callbacks) when various timing events occur.\t\t\nExamples using the Timer  include triggering multiple timed cues, running playlists, timelines, state machines, and driving pre-animated animation components in 3D scenes. See Help -> Operator  for numerous examples.\t\t\t\nYou set a timer to a number of seconds, frames or samples, and trigger it to start via the Start parameter or the second input . The Timer  outputs in seconds, frames, samples, fraction and on-off states as it’s counting, including a done channel that goes on when it is complete.  When it reaches certain states like end-of-cycles or when it’s done, various python callbacks are called allowing you to customize its behavior.\t\t\t\nThe Timer  gets triggered by events (via pulsing its parameters or driving its two inputs). It takes events in, counts time, changes state. Via its python callback functions, you can send events out to other nodes, set parameters, get/set values in DATs, CHOPs and storage, restart itself, or trigger other nodes. As such, it can operate as a state machine.\t\t\t\nIt has play/pause, plus a speed control to slow down or speed up the timer.\t\t\t\nIt can also cycle indefinitely and then can be signaled to end immediately or at the end of the current cycle.\t\t\t\nOne Timer  can also have multiple timers within it. By attaching a  you can define one timer (segment) per row. In Serial Timers mode it allows for one time segment followed by another. In Parallel Timers mode, the timers all run in parallel, each with its own begin time and length, and its own set of output channels.\t\t\t\n\t\t\t\nThe Timer  can be Locked to  in a deterministic way, or run more freely in Sequential Mode. When run independently from the timeline, you can jump ahead, break out of cycles, pause, goTo() exact position or timecode in the timer, and dynamically adjust the speed.\nThe Timer CHOPs can be chained together, so that when one ends, the next can begin. They just need to all be Initialized together, where the ready_pulse channel of one Timer  is exported to the Initialize parameter of the next Timer . Then they can be run in sequence, where the output of one Timer ’s done_pulse channel is wired to the Start input (or exported to the Start parameter) of the next Timer .  You start the chain of timers by starting the first Timer . By using some Timer CHOPs to loop awaiting input or response, or by adding logic to decide which  to start next, state machines can be implemented.\t\t\t\nAttach an Info  to see the timecodes, or use the .timecode members. Custom text strings can be placed in the Info  for each segment, and custom animated channels can be created.\t\t\t\nTo make the entire  loop after the last segment, set the On Done menu to Re-Start.\t\nRecommended: the OP  for Timer .  See the channel descriptions in Initialize Start.\t\t\n\n\nThe callbacks are called at different moments during the timer progression.\nonInitialize() gets called when you pulse the Initialize parameter. Here you can prepare any part of your setup prior to starting. At the end of Initialize the timer goes into a \"ready\" state.\nonStart() gets called on the frame that the Start parameter is pulsed. The timer then goes into a \"running\" state.\nonTimerActive() gets called every frame that the timer is running and there is no Delay or Play is off.\nonCycleStart() gets called if the timer is set to cycle via the Cycle parameters.\nBefore a cycle or segment ends, an onCycleEndAlert() callback based on the Cycle End Alert parameter can be called to allow you to prepare for the next cycle, segment or Timer .\nonSegmentEnter() and onSegmentExit() get called if the timer is being driven by a Segments  which acts like several timers in one.  The argument segment in these callbacks is actually an object with useful members including any custom columns you have in your segment table: In onSegmentEnter(), put the code print(help(segment))\nonDone() gets called when the timer reaches its finished state.\nYou can initialize at a specific time by using .masterSeconds in onInitialize().\nSee also: Trigger CHOP, Event CHOP, Speed CHOP, Count CHOP, Beat CHOP, Event CHOP, Clock CHOP, Delay CHOP, CHOP Execute DAT, LFO CHOP. \t\ntime measurements\n\nTime Measurements and what affects them\n\nName\nSpeed\nPlay\nCycles\nGo To and Cueing\nSubrange\nDelay Between Segments\nCumulative Time Count\nslows if speed<1\npauses when off\nkeeps counting\njumps\njumps\npauses\nPlaying Time Count\nunaffected\npauses when off\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nRunning Time Count\nunaffected\nunaffected\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nMaster Time Count\nslows if speed<1\npauses when off\nsee note *\njumps\njumps\nkeeps counting\nSegment + Fraction\n0 to 1 per-segment\npauses when off\nsee note *\njumps\njumps\npauses\nnote: jumps back every cycle if Cycle Limit is off. keeps counting up if Cycle Limit is on.\ntimerCHOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active -  - The Timer cooks: Never / Always / While Running (while in \"running\" state) / While Playing (while in \"running\" state and Play is on).\n\n never - always - running - playing -\n\n  timecontrol -  - Sequential (timeline-independent) or Locked to . In Locked to , non-deterministic features are disabled. External   lets you drive the master time (.masterSeconds etc) using a  channel defined by the parameters on the External page. External Timecode lets you drive the master time using a timecode //.\n\n lock - Output is determined by the current frame position. sequential - Output runs continuously, regardless of current frame position. chop - Output is determined by external  channel value. timecode - Output is determined by the value of an external timecode.\n\n  deferpars - When On, parameter changes like Length, Cycles and others are ignored until the next Intitalize. When Off, paraameter changes affect the timer immediately (possibly giving jumps in state).\n\n\n\n  initialize - (pulse parameter) Initialize is the signal to get the timer ready: sets the counters to zero (delay, timer, cycle, segment), set the output channels in the proper state, done to be off, the onInitialize() callback is run, and when initialize is complete, it indicates it’s ready by turning on the ready channel, awaiting a Start pulse.\n\n\n\n  start - (pulse) Start is the signal to commence the timers counting. It will count through the delay first, then the timer length. It does an Initialize if it is not already initialized, and then starts counting.\n\n\n\n  lengthtype -  - Describes how the length is defined.\n\n fixed - Lengths are finite, that is of a specific duration. infinite - The segments run continuously without end.\n\n  length - (float) the time-length of the timer. Set the Units menu to Seconds, Frames or Samples.\n\n\n\n  lengthunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  delay - (float) after Start, the delay before the timer begins counting.\n\n\n\n  delayunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  play - (onoff) Pauses the timer. It is basically a 0 or 1 multiplier on the Speed.\n\n\n\n  speed - (default 1) Slows down or speeds up the timer.\n\n\n\n  cue - Freezes playing at the Cue .\n\n\n\n  cuepulse - Jump instantly to the Cue .\n\n\n\n  cuepoint - Time (Seconds, Frames or Fraction) which the cue point is frozen to.\n\n\n\n  cueunits -  - Choose between using Samples, Frames, Seconds, Fraction(0-1) as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  cycle - (default Off) causes the timer to loop back to 0 when it reaches the end of the cycle.\n\n\n\n  cyclelimit - When the Cycle parameter is On, this determines if it will cycle indefinitely or cycle some maximum number of cycles.\n\n\n\n  maxcycles - When Cycle is on and Cycle Limit is on, this sets the maximum number of cycles.\n\n\n\n  cycleendalert - The number of seconds, frames or samples before a cycle, segment or done state is reached that the onCycleEndAlert() callback is called. This allows you to prepare for the next cycle, segment or timer.\n\n\n\n  notifyunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  exitendcycle - When pulsed, it will exit the cycle (and segment) at the end of the currently-playing cycle.\n\n\n\n  gotoendcycle - When pulsed, it will exit the cycle (and segment) immediately.\n\n\n\n  gotodone - Will immediately go to the Done state.\n\n\n\n  ondone -  - Determines which action to take when the timer gets to the end, ie \"is done\" or finished. Note there is also a onDone callback that can be used for customizing behavior.\n\n donothing - No action taken. reinit - Will re-initialize the timer, this is the same as pulsing the Initialize parameter above. restart - Will re-initialize and re-start the timer, this is the same as pulsing the Start parameter above. restartnoinit - Will re-star the timeer without re-initializing.\n\n  callbacks - The path to the  containing callbacks for this Timer .\n\n\n\n\n\nYou can specify multiple timers in one Timer . A \"segment\" acts as one timer, with its own length, delay time, number of cycles to repeat and other conditions.\n\n  segdat - A table  that contains one row per timer (segment). The column headings can be delay or begin, length, cycle, cyclelimit, maxcycles and cycleendalert, which override the equivalent parameters. (These are the internal names for the corresponding parameters.) begin is unique as it replaces delay, and it represents the time from Start that the timer will begin counting, whether the  is set to Serial Timers or Parallel Timers (see Segment Method). \t\nThe Segments  also can include any number of custom columns. See Columns to Custom Channels and Columns to Info  below.\n\n\n\n  segmethod -  - If the Segment Method is Serial Timers, the timers will be played back-to-back. If the Segment Method is Parallel Timers, the timers can be played at the same time, and a set of channels will be output for each timer.\n\n serial - parallel -\n\n  segunits -  - For the columns delay, begin, length and cycleendalert, you specify whether it’s seconds, frames or samples with this menu.\n\n samples - frames - seconds -\n\n  segsendtime -  - Describes how the end time is calculated.\n\n dat - The end time is based on the Segments  values. par - The end time is based on the Length parameter value. max - The end time is based on the greater of the Length parameter value and the Segments  values.\n\n  channelcolumns - Optional extra columns (any name) in the segments  can be output as extra channels (the columns must contain numbers). Specify their names in the Columns to Channels parameter. The channel name will be the column name. You can also output the length, delay, etc columns as channels.\n\n\n\n  interpolation -  - By default, custom channels step to their new value at the begin of the segment. This menu lets you interpolate to the new value linearly, or any combination of ease-in and ease-out.\n\n steptovalue - lineartovalue - easeintovalue - easeouttovalue - easeinouttovalue -\n\n  infocolumns - Optional extra columns (any name) in the segments  can be output to the Info  (attach an Info  to the Timer ) if you specify their names in this parameter.\n\n\n\n  gotoprevseg - (pulse) Jump to Previous Segment.\n\n\n\n  gotonextseg - (pulse) Jump to Next Segment.\t\nLingo\t\t\t\n\nSegment – each segment acts as one timer, with delay time, length, number of cycles to repeat and other conditions.\nBegin – in Parallel Timers, the number of seconds after a Start (frames or samples) after which each timer starts counting up from zero.\nDone – The state it goes into when all the timers has finished counting, whether they are in Parallel or Serial, Segments or not.\nEnd – Cycle End is the end of each cycle, Segment End is the end of the segment.\nCumulative Time – Zero at Start, a count that is affected by speed and rises while timers are active (not during delays).\nRunning Time – Zero at Start, the wall-clock time since Start was called no matter what are the delays, speeds, cycles or premature clicking of Go To Segment End. It stops counting when Done has been reached.\n\n\n\n\nOperate the timer within a sub range of the total length.\n\n  subrange - Turn this parameter on to limit the timer output to a subrange of the full length.\n\n\n\n  substart - The beginning point of the sub range.\n\n\n\n  substartunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subend - The end point of the sub range.\n\n\n\n  subendunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subendaction -  - Controls the behavior once the sub range end point is reached: Loop at End, or Pause at End.\n\n pause - loop -\n\n\n\n  outfraction - Outputs channel timer_fraction for each segment.\n\n\n\n  outtimercount -  - Outputs the elapsed Seconds channel as timer_seconds, Frames outputs channel as timer_frames, or Samples outputs channel as timer_samples. Because this is elapsed time, timer_frames starts at 0, as do the others.\n\n off - samples - frames - seconds - all -\n\n  outtimeractive - Outputs channel timer_active which is on only while the timer fraction is counting (is non-zero).\n\n\n\n  outtimerpulse - Outputs channel timer_pulse when the timer reaches its length.\n\n\n\n  outdelayfraction - Outputs a 0-1 fraction in delay_fraction while the delay occurs.\n\n\n\n  outdelaycount -  - Outputs the delay count in seconds, frames or samples.\n\n off - samples - frames - seconds - all -\n\n  outinit - Outputs channel initializing = 1 while the timer is initalizing (i.e. while the callback onInitialize() returns non-zero).\n\n\n\n  outready - Outputs channel ready which is 1 after an Initialize and before a Start.\n\n\n\n  outreadypulse - Outputs a pulse when initialization has finished and the timer is ready to start. It pulses even when the timer starts rights away after an initialization.\n\n\n\n  outrunning - Outputs channel running which is 1 after a Start and before the Done.\n\n\n\n  outdone - Outputs channel done when done or complete.\n\n\n\n  outdonepulse - Outputs channel done when the all timers have reached their completion.\n\n\n\n  outcycle - Outputs channel cycles, which is the number of cycles completed (In a segment), starting with 0 during the entire first cycle. If you jump to Done, cycle is incremented as if it played normally to the done state.\n\n\n\n  outcyclepulse - Outputs a pulse at the end of every cycle, even on the first and only cycle.\n\n\n\n  outcycleplusfraction - Outputs channel cycle_plus_fraction, starting with 0 for entire first cycle.\n\n\n\n  outseg - Outputs channel segment, starting with 0 for first segment.\n\n\n\n  outsegpulse - Outputs channel segment_pulse which is a pulse at the end of each segment.\n\n\n\n  outsegplusfraction - Outputs channel segment_plus_fraction, starting with 0 for first segment ending at #segments at end.\n\n\n\n  outlength -  - Outputs channel length, starting with 0 for first segment ending at #segments at end.\n\n off - seconds - frames - samples - all -\n\n  outcumulativecount -  - Outputs cumulative_seconds, cumulative_frames or cumulative_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active (Play) is on.   See the python member .cumulativeSeconds.\n\n off - samples - frames - seconds - all -\n\n  outplayingcount -  - Outputs playing_seconds, playing_frames or playing_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is not affected by \"Speed\", and counts up only while timer_active and play is on.  See the python member .playingSeconds.\n\n off - seconds - frames - samples - all -\n\n  outrunningcount -  - Outputs the \"wall-clock\" time since Start occurred, no matter what are the delays, speeds, cycles or pre-mature clicking of Go To Segment End, etc. It stops counting when Done has been reached. running_seconds, running_frames, or running_samples. When  is set to Parallel Timers, this will output a channel per segment plus one global running time channel.   See the python member .runningSeconds.\n\n off - samples - frames - seconds - all -\n\n  outmastercount -  - Outputs master_seconds, master_frames or master_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active and play is on. It also includes any delay times.   See the python member .masterSeconds.\n\n off - seconds - frames - samples - all -\n\n\n\n  extchop - The  used to control the current point in the timer.\n\n\n\n  extunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  extchannel - The channel that will control the current point of the timer.\n\n\n\n  exttcobj - Time is specified using a timecode. Should be a reference to either a  with channels 'hour', 'second', 'minute', 'frame', a  with a timecode string in its first cell, or a Timecode Class object.\n\n\n\n  extstartoff - Specifies the external time at which the timer should start.\n\n\n\n  extinitoff - Specifies the external time at which the timer should initialize.\n\n\n\n  rate - The sample rate that the  outputs at, which is also used when the units of Length, Delay and Cycle End Alert time are set to Samples. The default sample rate is 60 samples per second.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\n -\n -\n\nExtra Information for the Timer  can be accessed via an Info CHOP.\n\n\n - - - -\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditor2023.112802022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nOP Snippets  is a set of 700+ live examples of TouchDesigner operators. You can access snippets via the Help menu, or by right-clicking on network operators, or r-clicking on OP Create dialog items.\n\n\n\nA form of DATs (Data Operators) that is structured as rows and columns of text strings.\n\n\n\nThe panel at the bottom of TouchDesigner, it controls the current global looping Time your TouchDesigner project, or of just one component.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nThe sub-Family of Component types that are used to define and render 3D scenes. A Geometry Component is an Object that contains the 3D shapes to render. A Camera COMP and Light COMP are other Object types. Separately, \"Objects\" also refers to Python objects.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Timer_CHOP&oldid=32262\"\n\t\tCategory: CHOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.932Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe Timer  is an engine for running timed processes. It outputs channels such as timing fractions, counters, pulses and timer states, and it calls python functions (callbacks) when various timing events occur.\t\t\nExamples using the Timer  include triggering multiple timed cues, running playlists, timelines, state machines, and driving pre-animated animation components in 3D scenes. See Help -> Operator  for numerous examples.\t\t\t\nYou set a timer to a number of seconds, frames or samples, and trigger it to start via the Start parameter or the second input . The Timer  outputs in seconds, frames, samples, fraction and on-off states as it’s counting, including a done channel that goes on when it is complete.  When it reaches certain states like end-of-cycles or when it’s done, various python callbacks are called allowing you to customize its behavior.\t\t\t\nThe Timer  gets triggered by events (via pulsing its parameters or driving its two inputs). It takes events in, counts time, changes state. Via its python callback functions, you can send events out to other nodes, set parameters, get/set values in DATs, CHOPs and storage, restart itself, or trigger other nodes. As such, it can operate as a state machine.\t\t\t\nIt has play/pause, plus a speed control to slow down or speed up the timer.\t\t\t\nIt can also cycle indefinitely and then can be signaled to end immediately or at the end of the current cycle.\t\t\t\nOne Timer  can also have multiple timers within it. By attaching a  you can define one timer (segment) per row. In Serial Timers mode it allows for one time segment followed by another. In Parallel Timers mode, the timers all run in parallel, each with its own begin time and length, and its own set of output channels.\t\t\t\n\t\t\t\nThe Timer  can be Locked to  in a deterministic way, or run more freely in Sequential Mode. When run independently from the timeline, you can jump ahead, break out of cycles, pause, goTo() exact position or timecode in the timer, and dynamically adjust the speed.\nThe Timer CHOPs can be chained together, so that when one ends, the next can begin. They just need to all be Initialized together, where the ready_pulse channel of one Timer  is exported to the Initialize parameter of the next Timer . Then they can be run in sequence, where the output of one Timer ’s done_pulse channel is wired to the Start input (or exported to the Start parameter) of the next Timer .  You start the chain of timers by starting the first Timer . By using some Timer CHOPs to loop awaiting input or response, or by adding logic to decide which  to start next, state machines can be implemented.\t\t\t\nAttach an Info  to see the timecodes, or use the .timecode members. Custom text strings can be placed in the Info  for each segment, and custom animated channels can be created.\t\t\t\nTo make the entire  loop after the last segment, set the On Done menu to Re-Start.\t\nRecommended: the OP  for Timer .  See the channel descriptions in Initialize Start.\t\t\n\n\nThe callbacks are called at different moments during the timer progression.\nonInitialize() gets called when you pulse the Initialize parameter. Here you can prepare any part of your setup prior to starting. At the end of Initialize the timer goes into a \"ready\" state.\nonStart() gets called on the frame that the Start parameter is pulsed. The timer then goes into a \"running\" state.\nonTimerActive() gets called every frame that the timer is running and there is no Delay or Play is off.\nonCycleStart() gets called if the timer is set to cycle via the Cycle parameters.\nBefore a cycle or segment ends, an onCycleEndAlert() callback based on the Cycle End Alert parameter can be called to allow you to prepare for the next cycle, segment or Timer .\nonSegmentEnter() and onSegmentExit() get called if the timer is being driven by a Segments  which acts like several timers in one.  The argument segment in these callbacks is actually an object with useful members including any custom columns you have in your segment table: In onSegmentEnter(), put the code print(help(segment))\nonDone() gets called when the timer reaches its finished state.\nYou can initialize at a specific time by using .masterSeconds in onInitialize().\nSee also: Trigger CHOP, Event CHOP, Speed CHOP, Count CHOP, Beat CHOP, Event CHOP, Clock CHOP, Delay CHOP, CHOP Execute DAT, LFO CHOP. \t\ntime measurements\n\nTime Measurements and what affects them\n\nName\nSpeed\nPlay\nCycles\nGo To and Cueing\nSubrange\nDelay Between Segments\nCumulative Time Count\nslows if speed<1\npauses when off\nkeeps counting\njumps\njumps\npauses\nPlaying Time Count\nunaffected\npauses when off\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nRunning Time Count\nunaffected\nunaffected\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nMaster Time Count\nslows if speed<1\npauses when off\nsee note *\njumps\njumps\nkeeps counting\nSegment + Fraction\n0 to 1 per-segment\npauses when off\nsee note *\njumps\njumps\npauses\nnote: jumps back every cycle if Cycle Limit is off. keeps counting up if Cycle Limit is on.\ntimerCHOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active -  - The Timer cooks: Never / Always / While Running (while in \"running\" state) / While Playing (while in \"running\" state and Play is on).\n\n never - always - running - playing -\n\n  timecontrol -  - Sequential (timeline-independent) or Locked to . In Locked to , non-deterministic features are disabled. External   lets you drive the master time (.masterSeconds etc) using a  channel defined by the parameters on the External page. External Timecode lets you drive the master time using a timecode //.\n\n lock - Output is determined by the current frame position. sequential - Output runs continuously, regardless of current frame position. chop - Output is determined by external  channel value. timecode - Output is determined by the value of an external timecode.\n\n  deferpars - When On, parameter changes like Length, Cycles and others are ignored until the next Intitalize. When Off, paraameter changes affect the timer immediately (possibly giving jumps in state).\n\n\n\n  initialize - (pulse parameter) Initialize is the signal to get the timer ready: sets the counters to zero (delay, timer, cycle, segment), set the output channels in the proper state, done to be off, the onInitialize() callback is run, and when initialize is complete, it indicates it’s ready by turning on the ready channel, awaiting a Start pulse.\n\n\n\n  start - (pulse) Start is the signal to commence the timers counting. It will count through the delay first, then the timer length. It does an Initialize if it is not already initialized, and then starts counting.\n\n\n\n  lengthtype -  - Describes how the length is defined.\n\n fixed - Lengths are finite, that is of a specific duration. infinite - The segments run continuously without end.\n\n  length - (float) the time-length of the timer. Set the Units menu to Seconds, Frames or Samples.\n\n\n\n  lengthunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  delay - (float) after Start, the delay before the timer begins counting.\n\n\n\n  delayunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  play - (onoff) Pauses the timer. It is basically a 0 or 1 multiplier on the Speed.\n\n\n\n  speed - (default 1) Slows down or speeds up the timer.\n\n\n\n  cue - Freezes playing at the Cue .\n\n\n\n  cuepulse - Jump instantly to the Cue .\n\n\n\n  cuepoint - Time (Seconds, Frames or Fraction) which the cue point is frozen to.\n\n\n\n  cueunits -  - Choose between using Samples, Frames, Seconds, Fraction(0-1) as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  cycle - (default Off) causes the timer to loop back to 0 when it reaches the end of the cycle.\n\n\n\n  cyclelimit - When the Cycle parameter is On, this determines if it will cycle indefinitely or cycle some maximum number of cycles.\n\n\n\n  maxcycles - When Cycle is on and Cycle Limit is on, this sets the maximum number of cycles.\n\n\n\n  cycleendalert - The number of seconds, frames or samples before a cycle, segment or done state is reached that the onCycleEndAlert() callback is called. This allows you to prepare for the next cycle, segment or timer.\n\n\n\n  notifyunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  exitendcycle - When pulsed, it will exit the cycle (and segment) at the end of the currently-playing cycle.\n\n\n\n  gotoendcycle - When pulsed, it will exit the cycle (and segment) immediately.\n\n\n\n  gotodone - Will immediately go to the Done state.\n\n\n\n  ondone -  - Determines which action to take when the timer gets to the end, ie \"is done\" or finished. Note there is also a onDone callback that can be used for customizing behavior.\n\n donothing - No action taken. reinit - Will re-initialize the timer, this is the same as pulsing the Initialize parameter above. restart - Will re-initialize and re-start the timer, this is the same as pulsing the Start parameter above. restartnoinit - Will re-star the timeer without re-initializing.\n\n  callbacks - The path to the  containing callbacks for this Timer .\n\n\n\n\n\nYou can specify multiple timers in one Timer . A \"segment\" acts as one timer, with its own length, delay time, number of cycles to repeat and other conditions.\n\n  segdat - A table  that contains one row per timer (segment). The column headings can be delay or begin, length, cycle, cyclelimit, maxcycles and cycleendalert, which override the equivalent parameters. (These are the internal names for the corresponding parameters.) begin is unique as it replaces delay, and it represents the time from Start that the timer will begin counting, whether the  is set to Serial Timers or Parallel Timers (see Segment Method). \t\nThe Segments  also can include any number of custom columns. See Columns to Custom Channels and Columns to Info  below.\n\n\n\n  segmethod -  - If the Segment Method is Serial Timers, the timers will be played back-to-back. If the Segment Method is Parallel Timers, the timers can be played at the same time, and a set of channels will be output for each timer.\n\n serial - parallel -\n\n  segunits -  - For the columns delay, begin, length and cycleendalert, you specify whether it’s seconds, frames or samples with this menu.\n\n samples - frames - seconds -\n\n  segsendtime -  - Describes how the end time is calculated.\n\n dat - The end time is based on the Segments  values. par - The end time is based on the Length parameter value. max - The end time is based on the greater of the Length parameter value and the Segments  values.\n\n  channelcolumns - Optional extra columns (any name) in the segments  can be output as extra channels (the columns must contain numbers). Specify their names in the Columns to Channels parameter. The channel name will be the column name. You can also output the length, delay, etc columns as channels.\n\n\n\n  interpolation -  - By default, custom channels step to their new value at the begin of the segment. This menu lets you interpolate to the new value linearly, or any combination of ease-in and ease-out.\n\n steptovalue - lineartovalue - easeintovalue - easeouttovalue - easeinouttovalue -\n\n  infocolumns - Optional extra columns (any name) in the segments  can be output to the Info  (attach an Info  to the Timer ) if you specify their names in this parameter.\n\n\n\n  gotoprevseg - (pulse) Jump to Previous Segment.\n\n\n\n  gotonextseg - (pulse) Jump to Next Segment.\t\nLingo\t\t\t\n\nSegment – each segment acts as one timer, with delay time, length, number of cycles to repeat and other conditions.\nBegin – in Parallel Timers, the number of seconds after a Start (frames or samples) after which each timer starts counting up from zero.\nDone – The state it goes into when all the timers has finished counting, whether they are in Parallel or Serial, Segments or not.\nEnd – Cycle End is the end of each cycle, Segment End is the end of the segment.\nCumulative Time – Zero at Start, a count that is affected by speed and rises while timers are active (not during delays).\nRunning Time – Zero at Start, the wall-clock time since Start was called no matter what are the delays, speeds, cycles or premature clicking of Go To Segment End. It stops counting when Done has been reached.\n\n\n\n\nOperate the timer within a sub range of the total length.\n\n  subrange - Turn this parameter on to limit the timer output to a subrange of the full length.\n\n\n\n  substart - The beginning point of the sub range.\n\n\n\n  substartunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subend - The end point of the sub range.\n\n\n\n  subendunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subendaction -  - Controls the behavior once the sub range end point is reached: Loop at End, or Pause at End.\n\n pause - loop -\n\n\n\n  outfraction - Outputs channel timer_fraction for each segment.\n\n\n\n  outtimercount -  - Outputs the elapsed Seconds channel as timer_seconds, Frames outputs channel as timer_frames, or Samples outputs channel as timer_samples. Because this is elapsed time, timer_frames starts at 0, as do the others.\n\n off - samples - frames - seconds - all -\n\n  outtimeractive - Outputs channel timer_active which is on only while the timer fraction is counting (is non-zero).\n\n\n\n  outtimerpulse - Outputs channel timer_pulse when the timer reaches its length.\n\n\n\n  outdelayfraction - Outputs a 0-1 fraction in delay_fraction while the delay occurs.\n\n\n\n  outdelaycount -  - Outputs the delay count in seconds, frames or samples.\n\n off - samples - frames - seconds - all -\n\n  outinit - Outputs channel initializing = 1 while the timer is initalizing (i.e. while the callback onInitialize() returns non-zero).\n\n\n\n  outready - Outputs channel ready which is 1 after an Initialize and before a Start.\n\n\n\n  outreadypulse - Outputs a pulse when initialization has finished and the timer is ready to start. It pulses even when the timer starts rights away after an initialization.\n\n\n\n  outrunning - Outputs channel running which is 1 after a Start and before the Done.\n\n\n\n  outdone - Outputs channel done when done or complete.\n\n\n\n  outdonepulse - Outputs channel done when the all timers have reached their completion.\n\n\n\n  outcycle - Outputs channel cycles, which is the number of cycles completed (In a segment), starting with 0 during the entire first cycle. If you jump to Done, cycle is incremented as if it played normally to the done state.\n\n\n\n  outcyclepulse - Outputs a pulse at the end of every cycle, even on the first and only cycle.\n\n\n\n  outcycleplusfraction - Outputs channel cycle_plus_fraction, starting with 0 for entire first cycle.\n\n\n\n  outseg - Outputs channel segment, starting with 0 for first segment.\n\n\n\n  outsegpulse - Outputs channel segment_pulse which is a pulse at the end of each segment.\n\n\n\n  outsegplusfraction - Outputs channel segment_plus_fraction, starting with 0 for first segment ending at #segments at end.\n\n\n\n  outlength -  - Outputs channel length, starting with 0 for first segment ending at #segments at end.\n\n off - seconds - frames - samples - all -\n\n  outcumulativecount -  - Outputs cumulative_seconds, cumulative_frames or cumulative_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active (Play) is on.   See the python member .cumulativeSeconds.\n\n off - samples - frames - seconds - all -\n\n  outplayingcount -  - Outputs playing_seconds, playing_frames or playing_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is not affected by \"Speed\", and counts up only while timer_active and play is on.  See the python member .playingSeconds.\n\n off - seconds - frames - samples - all -\n\n  outrunningcount -  - Outputs the \"wall-clock\" time since Start occurred, no matter what are the delays, speeds, cycles or pre-mature clicking of Go To Segment End, etc. It stops counting when Done has been reached. running_seconds, running_frames, or running_samples. When  is set to Parallel Timers, this will output a channel per segment plus one global running time channel.   See the python member .runningSeconds.\n\n off - samples - frames - seconds - all -\n\n  outmastercount -  - Outputs master_seconds, master_frames or master_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active and play is on. It also includes any delay times.   See the python member .masterSeconds.\n\n off - seconds - frames - samples - all -\n\n\n\n  extchop - The  used to control the current point in the timer.\n\n\n\n  extunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  extchannel - The channel that will control the current point of the timer.\n\n\n\n  exttcobj - Time is specified using a timecode. Should be a reference to either a  with channels 'hour', 'second', 'minute', 'frame', a  with a timecode string in its first cell, or a Timecode Class object.\n\n\n\n  extstartoff - Specifies the external time at which the timer should start.\n\n\n\n  extinitoff - Specifies the external time at which the timer should initialize.\n\n\n\n  rate - The sample rate that the  outputs at, which is also used when the units of Length, Delay and Cycle End Alert time are set to Samples. The default sample rate is 60 samples per second.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\n -\n -\n\nExtra Information for the Timer  can be accessed via an Info CHOP.\n\n\n - - - -\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditor2023.112802022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nOP Snippets  is a set of 700+ live examples of TouchDesigner operators. You can access snippets via the Help menu, or by right-clicking on network operators, or r-clicking on OP Create dialog items.\n\n\n\nA form of DATs (Data Operators) that is structured as rows and columns of text strings.\n\n\n\nThe panel at the bottom of TouchDesigner, it controls the current global looping Time your TouchDesigner project, or of just one component.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nThe sub-Family of Component types that are used to define and render 3D scenes. A Geometry Component is an Object that contains the 3D shapes to render. A Camera COMP and Light COMP are other Object types. Separately, \"Objects\" also refers to Python objects.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Timer_CHOP&oldid=32262\"\n\t\tCategory: CHOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.939Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "The Timer  is an engine for running timed processes. It outputs channels such as timing fractions, counters, pulses and timer states, and it calls python functions (callbacks) when various timing events occur.\t\t\nExamples using the Timer  include triggering multiple timed cues, running playlists, timelines, state machines, and driving pre-animated animation components in 3D scenes. See Help -> Operator  for numerous examples.\t\t\t\nYou set a timer to a number of seconds, frames or samples, and trigger it to start via the Start parameter or the second input . The Timer  outputs in seconds, frames, samples, fraction and on-off states as it’s counting, including a done channel that goes on when it is complete.  When it reaches certain states like end-of-cycles or when it’s done, various python callbacks are called allowing you to customize its behavior.\t\t\t\nThe Timer  gets triggered by events (via pulsing its parameters or driving its two inputs). It takes events in, counts time, changes state. Via its python callback functions, you can send events out to other nodes, set parameters, get/set values in DATs, CHOPs and storage, restart itself, or trigger other nodes. As such, it can operate as a state machine.\t\t\t\nIt has play/pause, plus a speed control to slow down or speed up the timer.\t\t\t\nIt can also cycle indefinitely and then can be signaled to end immediately or at the end of the current cycle.\t\t\t\nOne Timer  can also have multiple timers within it. By attaching a  you can define one timer (segment) per row. In Serial Timers mode it allows for one time segment followed by another. In Parallel Timers mode, the timers all run in parallel, each with its own begin time and length, and its own set of output channels.\t\t\t\n\t\t\t\nThe Timer  can be Locked to  in a deterministic way, or run more freely in Sequential Mode. When run independently from the timeline, you can jump ahead, break out of cycles, pause, goTo() exact position or timecode in the timer, and dynamically adjust the speed.\nThe Timer CHOPs can be chained together, so that when one ends, the next can begin. They just need to all be Initialized together, where the ready_pulse channel of one Timer  is exported to the Initialize parameter of the next Timer . Then they can be run in sequence, where the output of one Timer ’s done_pulse channel is wired to the Start input (or exported to the Start parameter) of the next Timer .  You start the chain of timers by starting the first Timer . By using some Timer CHOPs to loop awaiting input or response, or by adding logic to decide which  to start next, state machines can be implemented.\t\t\t\nAttach an Info  to see the timecodes, or use the .timecode members. Custom text strings can be placed in the Info  for each segment, and custom animated channels can be created.\t\t\t\nTo make the entire  loop after the last segment, set the On Done menu to Re-Start.\t\nRecommended: the OP  for Timer .  See the channel descriptions in Initialize Start.\t\t\n\n\nThe callbacks are called at different moments during the timer progression.\nonInitialize() gets called when you pulse the Initialize parameter. Here you can prepare any part of your setup prior to starting. At the end of Initialize the timer goes into a \"ready\" state.\nonStart() gets called on the frame that the Start parameter is pulsed. The timer then goes into a \"running\" state.\nonTimerActive() gets called every frame that the timer is running and there is no Delay or Play is off.\nonCycleStart() gets called if the timer is set to cycle via the Cycle parameters.\nBefore a cycle or segment ends, an onCycleEndAlert() callback based on the Cycle End Alert parameter can be called to allow you to prepare for the next cycle, segment or Timer .\nonSegmentEnter() and onSegmentExit() get called if the timer is being driven by a Segments  which acts like several timers in one.  The argument segment in these callbacks is actually an object with useful members including any custom columns you have in your segment table: In onSegmentEnter(), put the code print(help(segment))\nonDone() gets called when the timer reaches its finished state.\nYou can initialize at a specific time by using .masterSeconds in onInitialize().\nSee also: Trigger CHOP, Event CHOP, Speed CHOP, Count CHOP, Beat CHOP, Event CHOP, Clock CHOP, Delay CHOP, CHOP Execute DAT, LFO CHOP. \t\ntime measurements\n\nTime Measurements and what affects them\n\nName\nSpeed\nPlay\nCycles\nGo To and Cueing\nSubrange\nDelay Between Segments\nCumulative Time Count\nslows if speed<1\npauses when off\nkeeps counting\njumps\njumps\npauses\nPlaying Time Count\nunaffected\npauses when off\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nRunning Time Count\nunaffected\nunaffected\nkeeps counting\nkeeps counting\nkeeps counting\nkeeps counting\nMaster Time Count\nslows if speed<1\npauses when off\nsee note *\njumps\njumps\nkeeps counting\nSegment + Fraction\n0 to 1 per-segment\npauses when off\nsee note *\njumps\njumps\npauses\nnote: jumps back every cycle if Cycle Limit is off. keeps counting up if Cycle Limit is on.\ntimerCHOP_Class\n\nContents\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active -  - The Timer cooks: Never / Always / While Running (while in \"running\" state) / While Playing (while in \"running\" state and Play is on).\n\n never - always - running - playing -\n\n  timecontrol -  - Sequential (timeline-independent) or Locked to . In Locked to , non-deterministic features are disabled. External   lets you drive the master time (.masterSeconds etc) using a  channel defined by the parameters on the External page. External Timecode lets you drive the master time using a timecode //.\n\n lock - Output is determined by the current frame position. sequential - Output runs continuously, regardless of current frame position. chop - Output is determined by external  channel value. timecode - Output is determined by the value of an external timecode.\n\n  deferpars - When On, parameter changes like Length, Cycles and others are ignored until the next Intitalize. When Off, paraameter changes affect the timer immediately (possibly giving jumps in state).\n\n\n\n  initialize - (pulse parameter) Initialize is the signal to get the timer ready: sets the counters to zero (delay, timer, cycle, segment), set the output channels in the proper state, done to be off, the onInitialize() callback is run, and when initialize is complete, it indicates it’s ready by turning on the ready channel, awaiting a Start pulse.\n\n\n\n  start - (pulse) Start is the signal to commence the timers counting. It will count through the delay first, then the timer length. It does an Initialize if it is not already initialized, and then starts counting.\n\n\n\n  lengthtype -  - Describes how the length is defined.\n\n fixed - Lengths are finite, that is of a specific duration. infinite - The segments run continuously without end.\n\n  length - (float) the time-length of the timer. Set the Units menu to Seconds, Frames or Samples.\n\n\n\n  lengthunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  delay - (float) after Start, the delay before the timer begins counting.\n\n\n\n  delayunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  play - (onoff) Pauses the timer. It is basically a 0 or 1 multiplier on the Speed.\n\n\n\n  speed - (default 1) Slows down or speeds up the timer.\n\n\n\n  cue - Freezes playing at the Cue .\n\n\n\n  cuepulse - Jump instantly to the Cue .\n\n\n\n  cuepoint - Time (Seconds, Frames or Fraction) which the cue point is frozen to.\n\n\n\n  cueunits -  - Choose between using Samples, Frames, Seconds, Fraction(0-1) as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  cycle - (default Off) causes the timer to loop back to 0 when it reaches the end of the cycle.\n\n\n\n  cyclelimit - When the Cycle parameter is On, this determines if it will cycle indefinitely or cycle some maximum number of cycles.\n\n\n\n  maxcycles - When Cycle is on and Cycle Limit is on, this sets the maximum number of cycles.\n\n\n\n  cycleendalert - The number of seconds, frames or samples before a cycle, segment or done state is reached that the onCycleEndAlert() callback is called. This allows you to prepare for the next cycle, segment or timer.\n\n\n\n  notifyunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  exitendcycle - When pulsed, it will exit the cycle (and segment) at the end of the currently-playing cycle.\n\n\n\n  gotoendcycle - When pulsed, it will exit the cycle (and segment) immediately.\n\n\n\n  gotodone - Will immediately go to the Done state.\n\n\n\n  ondone -  - Determines which action to take when the timer gets to the end, ie \"is done\" or finished. Note there is also a onDone callback that can be used for customizing behavior.\n\n donothing - No action taken. reinit - Will re-initialize the timer, this is the same as pulsing the Initialize parameter above. restart - Will re-initialize and re-start the timer, this is the same as pulsing the Start parameter above. restartnoinit - Will re-star the timeer without re-initializing.\n\n  callbacks - The path to the  containing callbacks for this Timer .\n\n\n\n\n\nYou can specify multiple timers in one Timer . A \"segment\" acts as one timer, with its own length, delay time, number of cycles to repeat and other conditions.\n\n  segdat - A table  that contains one row per timer (segment). The column headings can be delay or begin, length, cycle, cyclelimit, maxcycles and cycleendalert, which override the equivalent parameters. (These are the internal names for the corresponding parameters.) begin is unique as it replaces delay, and it represents the time from Start that the timer will begin counting, whether the  is set to Serial Timers or Parallel Timers (see Segment Method). \t\nThe Segments  also can include any number of custom columns. See Columns to Custom Channels and Columns to Info  below.\n\n\n\n  segmethod -  - If the Segment Method is Serial Timers, the timers will be played back-to-back. If the Segment Method is Parallel Timers, the timers can be played at the same time, and a set of channels will be output for each timer.\n\n serial - parallel -\n\n  segunits -  - For the columns delay, begin, length and cycleendalert, you specify whether it’s seconds, frames or samples with this menu.\n\n samples - frames - seconds -\n\n  segsendtime -  - Describes how the end time is calculated.\n\n dat - The end time is based on the Segments  values. par - The end time is based on the Length parameter value. max - The end time is based on the greater of the Length parameter value and the Segments  values.\n\n  channelcolumns - Optional extra columns (any name) in the segments  can be output as extra channels (the columns must contain numbers). Specify their names in the Columns to Channels parameter. The channel name will be the column name. You can also output the length, delay, etc columns as channels.\n\n\n\n  interpolation -  - By default, custom channels step to their new value at the begin of the segment. This menu lets you interpolate to the new value linearly, or any combination of ease-in and ease-out.\n\n steptovalue - lineartovalue - easeintovalue - easeouttovalue - easeinouttovalue -\n\n  infocolumns - Optional extra columns (any name) in the segments  can be output to the Info  (attach an Info  to the Timer ) if you specify their names in this parameter.\n\n\n\n  gotoprevseg - (pulse) Jump to Previous Segment.\n\n\n\n  gotonextseg - (pulse) Jump to Next Segment.\t\nLingo\t\t\t\n\nSegment – each segment acts as one timer, with delay time, length, number of cycles to repeat and other conditions.\nBegin – in Parallel Timers, the number of seconds after a Start (frames or samples) after which each timer starts counting up from zero.\nDone – The state it goes into when all the timers has finished counting, whether they are in Parallel or Serial, Segments or not.\nEnd – Cycle End is the end of each cycle, Segment End is the end of the segment.\nCumulative Time – Zero at Start, a count that is affected by speed and rises while timers are active (not during delays).\nRunning Time – Zero at Start, the wall-clock time since Start was called no matter what are the delays, speeds, cycles or premature clicking of Go To Segment End. It stops counting when Done has been reached.\n\n\n\n\nOperate the timer within a sub range of the total length.\n\n  subrange - Turn this parameter on to limit the timer output to a subrange of the full length.\n\n\n\n  substart - The beginning point of the sub range.\n\n\n\n  substartunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subend - The end point of the sub range.\n\n\n\n  subendunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -\n\n  subendaction -  - Controls the behavior once the sub range end point is reached: Loop at End, or Pause at End.\n\n pause - loop -\n\n\n\n  outfraction - Outputs channel timer_fraction for each segment.\n\n\n\n  outtimercount -  - Outputs the elapsed Seconds channel as timer_seconds, Frames outputs channel as timer_frames, or Samples outputs channel as timer_samples. Because this is elapsed time, timer_frames starts at 0, as do the others.\n\n off - samples - frames - seconds - all -\n\n  outtimeractive - Outputs channel timer_active which is on only while the timer fraction is counting (is non-zero).\n\n\n\n  outtimerpulse - Outputs channel timer_pulse when the timer reaches its length.\n\n\n\n  outdelayfraction - Outputs a 0-1 fraction in delay_fraction while the delay occurs.\n\n\n\n  outdelaycount -  - Outputs the delay count in seconds, frames or samples.\n\n off - samples - frames - seconds - all -\n\n  outinit - Outputs channel initializing = 1 while the timer is initalizing (i.e. while the callback onInitialize() returns non-zero).\n\n\n\n  outready - Outputs channel ready which is 1 after an Initialize and before a Start.\n\n\n\n  outreadypulse - Outputs a pulse when initialization has finished and the timer is ready to start. It pulses even when the timer starts rights away after an initialization.\n\n\n\n  outrunning - Outputs channel running which is 1 after a Start and before the Done.\n\n\n\n  outdone - Outputs channel done when done or complete.\n\n\n\n  outdonepulse - Outputs channel done when the all timers have reached their completion.\n\n\n\n  outcycle - Outputs channel cycles, which is the number of cycles completed (In a segment), starting with 0 during the entire first cycle. If you jump to Done, cycle is incremented as if it played normally to the done state.\n\n\n\n  outcyclepulse - Outputs a pulse at the end of every cycle, even on the first and only cycle.\n\n\n\n  outcycleplusfraction - Outputs channel cycle_plus_fraction, starting with 0 for entire first cycle.\n\n\n\n  outseg - Outputs channel segment, starting with 0 for first segment.\n\n\n\n  outsegpulse - Outputs channel segment_pulse which is a pulse at the end of each segment.\n\n\n\n  outsegplusfraction - Outputs channel segment_plus_fraction, starting with 0 for first segment ending at #segments at end.\n\n\n\n  outlength -  - Outputs channel length, starting with 0 for first segment ending at #segments at end.\n\n off - seconds - frames - samples - all -\n\n  outcumulativecount -  - Outputs cumulative_seconds, cumulative_frames or cumulative_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active (Play) is on.   See the python member .cumulativeSeconds.\n\n off - samples - frames - seconds - all -\n\n  outplayingcount -  - Outputs playing_seconds, playing_frames or playing_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is not affected by \"Speed\", and counts up only while timer_active and play is on.  See the python member .playingSeconds.\n\n off - seconds - frames - samples - all -\n\n  outrunningcount -  - Outputs the \"wall-clock\" time since Start occurred, no matter what are the delays, speeds, cycles or pre-mature clicking of Go To Segment End, etc. It stops counting when Done has been reached. running_seconds, running_frames, or running_samples. When  is set to Parallel Timers, this will output a channel per segment plus one global running time channel.   See the python member .runningSeconds.\n\n off - samples - frames - seconds - all -\n\n  outmastercount -  - Outputs master_seconds, master_frames or master_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active and play is on. It also includes any delay times.   See the python member .masterSeconds.\n\n off - seconds - frames - samples - all -\n\n\n\n  extchop - The  used to control the current point in the timer.\n\n\n\n  extunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds - fraction -\n\n  extchannel - The channel that will control the current point of the timer.\n\n\n\n  exttcobj - Time is specified using a timecode. Should be a reference to either a  with channels 'hour', 'second', 'minute', 'frame', a  with a timecode string in its first cell, or a Timecode Class object.\n\n\n\n  extstartoff - Specifies the external time at which the timer should start.\n\n\n\n  extinitoff - Specifies the external time at which the timer should initialize.\n\n\n\n  rate - The sample rate that the  outputs at, which is also used when the units of Length, Delay and Cycle End Alert time are set to Samples. The default sample rate is 60 samples per second.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\n -\n -\n\nExtra Information for the Timer  can be accessed via an Info CHOP.\n\n\n - - - -\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditorwikieditor2023.112802022.241402021.100002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nOP Snippets  is a set of 700+ live examples of TouchDesigner operators. You can access snippets via the Help menu, or by right-clicking on network operators, or r-clicking on OP Create dialog items.\n\n\n\nA form of DATs (Data Operators) that is structured as rows and columns of text strings.\n\n\n\nThe panel at the bottom of TouchDesigner, it controls the current global looping Time your TouchDesigner project, or of just one component.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nThe sub-Family of Component types that are used to define and render 3D scenes. A Geometry Component is an Object that contains the 3D shapes to render. A Camera COMP and Light COMP are other Object types. Separately, \"Objects\" also refers to Python objects.\n\n\n\nEach SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=Timer_CHOP&oldid=32262\"",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "active -  - The Timer cooks: Never / Always / While Running (while in \"running\" state) / While Playing (while in \"running\" state and Play is on).\n\n never - always - running - playing -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Never",
      "label": "Never",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "never - always - running - playing -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Time Control",
      "label": "Time Control",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "timecontrol -  - Sequential (timeline-independent) or Locked to . In Locked to , non-deterministic features are disabled. External   lets you drive the master time (.masterSeconds etc) using a  channel defined by the parameters on the External page. External Timecode lets you drive the master time using a timecode //.\n\n lock - Output is determined by the current frame position. sequential - Output runs continuously, regardless of current frame position. chop - Output is determined by external  channel value. timecode - Output is determined by the value of an external timecode.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Lock To Timeline",
      "label": "Lock To Timeline",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "lock - Output is determined by the current frame position. sequential - Output runs continuously, regardless of current frame position. chop - Output is determined by external  channel value. timecode - Output is determined by the value of an external timecode.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Defer Par Changes",
      "label": "Defer Par Changes",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "deferpars - When On, parameter changes like Length, Cycles and others are ignored until the next Intitalize. When Off, paraameter changes affect the timer immediately (possibly giving jumps in state).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Initialize",
      "label": "Initialize",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "initialize - (pulse parameter) Initialize is the signal to get the timer ready: sets the counters to zero (delay, timer, cycle, segment), set the output channels in the proper state, done to be off, the onInitialize() callback is run, and when initialize is complete, it indicates it’s ready by turning on the ready channel, awaiting a Start pulse.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Start",
      "label": "Start",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "start - (pulse) Start is the signal to commence the timers counting. It will count through the delay first, then the timer length. It does an Initialize if it is not already initialized, and then starts counting.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Length Type",
      "label": "Length Type",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "lengthtype -  - Describes how the length is defined.\n\n fixed - Lengths are finite, that is of a specific duration. infinite - The segments run continuously without end.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.944Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Fixed",
      "label": "Fixed",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "fixed - Lengths are finite, that is of a specific duration. infinite - The segments run continuously without end.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Length",
      "label": "Length",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "length - (float) the time-length of the timer. Set the Units menu to Seconds, Frames or Samples.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Length Units",
      "label": "Length Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "lengthunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Delay",
      "label": "Delay",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "delay - (float) after Start, the delay before the timer begins counting.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Delay Units",
      "label": "Delay Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "delayunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Play",
      "label": "Play",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "play - (onoff) Pauses the timer. It is basically a 0 or 1 multiplier on the Speed.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Speed",
      "label": "Speed",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "speed - (default 1) Slows down or speeds up the timer.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cue",
      "label": "Cue",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cue - Freezes playing at the Cue .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cue Pulse",
      "label": "Cue Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cuepulse - Jump instantly to the Cue .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cue Point",
      "label": "Cue Point",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cuepoint - Time (Seconds, Frames or Fraction) which the cue point is frozen to.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cue Units",
      "label": "Cue Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cueunits -  - Choose between using Samples, Frames, Seconds, Fraction(0-1) as the units for this parameter.\n\n samples - frames - seconds - fraction -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds - fraction -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycle",
      "label": "Cycle",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cycle - (default Off) causes the timer to loop back to 0 when it reaches the end of the cycle.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycle Limit",
      "label": "Cycle Limit",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cyclelimit - When the Cycle parameter is On, this determines if it will cycle indefinitely or cycle some maximum number of cycles.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Maximum Cycles",
      "label": "Maximum Cycles",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "maxcycles - When Cycle is on and Cycle Limit is on, this sets the maximum number of cycles.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycle End Alert",
      "label": "Cycle End Alert",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "cycleendalert - The number of seconds, frames or samples before a cycle, segment or done state is reached that the onCycleEndAlert() callback is called. This allows you to prepare for the next cycle, segment or timer.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Notify Units",
      "label": "Notify Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "notifyunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Exit Segment at End of Cycle",
      "label": "Exit Segment at End of Cycle",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exitendcycle - When pulsed, it will exit the cycle (and segment) at the end of the currently-playing cycle.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Go to End of Cycle",
      "label": "Go to End of Cycle",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "gotoendcycle - When pulsed, it will exit the cycle (and segment) immediately.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Go to Done",
      "label": "Go to Done",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "gotodone - Will immediately go to the Done state.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.945Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "On Done",
      "label": "On Done",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "ondone -  - Determines which action to take when the timer gets to the end, ie \"is done\" or finished. Note there is also a onDone callback that can be used for customizing behavior.\n\n donothing - No action taken. reinit - Will re-initialize the timer, this is the same as pulsing the Initialize parameter above. restart - Will re-initialize and re-start the timer, this is the same as pulsing the Start parameter above. restartnoinit - Will re-star the timeer without re-initializing.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Do Nothing",
      "label": "Do Nothing",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "donothing - No action taken. reinit - Will re-initialize the timer, this is the same as pulsing the Initialize parameter above. restart - Will re-initialize and re-start the timer, this is the same as pulsing the Start parameter above. restartnoinit - Will re-star the timeer without re-initializing.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Callbacks DAT",
      "label": "Callbacks DAT",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "callbacks - The path to the  containing callbacks for this Timer .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segments DAT",
      "label": "Segments DAT",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "segdat - A table  that contains one row per timer (segment). The column headings can be delay or begin, length, cycle, cyclelimit, maxcycles and cycleendalert, which override the equivalent parameters. (These are the internal names for the corresponding parameters.) begin is unique as it replaces delay, and it represents the time from Start that the timer will begin counting, whether the  is set to Serial Timers or Parallel Timers (see Segment Method). \t\nThe Segments  also can include any number of custom columns. See Columns to Custom Channels and Columns to Info  below.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment Method",
      "label": "Segment Method",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "segmethod -  - If the Segment Method is Serial Timers, the timers will be played back-to-back. If the Segment Method is Parallel Timers, the timers can be played at the same time, and a set of channels will be output for each timer.\n\n serial - parallel -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Serial Timers",
      "label": "Serial Timers",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "serial - parallel -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment Units",
      "label": "Segment Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "segunits -  - For the columns delay, begin, length and cycleendalert, you specify whether it’s seconds, frames or samples with this menu.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Samples",
      "label": "Samples",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segments End Time",
      "label": "Segments End Time",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "segsendtime -  - Describes how the end time is calculated.\n\n dat - The end time is based on the Segments  values. par - The end time is based on the Length parameter value. max - The end time is based on the greater of the Length parameter value and the Segments  values.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "From Segments DAT",
      "label": "From Segments DAT",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "dat - The end time is based on the Segments  values. par - The end time is based on the Length parameter value. max - The end time is based on the greater of the Length parameter value and the Segments  values.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Columns to Custom Channels",
      "label": "Columns to Custom Channels",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "channelcolumns - Optional extra columns (any name) in the segments  can be output as extra channels (the columns must contain numbers). Specify their names in the Columns to Channels parameter. The channel name will be the column name. You can also output the length, delay, etc columns as channels.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Custom Channel Interpolation",
      "label": "Custom Channel Interpolation",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "interpolation -  - By default, custom channels step to their new value at the begin of the segment. This menu lets you interpolate to the new value linearly, or any combination of ease-in and ease-out.\n\n steptovalue - lineartovalue - easeintovalue - easeouttovalue - easeinouttovalue -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Step to Value",
      "label": "Step to Value",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "steptovalue - lineartovalue - easeintovalue - easeouttovalue - easeinouttovalue -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Columns to Info DAT",
      "label": "Columns to Info DAT",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "infocolumns - Optional extra columns (any name) in the segments  can be output to the Info  (attach an Info  to the Timer ) if you specify their names in this parameter.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Go to Previous Segment",
      "label": "Go to Previous Segment",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "gotoprevseg - (pulse) Jump to Previous Segment.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Go to Next Segment",
      "label": "Go to Next Segment",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "gotonextseg - (pulse) Jump to Next Segment.\t\nLingo\t\t\t\n\nSegment – each segment acts as one timer, with delay time, length, number of cycles to repeat and other conditions.\nBegin – in Parallel Timers, the number of seconds after a Start (frames or samples) after which each timer starts counting up from zero.\nDone – The state it goes into when all the timers has finished counting, whether they are in Parallel or Serial, Segments or not.\nEnd – Cycle End is the end of each cycle, Segment End is the end of the segment.\nCumulative Time – Zero at Start, a count that is affected by speed and rises while timers are active (not during delays).\nRunning Time – Zero at Start, the wall-clock time since Start was called no matter what are the delays, speeds, cycles or premature clicking of Go To Segment End. It stops counting when Done has been reached.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub Range",
      "label": "Sub Range",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "subrange - Turn this parameter on to limit the timer output to a subrange of the full length.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.946Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub Start",
      "label": "Sub Start",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "substart - The beginning point of the sub range.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.947Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub Start Units",
      "label": "Sub Start Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "substartunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub End",
      "label": "Sub End",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "subend - The end point of the sub range.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub End Units",
      "label": "Sub End Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "subendunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sub End Action",
      "label": "Sub End Action",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "subendaction -  - Controls the behavior once the sub range end point is reached: Loop at End, or Pause at End.\n\n pause - loop -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Pause at End",
      "label": "Pause at End",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "pause - loop -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.952Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Fraction",
      "label": "Timer Fraction",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outfraction - Outputs channel timer_fraction for each segment.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Count",
      "label": "Timer Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outtimercount -  - Outputs the elapsed Seconds channel as timer_seconds, Frames outputs channel as timer_frames, or Samples outputs channel as timer_samples. Because this is elapsed time, timer_frames starts at 0, as do the others.\n\n off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Active",
      "label": "Timer Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outtimeractive - Outputs channel timer_active which is on only while the timer fraction is counting (is non-zero).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Pulse",
      "label": "Timer Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outtimerpulse - Outputs channel timer_pulse when the timer reaches its length.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Delay Fraction",
      "label": "Delay Fraction",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outdelayfraction - Outputs a 0-1 fraction in delay_fraction while the delay occurs.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Delay Count",
      "label": "Delay Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outdelaycount -  - Outputs the delay count in seconds, frames or samples.\n\n off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Initializing",
      "label": "Initializing",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outinit - Outputs channel initializing = 1 while the timer is initalizing (i.e. while the callback onInitialize() returns non-zero).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Ready",
      "label": "Ready",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outready - Outputs channel ready which is 1 after an Initialize and before a Start.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Ready Pulse",
      "label": "Ready Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outreadypulse - Outputs a pulse when initialization has finished and the timer is ready to start. It pulses even when the timer starts rights away after an initialization.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.953Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Running",
      "label": "Running",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outrunning - Outputs channel running which is 1 after a Start and before the Done.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Done",
      "label": "Done",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outdone - Outputs channel done when done or complete.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Done Pulse",
      "label": "Done Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outdonepulse - Outputs channel done when the all timers have reached their completion.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycles",
      "label": "Cycles",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outcycle - Outputs channel cycles, which is the number of cycles completed (In a segment), starting with 0 during the entire first cycle. If you jump to Done, cycle is incremented as if it played normally to the done state.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycle Pulse",
      "label": "Cycle Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outcyclepulse - Outputs a pulse at the end of every cycle, even on the first and only cycle.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cycles + Fraction",
      "label": "Cycles + Fraction",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outcycleplusfraction - Outputs channel cycle_plus_fraction, starting with 0 for entire first cycle.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment",
      "label": "Segment",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outseg - Outputs channel segment, starting with 0 for first segment.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment Pulse",
      "label": "Segment Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outsegpulse - Outputs channel segment_pulse which is a pulse at the end of each segment.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Segment + Fraction",
      "label": "Segment + Fraction",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outsegplusfraction - Outputs channel segment_plus_fraction, starting with 0 for first segment ending at #segments at end.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Length",
      "label": "Length",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outlength -  - Outputs channel length, starting with 0 for first segment ending at #segments at end.\n\n off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.954Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Cumulative Timer Count",
      "label": "Cumulative Timer Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outcumulativecount -  - Outputs cumulative_seconds, cumulative_frames or cumulative_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active (Play) is on.   See the python member .cumulativeSeconds.\n\n off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Playing Timer Count",
      "label": "Playing Timer Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outplayingcount -  - Outputs playing_seconds, playing_frames or playing_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is not affected by \"Speed\", and counts up only while timer_active and play is on.  See the python member .playingSeconds.\n\n off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Running Time Count",
      "label": "Running Time Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outrunningcount -  - Outputs the \"wall-clock\" time since Start occurred, no matter what are the delays, speeds, cycles or pre-mature clicking of Go To Segment End, etc. It stops counting when Done has been reached. running_seconds, running_frames, or running_samples. When  is set to Parallel Timers, this will output a channel per segment plus one global running time channel.   See the python member .runningSeconds.\n\n off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - samples - frames - seconds - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Master Time Count",
      "label": "Master Time Count",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "outmastercount -  - Outputs master_seconds, master_frames or master_samples. It is a time count that adds up all the Timer Active times for all segments since Start: it is affected by \"Speed\", and counts up only while timer_active and play is on. It also includes any delay times.   See the python member .masterSeconds.\n\n off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - seconds - frames - samples - all -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.955Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External CHOP",
      "label": "External CHOP",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "extchop - The  used to control the current point in the timer.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External Units",
      "label": "External Units",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "extunits -  - Choose between using Samples, Frames, or Seconds as the units for this parameter.\n\n samples - frames - seconds - fraction -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - frames - seconds - fraction -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External Channel",
      "label": "External Channel",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "extchannel - The channel that will control the current point of the timer.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External Timecode Object",
      "label": "External Timecode Object",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exttcobj - Time is specified using a timecode. Should be a reference to either a  with channels 'hour', 'second', 'minute', 'frame', a  with a timecode string in its first cell, or a Timecode Class object.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External Start Offset",
      "label": "External Start Offset",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "extstartoff - Specifies the external time at which the timer should start.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "External Initialize Offset",
      "label": "External Initialize Offset",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "extinitoff - Specifies the external time at which the timer should initialize.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sample Rate",
      "label": "Sample Rate",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "rate - The sample rate that the  outputs at, which is also used when the units of Length, Delay and Cycle End Alert time are set to Samples. The default sample rate is 60 samples per second.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Time Slice",
      "label": "Time Slice",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Scope",
      "label": "Scope",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "scope - To determine which channels get affected, some CHOPs use a  string on the Common page.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sample Rate Match",
      "label": "Sample Rate Match",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Resample At First Input's Rate",
      "label": "Resample At First Input's Rate",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.956Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Method",
      "label": "Export Method",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.957Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "DAT Table by Index",
      "label": "DAT Table by Index",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.957Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Root",
      "label": "Export Root",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.957Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Table",
      "label": "Export Table",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exporttable - The  used to hold the export information when using the  Table  Methods (See above).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:10.957Z",
      "rawData": {},
      "sourceElement": null
    }
  ],
  "parameterGroups": {},
  "codeExamples": [],
  "pythonExamples": [],
  "expressions": [],
  "commonInputs": [],
  "commonOutputs": [],
  "relatedOperators": [],
  "workflowPatterns": [],
  "images": [],
  "videos": [],
  "assets": [],
  "keywords": [
    "timer",
    "chop",
    "engine",
    "running",
    "timed",
    "processes.",
    "outputs",
    "channels",
    "such",
    "timing"
  ],
  "tags": [
    "CHOP",
    "TouchDesigner",
    "Timer CHOP"
  ],
  "searchWeight": 1,
  "contentHash": "",
  "processingDate": "2025-08-07T07:50:10.958Z",
  "processingVersion": "1.0.0",
  "isValid": true,
  "validationErrors": []
}