@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
1,932 lines • 102 kB
JSON
{
"id": "laser",
"name": "Laser",
"displayName": "Laser",
"category": "CHOP",
"subcategory": "Generators",
"version": "",
"lastUpdated": "2025-08-08T00:37:45.818Z",
"sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\Laser_CHOP.htm",
"url": "",
"description": "The Laser CHOP produces channels that can drive a laser projector. It uses the points and lines of a SOP or CHOP and outputs the channels at a specified sample rate, typically 10,000 to 96,000 samples per second. The Laser CHOP gives optimal control over the movement of the reflectors of the laser projector as well as enhanced color control. In particular, it gives better control of lines being straight, end-points being not cut off or over-drawn, and eliminating tails, all adjustable using a set of parameters.",
"summary": "The Laser CHOP produces channels that can drive a laser projector. It uses the points and lines of a SOP or CHOP and outputs the channels at a specified sample rate, typically 10,000 to 96,000 samples",
"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 Laser produces channels that can drive a laser projector. It uses the points and lines of a or and outputs the channels at a specified sample rate, typically 10,000 to 96,000 samples per second. The Laser gives optimal control over the movement of the reflectors of the laser projector as well as enhanced color control. In particular, it gives better control of lines being straight, end-points being not cut off or over-drawn, and eliminating tails, all adjustable using a set of parameters. \nThe resulting channels can be sent to the Laser Device CHOP in case of controlling a Laser via the ILDA Protocol, or the Audio Device Out CHOP in case of using one of LaserAnimation Sollinger's AVB capable devices, where the audio is output via the Audio Device Out CHOP to a low-latency AVB-ready audio device like those from MOTU, RME, LaserAnimation Sollinger or Apple macOS.\nLaserAnimation Sollinger's AVB2ILDA devices give you access to features for the professional sector including 24bit resolution on the x/y signal and all color channels. Additionally the AVB2ILDA device includes software for electronic masking, making it possible to limit the laser output for certain areas (for example to protect scanning areas such as auditoriums or sectors with optical equipment). Also packaged is a color correction tool that includes individual control of the color delay for 3 colors as well as a Digital Geometric Correction to allow for projection on for example uneven surfaces. (The Laser replaces the Scan .)\nThe was developed with the help of LaserAnimation Sollinger who guided us in speccing and implementing the necessary parameters, especially in regards of the blanking timing settings.\nTip: See the OP Snippets for setup and usage examples.\nLASERS ARE DANGEROUS - DAMAGE TO YOUR OR THE AUDIENCE'S EYE SIGHT IS A VERY REAL RISK\n\nIf you plan to use lasersUnderstand all the laws and regulations for laser operation in your area.\nBecome a certified Laser Safety Officer (this is required by law in some areas). Courses are available from ILDA directly: ILDA Laser Safety CoursesMake sure an emergency stop button is close to you at all times.\nDo not let anyone enter the laser projection area unless all precautions have been taken to limit the output.\nMake sure there are no reflective surfaces in the projection area that might cause the beam to reflect unintendedly.laserCHOP_Class\n\nContents\n \n \n \n \n \n \n \n\n\n\n\n\n active - When disabled, the will zero out all channels.\n\n\n\n source - - Select the source operator type for the laser image.\n\n sop - Use a as the source for the Laser image. Appart from position attributes, the 's point color attributes are used to determine the color output. chop - Use a as the source for the Laser image. The expects x and y channels and every sample will be interpreted as a point to be drawn. To draw multiple shapes, also specify an id named channel to identify each shape. All other channels will be interpreted as color channels and blanking will be applied to those. This makes it possible to drive Lasers that have more than just rgb diodes active.\n\n sop - to the .\n\n\n\n chop - to the . The input must have x, y channels for the point positions. In addition, it also supports z, r, g, b, and id channels. The id channel is used for grouping points together as a single shape. By default when no id channel is present, each point is separate and unconnected. Additional and arbitrarily named colour channels may be added for laser projectors that accept more than just r, g, b.\n\n\n\n inputrate - Specify the the input source will be sampled at. This can be lower than the output sample rate. If lower than the output sample rate then the output will be resampled (same as if put through a Resample ).\n\n\n\n outputrate - The sample rate of the , and the sample rate at which it will output to the laser. With the default 48000 samples per second and a 60fps frame rate, the Laser can output 800 position and color values per frame.\n\n\n\n swap - Lets you swap the x and y axis of the output.\n\n\n\n xscale - Control the horizontal scale of the output.\n\n\n\n yscale - Control the vertical scale of the output.\n\n\n\n rotate - Control the rotation of the output.\n\n\n\n updatemethod - - Control how the Laser pulls data from its source.\nIn most cases you will want to keep this at the default setting \"When All Points Drawn\". \nThere is a specific usage case that requires the \"Every \" update method. Background is that the Laser might have to draw the input values over multiple frames. For example given a source with 200 sampling values. After applying all blanking and step sizes at a certain sample rate, the Laser might need more than one frame to draw the full image. The effect will be visible by the Laser image flickering. With the default setting, the Laser will grab a new set of samples from its input once it has completed drawing all previous values. With the \"Every \" update method, the Laser will grab the updated values for the remaining samples after each frame.\n\n\n alldrawn - The Laser will read the source data once all points of the previous frame have been drawn. everyframe - The Laser will update the input every frame, no matter if it finished drawing the previous frame or not.\n\n startpulse - When enabled, will insert a sample with all colors set to -1 at the beginning of the laser frame.\n\n\n\n vertexorder - Output the points in the same order as the vertices of each polygon, instead of the order in which the points are defined in the geometry.\n\n\n\n stepsize - The distance each x,y can change while outputing color.\n\n\n\n bstepsize - The distance each x,y can change while not outputing color (blanking).\n\n\n\n minverthold - The minimum value of the vertex hold of a point. The value of the vertex hold of a point is calculated linearly in the range from the minimum to maximum vertex hold, based on the steepness of the angle at the point. This angle is calculated with the following three points: the previous point, the point itself, and the next point. Example: when the angle at the point is 180 degrees then the vertex hold of the point will be the minimum value.\n\n\n\n maxverthold - The maximum value of the vertex hold of a point. See Minimum Hold for more details. When the angle at the point is 0 degrees, then the vertex hold will be the maximum value. If the maximum value is lower than the minimum then the maximum will be clamped upward.\n\n\n\n camera - Specify the path to a Camera used to draw a from the cameras view.\n\n\n\n\n\nThese parameters let you control how the color channels for the Laser are created. Especially paying attention to the blanking settings which will have to be adjusted matching the capabilities of your laser projector.\nBlanking is the capability of a laser projector to rapidly turn on / off the laser when displaying animations. For example when displaying multiple shapes, the laser needs the ability of blanking to omit the empty spots between the shapes.\nAs the laser's mirrors are driven by motors, the positional data that is send to the laser is likely to be ahead of the actual mirror position - the mirror must catch up to the data. The Color data though is in time and as a result the effect can be visible tails at points where the laser switches off its color. Adjusting the blanking parameters can help prevent this.\n\n redscale - Set the intensity of the Red .\n\n\n\n greenscale - Set the intensity of the Green .\n\n\n\n bluescale - Set the intensity of the Blue .\n\n\n\n preblankon - Set the time in ms the Laser should wait at a position before turning the color output off.\n\n\n\n postblankon - Set the time in ms the Laser should wait at a position after turning the color output off.\n\n\n\n preblankoff - Set the time in ms the Laser should wait at a position before turning the color output on.\n\n\n\n postblankoff - Set the time in ms the Laser should wait at a position after turning the color output on.\n\n\n\n starthold - Set the time in ms the Laser should wait at the first point of a new data frame before continuing on.\n\n\n\n colordelay - Set the delay in ms of the color channels in the output.\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\nExtra Information for the Laser 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\\nwikieditorwikieditorwikieditor2021.100002020.20000before 2020.20000\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\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAny of the procedural data operators. OPs do all the work in TouchDesigner. They \"cook\" and output data to other OPs, which ultimately result in new images, data and audio being generated. See Node.\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\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\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\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\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nAn Operator Family that contains its own Network. There are sixteen 3D Object Component and ten 2D Panel Component types. See also Network Path.\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\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\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\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\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\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=Laser_CHOP&oldid=30641\"\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-08T00:37:45.811Z",
"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 Laser produces channels that can drive a laser projector. It uses the points and lines of a or and outputs the channels at a specified sample rate, typically 10,000 to 96,000 samples per second. The Laser gives optimal control over the movement of the reflectors of the laser projector as well as enhanced color control. In particular, it gives better control of lines being straight, end-points being not cut off or over-drawn, and eliminating tails, all adjustable using a set of parameters. \nThe resulting channels can be sent to the Laser Device CHOP in case of controlling a Laser via the ILDA Protocol, or the Audio Device Out CHOP in case of using one of LaserAnimation Sollinger's AVB capable devices, where the audio is output via the Audio Device Out CHOP to a low-latency AVB-ready audio device like those from MOTU, RME, LaserAnimation Sollinger or Apple macOS.\nLaserAnimation Sollinger's AVB2ILDA devices give you access to features for the professional sector including 24bit resolution on the x/y signal and all color channels. Additionally the AVB2ILDA device includes software for electronic masking, making it possible to limit the laser output for certain areas (for example to protect scanning areas such as auditoriums or sectors with optical equipment). Also packaged is a color correction tool that includes individual control of the color delay for 3 colors as well as a Digital Geometric Correction to allow for projection on for example uneven surfaces. (The Laser replaces the Scan .)\nThe was developed with the help of LaserAnimation Sollinger who guided us in speccing and implementing the necessary parameters, especially in regards of the blanking timing settings.\nTip: See the OP Snippets for setup and usage examples.\nLASERS ARE DANGEROUS - DAMAGE TO YOUR OR THE AUDIENCE'S EYE SIGHT IS A VERY REAL RISK\n\nIf you plan to use lasersUnderstand all the laws and regulations for laser operation in your area.\nBecome a certified Laser Safety Officer (this is required by law in some areas). Courses are available from ILDA directly: ILDA Laser Safety CoursesMake sure an emergency stop button is close to you at all times.\nDo not let anyone enter the laser projection area unless all precautions have been taken to limit the output.\nMake sure there are no reflective surfaces in the projection area that might cause the beam to reflect unintendedly.laserCHOP_Class\n\nContents\n \n \n \n \n \n \n \n\n\n\n\n\n active - When disabled, the will zero out all channels.\n\n\n\n source - - Select the source operator type for the laser image.\n\n sop - Use a as the source for the Laser image. Appart from position attributes, the 's point color attributes are used to determine the color output. chop - Use a as the source for the Laser image. The expects x and y channels and every sample will be interpreted as a point to be drawn. To draw multiple shapes, also specify an id named channel to identify each shape. All other channels will be interpreted as color channels and blanking will be applied to those. This makes it possible to drive Lasers that have more than just rgb diodes active.\n\n sop - to the .\n\n\n\n chop - to the . The input must have x, y channels for the point positions. In addition, it also supports z, r, g, b, and id channels. The id channel is used for grouping points together as a single shape. By default when no id channel is present, each point is separate and unconnected. Additional and arbitrarily named colour channels may be added for laser projectors that accept more than just r, g, b.\n\n\n\n inputrate - Specify the the input source will be sampled at. This can be lower than the output sample rate. If lower than the output sample rate then the output will be resampled (same as if put through a Resample ).\n\n\n\n outputrate - The sample rate of the , and the sample rate at which it will output to the laser. With the default 48000 samples per second and a 60fps frame rate, the Laser can output 800 position and color values per frame.\n\n\n\n swap - Lets you swap the x and y axis of the output.\n\n\n\n xscale - Control the horizontal scale of the output.\n\n\n\n yscale - Control the vertical scale of the output.\n\n\n\n rotate - Control the rotation of the output.\n\n\n\n updatemethod - - Control how the Laser pulls data from its source.\nIn most cases you will want to keep this at the default setting \"When All Points Drawn\". \nThere is a specific usage case that requires the \"Every \" update method. Background is that the Laser might have to draw the input values over multiple frames. For example given a source with 200 sampling values. After applying all blanking and step sizes at a certain sample rate, the Laser might need more than one frame to draw the full image. The effect will be visible by the Laser image flickering. With the default setting, the Laser will grab a new set of samples from its input once it has completed drawing all previous values. With the \"Every \" update method, the Laser will grab the updated values for the remaining samples after each frame.\n\n\n alldrawn - The Laser will read the source data once all points of the previous frame have been drawn. everyframe - The Laser will update the input every frame, no matter if it finished drawing the previous frame or not.\n\n startpulse - When enabled, will insert a sample with all colors set to -1 at the beginning of the laser frame.\n\n\n\n vertexorder - Output the points in the same order as the vertices of each polygon, instead of the order in which the points are defined in the geometry.\n\n\n\n stepsize - The distance each x,y can change while outputing color.\n\n\n\n bstepsize - The distance each x,y can change while not outputing color (blanking).\n\n\n\n minverthold - The minimum value of the vertex hold of a point. The value of the vertex hold of a point is calculated linearly in the range from the minimum to maximum vertex hold, based on the steepness of the angle at the point. This angle is calculated with the following three points: the previous point, the point itself, and the next point. Example: when the angle at the point is 180 degrees then the vertex hold of the point will be the minimum value.\n\n\n\n maxverthold - The maximum value of the vertex hold of a point. See Minimum Hold for more details. When the angle at the point is 0 degrees, then the vertex hold will be the maximum value. If the maximum value is lower than the minimum then the maximum will be clamped upward.\n\n\n\n camera - Specify the path to a Camera used to draw a from the cameras view.\n\n\n\n\n\nThese parameters let you control how the color channels for the Laser are created. Especially paying attention to the blanking settings which will have to be adjusted matching the capabilities of your laser projector.\nBlanking is the capability of a laser projector to rapidly turn on / off the laser when displaying animations. For example when displaying multiple shapes, the laser needs the ability of blanking to omit the empty spots between the shapes.\nAs the laser's mirrors are driven by motors, the positional data that is send to the laser is likely to be ahead of the actual mirror position - the mirror must catch up to the data. The Color data though is in time and as a result the effect can be visible tails at points where the laser switches off its color. Adjusting the blanking parameters can help prevent this.\n\n redscale - Set the intensity of the Red .\n\n\n\n greenscale - Set the intensity of the Green .\n\n\n\n bluescale - Set the intensity of the Blue .\n\n\n\n preblankon - Set the time in ms the Laser should wait at a position before turning the color output off.\n\n\n\n postblankon - Set the time in ms the Laser should wait at a position after turning the color output off.\n\n\n\n preblankoff - Set the time in ms the Laser should wait at a position before turning the color output on.\n\n\n\n postblankoff - Set the time in ms the Laser should wait at a position after turning the color output on.\n\n\n\n starthold - Set the time in ms the Laser should wait at the first point of a new data frame before continuing on.\n\n\n\n colordelay - Set the delay in ms of the color channels in the output.\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\nExtra Information for the Laser 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\\nwikieditorwikieditorwikieditor2021.100002020.20000before 2020.20000\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\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAny of the procedural data operators. OPs do all the work in TouchDesigner. They \"cook\" and output data to other OPs, which ultimately result in new images, data and audio being generated. See Node.\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\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\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\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\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nAn Operator Family that contains its own Network. There are sixteen 3D Object Component and ten 2D Panel Component types. See also Network Path.\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\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\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\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\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\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=Laser_CHOP&oldid=30641\"\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-08T00:37:45.813Z",
"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 Laser produces channels that can drive a laser projector. It uses the points and lines of a or and outputs the channels at a specified sample rate, typically 10,000 to 96,000 samples per second. The Laser gives optimal control over the movement of the reflectors of the laser projector as well as enhanced color control. In particular, it gives better control of lines being straight, end-points being not cut off or over-drawn, and eliminating tails, all adjustable using a set of parameters. \nThe resulting channels can be sent to the Laser Device CHOP in case of controlling a Laser via the ILDA Protocol, or the Audio Device Out CHOP in case of using one of LaserAnimation Sollinger's AVB capable devices, where the audio is output via the Audio Device Out CHOP to a low-latency AVB-ready audio device like those from MOTU, RME, LaserAnimation Sollinger or Apple macOS.\nLaserAnimation Sollinger's AVB2ILDA devices give you access to features for the professional sector including 24bit resolution on the x/y signal and all color channels. Additionally the AVB2ILDA device includes software for electronic masking, making it possible to limit the laser output for certain areas (for example to protect scanning areas such as auditoriums or sectors with optical equipment). Also packaged is a color correction tool that includes individual control of the color delay for 3 colors as well as a Digital Geometric Correction to allow for projection on for example uneven surfaces. (The Laser replaces the Scan .)\nThe was developed with the help of LaserAnimation Sollinger who guided us in speccing and implementing the necessary parameters, especially in regards of the blanking timing settings.\nTip: See the OP Snippets for setup and usage examples.\nLASERS ARE DANGEROUS - DAMAGE TO YOUR OR THE AUDIENCE'S EYE SIGHT IS A VERY REAL RISK\n\nIf you plan to use lasersUnderstand all the laws and regulations for laser operation in your area.\nBecome a certified Laser Safety Officer (this is required by law in some areas). Courses are available from ILDA directly: ILDA Laser Safety CoursesMake sure an emergency stop button is close to you at all times.\nDo not let anyone enter the laser projection area unless all precautions have been taken to limit the output.\nMake sure there are no reflective surfaces in the projection area that might cause the beam to reflect unintendedly.laserCHOP_Class\n\nContents\n \n \n \n \n \n \n \n\n\n\n\n\n active - When disabled, the will zero out all channels.\n\n\n\n source - - Select the source operator type for the laser image.\n\n sop - Use a as the source for the Laser image. Appart from position attributes, the 's point color attributes are used to determine the color output. chop - Use a as the source for the Laser image. The expects x and y channels and every sample will be interpreted as a point to be drawn. To draw multiple shapes, also specify an id named channel to identify each shape. All other channels will be interpreted as color channels and blanking will be applied to those. This makes it possible to drive Lasers that have more than just rgb diodes active.\n\n sop - to the .\n\n\n\n chop - to the . The input must have x, y channels for the point positions. In addition, it also supports z, r, g, b, and id channels. The id channel is used for grouping points together as a single shape. By default when no id channel is present, each point is separate and unconnected. Additional and arbitrarily named colour channels may be added for laser projectors that accept more than just r, g, b.\n\n\n\n inputrate - Specify the the input source will be sampled at. This can be lower than the output sample rate. If lower than the output sample rate then the output will be resampled (same as if put through a Resample ).\n\n\n\n outputrate - The sample rate of the , and the sample rate at which it will output to the laser. With the default 48000 samples per second and a 60fps frame rate, the Laser can output 800 position and color values per frame.\n\n\n\n swap - Lets you swap the x and y axis of the output.\n\n\n\n xscale - Control the horizontal scale of the output.\n\n\n\n yscale - Control the vertical scale of the output.\n\n\n\n rotate - Control the rotation of the output.\n\n\n\n updatemethod - - Control how the Laser pulls data from its source.\nIn most cases you will want to keep this at the default setting \"When All Points Drawn\". \nThere is a specific usage case that requires the \"Every \" update method. Background is that the Laser might have to draw the input values over multiple frames. For example given a source with 200 sampling values. After applying all blanking and step sizes at a certain sample rate, the Laser might need more than one frame to draw the full image. The effect will be visible by the Laser image flickering. With the default setting, the Laser will grab a new set of samples from its input once it has completed drawing all previous values. With the \"Every \" update method, the Laser will grab the updated values for the remaining samples after each frame.\n\n\n alldrawn - The Laser will read the source data once all points of the previous frame have been drawn. everyframe - The Laser will update the input every frame, no matter if it finished drawing the previous frame or not.\n\n startpulse - When enabled, will insert a sample with all colors set to -1 at the beginning of the laser frame.\n\n\n\n vertexorder - Output the points in the same order as the vertices of each polygon, instead of the order in which the points are defined in the geometry.\n\n\n\n stepsize - The distance each x,y can change while outputing color.\n\n\n\n bstepsize - The distance each x,y can change while not outputing color (blanking).\n\n\n\n minverthold - The minimum value of the vertex hold of a point. The value of the vertex hold of a point is calculated linearly in the range from the minimum to maximum vertex hold, based on the steepness of the angle at the point. This angle is calculated with the following three points: the previous point, the point itself, and the next point. Example: when the angle at the point is 180 degrees then the vertex hold of the point will be the minimum value.\n\n\n\n maxverthold - The maximum value of the vertex hold of a point. See Minimum Hold for more details. When the angle at the point is 0 degrees, then the vertex hold will be the maximum value. If the maximum value is lower than the minimum then the maximum will be clamped upward.\n\n\n\n camera - Specify the path to a Camera used to draw a from the cameras view.\n\n\n\n\n\nThese parameters let you control how the color channels for the Laser are created. Especially paying attention to the blanking settings which will have to be adjusted matching the capabilities of your laser projector.\nBlanking is the capability of a laser projector to rapidly turn on / off the laser when displaying animations. For example when displaying multiple shapes, the laser needs the ability of blanking to omit the empty spots between the shapes.\nAs the laser's mirrors are driven by motors, the positional data that is send to the laser is likely to be ahead of the actual mirror position - the mirror must catch up to the data. The Color data though is in time and as a result the effect can be visible tails at points where the laser switches off its color. Adjusting the blanking parameters can help prevent this.\n\n redscale - Set the intensity of the Red .\n\n\n\n greenscale - Set the intensity of the Green .\n\n\n\n bluescale - Set the intensity of the Blue .\n\n\n\n preblankon - Set the time in ms the Laser should wait at a position before turning the color output off.\n\n\n\n postblankon - Set the time in ms the Laser should wait at a position after turning the color output off.\n\n\n\n preblankoff - Set the time in ms the Laser should wait at a position before turning the color output on.\n\n\n\n postblankoff - Set the time in ms the Laser should wait at a position after turning the color output on.\n\n\n\n starthold - Set the time in ms the Laser should wait at the first point of a new data frame before continuing on.\n\n\n\n colordelay - Set the delay in ms of the color channels in the output.\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\nExtra Information for the Laser 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\\nwikieditorwikieditorwikieditor2021.100002020.20000before 2020.20000\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\nA Operator Family that reads, creates and modifies 3D points, polygons, lines, particles, surfaces, spheres and meatballs. Particles and point clouds are now done primarily on the GPU using TOPs.\n\n\n\nAny of the procedural data operators. OPs do all the work in TouchDesigner. They \"cook\" and output data to other OPs, which ultimately result in new images, data and audio being generated. See Node.\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\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\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\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\nA sequence of vertices form a Polygon in a SOP. Each vertex is an integer index into the Point List, and each Point holds an XYZ position and attributes like Normals and Texture Coordinates.\n\n\n\nAn Operator Family that contains its own Network. There are sixteen 3D Object Component and ten 2D Panel Component types. See also Network Path.\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\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\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\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\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\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=Laser_CHOP&oldid=30641\"",
"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-08T00:37:45.815Z",
"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 - When disabled, the will zero out all 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-08T00:37:45.815Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Source OP",
"label": "Source OP",
"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": "source - - Select the source operator type for the laser image.\n\n sop - Use a as the source for the Laser image. Appart from position attributes, the 's point color attributes are used to determine the color output. chop - Use a as the source for the Laser image. The expects x and y channels and every sample will be interpreted as a point to be drawn. To draw multiple shapes, also specify an id named channel to identify each shape. All other channels will be interpreted as color channels and blanking will be applied to those. This makes it possible to drive Lasers that have more than just rgb diodes active.",
"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-08T00:37:45.815Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "SOP",
"label": "SOP",
"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": "sop - Use a as the source for the Laser image. Appart from position attributes, the 's point color attributes are used to determine the color output. chop - Use a as the source for the Laser image. The expects x and y channels and every sample will be interpreted as a point to be drawn. To draw multiple shapes, also specify an id named channel to identify each shape. All other channels will be interpreted as color channels and blanking will be applied to those. This makes it possible to drive Lasers that have more than just rgb diodes active.",
"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-08T00:37:45.815Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "SOP",
"label": "SOP",
"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": "sop - to the .",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "CHOP",
"label": "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": "chop - to the . The input must have x, y channels for the point positions. In addition, it also supports z, r, g, b, and id channels. The id channel is used for grouping points together as a single shape. By default when no id channel is present, each point is separate and unconnected. Additional and arbitrarily named colour channels may be added for laser projectors that accept more than just r, g, b.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Input Sample Rate",
"label": "Input 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": "inputrate - Specify the the input source will be sampled at. This can be lower than the output sample rate. If lower than the output sample rate then the output will be resampled (same as if put through a Resample ).",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Output Sample Rate",
"label": "Output 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": "outputrate - The sample rate of the , and the sample rate at which it will output to the laser. With the default 48000 samples per second and a 60fps frame rate, the Laser can output 800 position and color values per 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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Swap Output",
"label": "Swap Output",
"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": "swap - Lets you swap the x and y axis of the output.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "X Scale",
"label": "X Scale",
"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": "xscale - Control the horizontal scale of the output.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Y Scale",
"label": "Y Scale",
"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": "yscale - Control the vertical scale of the output.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Rotate",
"label": "Rotate",
"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": "rotate - Control the rotation of the output.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Update Method",
"label": "Update 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": "updatemethod - - Control how the Laser pulls data from its source.\nIn most cases you will want to keep this at the default setting \"When All Points Drawn\". \nThere is a specific usage case that requires the \"Every \" update method. Background is that the Laser might have to draw the input values over multiple frames. For example given a source with 200 sampling values. After applying all blanking and step sizes at a certain sample rate, the Laser might need more than one frame to draw the full image. The effect will be visible by the Laser image flickering. With the default setting, the Laser will grab a new set of samples from its input once it has completed drawing all previous values. With the \"Every \" update method, the Laser will grab the updated values for the remaining samples after each frame.\n\n\n alldrawn - The Laser will read the source data once all points of the previous frame have been drawn. everyframe - The Laser will update the input every frame, no matter if it finished drawing the previous frame or not.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "When All Points Drawn",
"label": "When All Points Drawn",
"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": "alldrawn - The Laser will read the source data once all points of the previous frame have been drawn. everyframe - The Laser will update the input every frame, no matter if it finished drawing the previous frame or not.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Frame Start Pulse",
"label": "Frame Start 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": "startpulse - When enabled, will insert a sample with all colors set to -1 at the beginning of the laser 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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Vertex Order",
"label": "Vertex Order",
"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": "vertexorder - Output the points in the same order as the vertices of each polygon, instead of the order in which the points are defined in the geometry.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Step Size",
"label": "Step Size",
"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": "stepsize - The distance each x,y can change while outputing color.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Blanking Step Size",
"label": "Blanking Step Size",
"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": "bstepsize - The distance each x,y can change while not outputing color (blanking).",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Minimum Vertex Hold",
"label": "Minimum Vertex Hold",
"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": "minverthold - The minimum value of the vertex hold of a point. The value of the vertex hold of a point is calculated linearly in the range from the minimum to maximum vertex hold, based on the steepness of the angle at the point. This angle is calculated with the following three points: the previous point, the point itself, and the next point. Example: when the angle at the point is 180 degrees then the vertex hold of the point will be the minimum value.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Maximum Vertex Hold",
"label": "Maximum Vertex Hold",
"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": "maxverthold - The maximum value of the vertex hold of a point. See Minimum Hold for more details. When the angle at the point is 0 degrees, then the vertex hold will be the maximum value. If the maximum value is lower than the minimum then the maximum will be clamped upward.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Camera",
"label": "Camera",
"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": "camera - Specify the path to a Camera used to draw a from the cameras view.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Red Scale",
"label": "Red Scale",
"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": "redscale - Set the intensity of the Red .",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Green Scale",
"label": "Green Scale",
"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": "greenscale - Set the intensity of the Green .",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Blue Scale",
"label": "Blue Scale",
"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": "bluescale - Set the intensity of the Blue .",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Pre Blanking On Delay",
"label": "Pre Blanking On 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": "preblankon - Set the time in ms the Laser should wait at a position before turning the color output off.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Post Blanking On Delay",
"label": "Post Blanking On 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": "postblankon - Set the time in ms the Laser should wait at a position after turning the color output off.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Pre Blanking Off Delay",
"label": "Pre Blanking Off 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": "preblankoff - Set the time in ms the Laser should wait at a position before turning the color output on.",
"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-08T00:37:45.816Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Post Blanking Off Delay",
"label": "Post Blanking Off 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": "postblankoff - Set the time in ms the Laser should wait at a position after turning the color output on.",
"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-08T00:37:45.817Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Start-Point Hold Time",
"label": "Start-Point Hold 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": "starthold - Set the time in ms the Laser should wait at the first point of a new data frame before continuing on.",
"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-08T00:37:45.817Z",
"rawData": {},
"sourceElement": null
},
{
"id": null,
"name": "Color Delay",
"label": "Color 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": "colordelay - Set the delay in ms of the color channels in the output.",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"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-08T00:37:45.817Z",
"rawData": {},
"sourceElement": null
}
],
"parameterGroups": {},
"codeExamples": [],
"pythonExamples": [],
"expressions": [],
"commonInputs": [],
"commonOutputs": [],
"relatedOperators": [],
"workflowPatterns": [],
"images": [],
"videos": [],
"assets": [],
"keywords": [
"laser",
"chop",
"produces",
"channels",
"drive",
"projector.",
"uses",
"points",
"lines"
],
"tags": [
"CHOP",
"TouchDesigner",
"Laser"
],
"searchWeight": 1,
"contentHash": "",
"processingDate": "2025-08-08T00:37:45.818Z",
"processingVersion": "1.0.0",
"isValid": true,
"validationErrors": []
}