Docs Pro
SimpleSceneChanger Pro
Everything in Base, plus per-scene transition, timing and cook settings, a cue table that plays a show (on its own clock, the timeline, a CHOP channel, timecode or the A/B fader) and a CHOP output that blends scene control data with the picture.
Pro edition TouchDesigner 2025.33070+
What Pro adds
SimpleSceneChanger Pro is a separate .tox built from the same network as Base, so everything on the Base page applies: switching, the A/B fader, cooking and memory, Auto Advance, the Python API and the callbacks. Pro adds:
- Per-scene settings on every Inputs block: transition, timing and cooking for that scene.
- A cue table: play a show from a Table DAT, on its own clock, locked to the timeline, from a CHOP channel, from timecode, or step through it with the A/B fader.
- A CHOP output that blends each scene's control data in lockstep with the picture.
Leave every Pro setting at its default and the component behaves exactly like Base. In Python, use your Pro component's name, for example op('SimpleSceneChangerPro1').Switch('intro').
Per-scene settings
Every Inputs block carries its own transition, timing and cook settings. Leave a menu on Global or a time on -1 and the scene uses the component's setting.
| Setting | For this scene |
|---|---|
| Mode In | How it arrives: Crossfade, Fade Through Black or Cut. |
| Mode Out | How it leaves, used when the arriving scene's Mode In is Global. |
| Fade In | Seconds to arrive: the crossfade length, or the fade-up half of Fade Through Black. |
| Fade Out | Seconds to fade to black when it leaves in Fade Through Black. |
| Easing In / Easing Out | Curve for arriving (the crossfade, or the fade-up half) / for leaving (the fade-to-black half). |
| Pre-Roll | Seconds it cooks before its transition starts. |
| Outro | Seconds it keeps cooking after it has left. |
| Cook | Global: Control Cook decides. Always Cook: cooks even while hidden, for a scene other scenes read from. Leave As Is: never touched by Control Cook, Unload, Colorize or Active. |
| CHOP | The CHOP it contributes to the CHOP output. |
Who decides a switch. The arriving scene owns Mode In, Fade In, Easing In and Pre-Roll; the leaving scene owns Mode Out, Fade Out, Easing Out and Outro. When both scenes name a mode, Mode In wins. In the two A/B Fader Switch Modes the block modes are ignored: the Fader always drives the switch.
Order of precedence, for every value (the first one set wins): Switch() arguments, then the cue row (while a cue list plays), then the Inputs block setting, then the scene COMP's own Fadeintime / Fadeouttime / Fadeincurve / Fadeoutcurve parameters, then the component's global parameter.
The block settings are ordinary sequence parameters:
op('SimpleSceneChangerPro1').seq.Inputs[2].par.Modein = 'cut'
op('SimpleSceneChangerPro1').seq.Inputs[2].par.Fadein = 0.5
Cue table
Describe a show as a Table DAT and play it: which scene, for how long, and how it arrives. The table is a Timer CHOP Segments DAT, so every Timer CHOP idiom works.
Set Cue Mode and point Cue Table at the DAT, or press Create Table for a new Table DAT beside the changer with one cue per scene, every column filled in from the current settings. Then Start.
| Cue Mode | Cue time follows |
|---|---|
| Off | Nothing: the table is ignored and Select works as usual. |
| Play | Its own clock: Start, Stop, Previous / Next Cue, Go to Cue, Play, Speed, Loop. |
| A/B Fader | The A/B fader, see Cue Mode A/B Fader. |
| Locked to Timeline | The timeline. |
| External CHOP Channel | External CHOP / External Channel, in External Units. |
| External Timecode | Timecode Source: a Timecode CHOP, or a DAT whose first cell is a timecode string. |
Columns, by header name. Blank cells fall back to the block, scene COMP and global settings.
| Column | Meaning |
|---|---|
scene |
Scene index or scene name. Required. |
length |
Seconds the cue is in charge, its arrival transition included. |
mode |
cross, fade or cut. |
fadein |
Arrival time: crossfade length, or the fade-up half. |
fadeout |
Fade-to-black time of the scene that is leaving. |
easingin, easingout |
Curve names from the Easing menu. |
outro |
Outro of this cue's scene when it later leaves. |
cycleendalert |
Seconds before this cue ends that the next cue's scene starts cooking (its pre-roll). |
label |
Free text, shown in Cue Label and passed to onCueEnter. |
delay, cycle, cyclelimit, maxcycles, speed |
Timer CHOP columns. A cue with cycle 1 and cyclelimit 0 holds until Next Cue. |
| anything else | Passed to onCueEnter untouched. |
scene length mode fadein cycleendalert label
intro 8 fade 1.5 1 Opening
tunnel 12 cross 2 0.5 Build
finale 6 cut Drop
A cue switch never waits for Pre-Roll (the table owns timing: use cycleendalert) and never waits for the A/B Fader. Current Cue, Cue Label and Cue Count show where the show is. Auto Advance steps aside while a cue list has cues.
With Cue Mode on but no cues (no Cue Table, or only a header row), nothing is cued: the component shows a warning, Auto Advance keeps working, and in Cue Mode A/B Fader the Fader follows Switch Mode.
Cue Mode A/B Fader
No clock: the cue list is the order for the A/B Fader, whatever Switch Mode says. Start lines up cue 0 (its scene goes into Select and starts its Pre-Roll). Each time the Fader completes a switch, that cue takes charge (Current Cue, onCueEnter) and the next one is lined up.
The row's mode picks what the Fader does: cross is a Fader crossfade, fade a Fader through black, and cut switches the moment the Fader leaves home (the far end becomes home once the Fader arrives). A blank mode uses the block modes and Switch Mode. length, cycleendalert and the other timing columns are ignored.
Next Cue, Previous Cue and Go to Cue change which cue is lined up. Picking a scene by hand is a detour: after that switch the same cue is lined up again. With Loop off, onCueListDone fires when the last cue takes charge; with Loop on, cue 0 is lined up after it.
CHOP output
Scenes can carry control data too: turn on CHOP Output and the changer blends the scenes' CHOPs in lockstep with the picture, on its second output connector. Each scene's CHOP is its Inputs block CHOP, or else the scene COMP's Out CHOP; a scene with neither contributes no channels.
The blend weight is the picture's own crossfade, so the A/B Fader, Finish Transition, cue switches and Auto Advance move the channels exactly as they move the picture. Sample rate and start come from the CHOP that dominates the blend (the incoming one past half way).
- Match Channels By: Name pairs channels with the same name, Index pairs them by position.
- Missing Channels (only one CHOP has it): Fade to Zero fades it out or in with the transition, Hold Value keeps it until the switch completes, Drop outputs only the channels both CHOPs share.
- Sample Mismatch: Stretch to Longest resamples the shorter one, Pad to Longest holds its last sample, Trim to Shortest cuts every channel to the shortest length.
- Through Black (Fade Through Black and A/B Fader Through Black): Crossfade (the default) glides the channels from the old scene to the new one across the whole fade, with its timing and easing (or the Fader's travel). Switch at Black jumps when the picture is black. Dip with the Fade also scales them down to zero and back.
Pro callbacks
Pro adds two callbacks to the Base callbacks:
| Callback | When | info keys |
|---|---|---|
onCueEnter(row, scene) |
A cue took charge. row is its row as {column: text} plus 'index'; scene is the scene switched to, or None when the scene cell matched nothing. |
cue, label, row, index, name, scene |
onCueListDone() |
The last cue ended. With Loop on the list starts again right after. | cueCount |
A cue's cycleendalert warm-up also fires onPrerollStart, and stopping the list during it fires onTransitionCancel.
Parameters
Read straight from the component: each description is the parameter's own tooltip in TouchDesigner, grouped by parameter page in dialog order. Rows marked Pro exist only in SimpleSceneChanger Pro.
Custom
| Control | Type / default | What it does |
|---|---|---|
ActiveActive |
on / offon | Master switch. Off: no transitions happen, every scene COMP is allowed to cook and node colours are restored. On: reconciles to the current Select. |
SelectSelect |
number0 | Index of the scene to show, counting from 0; Loop Type decides what happens outside 0..Num Scenes-1. Drive it with a constant, an expression, a bind or a CHOP export. A change during a running transition restarts it toward the new scene; choosing the visible scene cancels it. |
Select MenuSelectmenu |
menuempty | Pick the scene by name. Mirrors Select when Select is a constant or bind. |
Loop TypeLooptype |
menuLoop | How Select values outside 0..Num Scenes-1 are handled: Clamp holds at the ends, Loop wraps around (modulo), Zigzag bounces back and forth. |
Current SelectCurrentselectread-only |
menuempty | Read-only: the scene currently visible (updated when a transition completes). |
Num ScenesNumscenesread-only |
number0 | Read-only: the number of scenes, one per Inputs block (a wired connector or a TOP / COMP reference). |
ProgressProgressread-only |
number0 | Read-only: 0-1 progress of the running transition (across both halves in Fade Through Black). |
Finish TransitionFinishtransition |
button | Complete the switch under way right now: a running crossfade or fade lands on its target, a Pre-Roll cuts straight to the scene it was warming, and a half-moved A/B Fader completes. Does nothing when idle. Python: FinishTransition(). |
Switch ModeSwitchmode |
menuCrossfade | How a scene change is performed. Crossfade blends over Crossfade Length; Fade Through Black fades the old scene out (Fade Out Time) then the new in (Fade In Time); Cut switches instantly; the two A/B Fader modes are driven by the Fader parameter like a DJ crossfader: the end the Fader rests at shows the current scene, moving it to the other end switches to the Select scene, and that end becomes the new resting end. |
Crossfade LengthLength |
number10 | Duration in seconds of a crossfade (Switch Mode = Crossfade). A scene COMP with a 'Fadeintime' custom parameter overrides it for that scene. |
EasingEasing |
menuLinear | Easing curve for timed transitions: the crossfade, and both halves of Fade Through Black. Not used by the A/B Fader modes. A scene COMP can override it with Fadeincurve / Fadeoutcurve custom parameters. |
Fade Out TimeFadeouttime |
number1 | Seconds to fade the outgoing scene to black in Fade Through Black mode. A scene COMP with its own 'Fadeouttime' custom parameter overrides this. |
Fade In TimeFadeintime |
number1 | Seconds to fade the incoming scene up from black in Fade Through Black mode. A scene COMP with its own 'Fadeintime' custom parameter overrides this (in Crossfade mode it overrides Crossfade Length). |
Fade StyleFadestyle |
menuTo Black (keep alpha) | What 'black' means in Fade Through Black mode: To Black drives RGB to black and keeps alpha (opaque black); To Transparent fades opacity so the output becomes transparent. |
A/B FaderFader |
number0 | Manual transition control in the A/B Fader modes. Whichever end (0 or 1) the Fader rests at is the current scene. Set Select to the next scene, then move the Fader to the opposite end: the blend (or the fade through black) follows the Fader and the switch completes on arrival, so the opposite end becomes the new resting end. Turning back before arriving cancels; changing Select mid-way re-targets. Drive it from a physical fader or a CHOP. |
Auto AdvanceAuto |
on / offoff | Switch to the next scene every Interval. Off pauses the countdown where it is; choosing a scene by hand (Select, Select Menu, Switch()) restarts it from that scene. |
Advance OnAutoadvanceon |
menuTimer | Timer: switch every Interval. A/B Fader: each time the A/B Fader completes a switch, Select moves to the next scene (in Order and Direction), so the next push of the Fader goes there. Only in the two A/B Fader modes. |
IntervalAutointerval |
number10 | Seconds between switches, the transition included: every Interval the next scene starts to arrive. |
OrderAutoorder |
menuSequential | Sequential steps through the scenes in Direction; Loop Type decides the ends (Clamp stops, Loop wraps, Zigzag turns round). Random shows every other scene once, in a shuffled order, before any repeats. |
DirectionAutodirection |
menuForward | Sequential order: step to the next (Forward) or previous (Back) scene index. |
Random SeedAutoseed |
number0 | Random order: the same seed always gives the same sequence of shuffles. |
Next Switch InAutonextread-only |
number0 | Read-only: seconds until Auto Advance switches. |
ResRes |
two numbers1920, 1080 | Output resolution of the changer: width and height in pixels. |
InputsInputs |
blocks | The scenes, one block each. Add blocks for more scenes; each block is one scene index, counting from 0. |
TOPInputs[n].Topeach Inputs block |
operatorempty | Scene source: a TOP is shown as it is; a COMP shows its Out TOP, otherwise a display-flagged TOP inside it, otherwise its right-most TOP. A reference takes precedence over a wire on the same input connector. |
Mode InInputs[n].Modeineach Inputs blockPro |
menuGlobal | How this scene arrives. Global falls back to the leaving scene's Mode Out, then Switch Mode. Ignored in the A/B Fader modes. |
Mode OutInputs[n].Modeouteach Inputs blockPro |
menuGlobal | How this scene leaves when the arriving scene's Mode In is Global. Ignored in the A/B Fader modes. |
Fade InInputs[n].Fadeineach Inputs blockPro |
number-1 | Seconds this scene takes to arrive: the crossfade length, or the fade-up half of Fade Through Black. -1 uses the global time. |
Fade OutInputs[n].Fadeouteach Inputs blockPro |
number-1 | Seconds this scene takes to fade to black when it leaves in Fade Through Black. -1 uses the global time. |
Easing InInputs[n].Easingineach Inputs blockPro |
menuGlobal | Curve for this scene arriving: the crossfade, or the fade-up half of Fade Through Black. |
Easing OutInputs[n].Easingouteach Inputs blockPro |
menuGlobal | Curve for this scene fading to black when it leaves in Fade Through Black. |
Pre-RollInputs[n].Prerolltimeeach Inputs blockPro |
number-1 | Seconds this scene cooks before its transition starts. -1 uses the global Pre-Roll. |
OutroInputs[n].Outrotimeeach Inputs blockPro |
number-1 | Seconds this scene keeps cooking after it has left. -1 uses the global Outro. |
CookInputs[n].Cookeach Inputs blockPro |
menuGlobal | Global: Control Cook decides. Always Cook: cooks even while hidden, for a scene other scenes read from. Leave As Is: never touched by Control Cook, Unload, Colorize or Active; its cooking stays as you set it. |
CHOPInputs[n].Chopeach Inputs blockPro |
operatorempty | CHOP this scene contributes to the CHOP output. Empty uses the scene COMP's Out CHOP. |
Cooking
| Control | Type / default | What it does |
|---|---|---|
Control CookControlcook |
on / offoff | When on, only the scenes that need to cook are allowed to: the visible one, the incoming one during a transition, one warming up for its Pre-Roll and ones still in their Outro. Every other scene COMP has cooking disabled. Bare TOP scenes are never touched. |
Pre-Roll (start cooking before switch)Preroll |
number0 | Seconds the target scene cooks before its transition starts. When Select changes, the target COMP is allowed to cook immediately and the switch itself is delayed by this much, so feedback loops, movies or particle systems are warm when they appear. Changing Select again during the pre-roll re-targets it; choosing the visible scene cancels it. In the A/B Fader modes any value above 0 simply warms the chosen scene as soon as Select changes. |
Outro (keep cooking after switch)Outro |
number0 | Seconds the outgoing scene keeps cooking after the switch has completed, so an exit animation can finish off-screen. When the time is up the scene is uncooked and unloaded as usual (unless it has become visible again). |
UnloadUnload |
on / offoff | When a scene stops cooking, release its CPU/GPU memory (TOPs, CHOPs, SOPs, movie caches) and free POP GPU memory, paced by Unload Budget. |
Unload MethodUnloadmethod |
menuProgressive (COMP.progressiveUnload) | How an uncooked scene's memory is released. Progressive uses COMP.progressiveUnload() paced by Unload Budget and covers every node type including POPs. Immediate calls unload() on each unlocked TOP in a single frame. |
Unload Budget (ms/frame)Unloadbudget |
number2 | Milliseconds per frame spent releasing an uncooked scene's CPU/GPU memory (COMP.progressiveUnload). Spreads the unload over several frames so a heavy scene never hitches the frame it stops cooking. 0 unloads everything in a single frame. |
Inputs
| Control | Type / default | What it does |
|---|---|---|
Reverse InputsReverseinputs |
button | Reconnect the wired inputs in reverse order. Applies to inputs wired into the connectors, not to the Inputs sequence TOP references. |
Randomize InputsRandomizeinputs |
button | Reconnect the wired inputs in a random order. |
NodeY to Order (reconnect)Nodeytoorder |
button | Reconnect the wired inputs so the input order matches their top-to-bottom position in the network editor. |
Order to NodeY (swap)Ordertonodey |
button | Swap the wired inputs' node positions so top-to-bottom matches the input order (input 0 on top). |
^ automaticPositiontoorder |
on / offoff | Keep NodeY to Order applied automatically: whenever a wired input COMP is moved in the network editor, the inputs are reconnected to match. |
Align Inputs (retoggle)Aligninputs |
on / offoff | While on, the wired input COMPs are kept stacked in one column beside the changer (input 0 on top) using Alignment Mode and Adjust Offset; changing either re-aligns immediately, and so does a wiring change. Turn it off and on again to re-align after moving things by hand. |
Alignment ModeAlignmentmode |
menuCenter | Where the column sits relative to the changer: Top aligns the first input with the changer's top edge, Center centres the column, Bottom aligns the last input with the changer's bottom edge. |
Adjust Offset (X, Y, YGap)Adjust |
three numbers-500, 0, 40 | Align Inputs offsets in network units: X offset of the column from the changer, Y offset, and the vertical gap between inputs. |
Colorize ScenesColorize |
on / offon | Tint the scene COMPs in the network editor: the visible (and incoming) scene gets On Color, the others Off Color. Original colours are restored when turned off. |
On ColorOncolor |
colour0.1, 0.65, 0.25 | Node colour of the visible scene COMP while Colorize is on. |
Off ColorOffcolor |
colour0.4, 0.4, 0.4 | Node colour of the idle scene COMPs while Colorize is on. |
Off = Keep Original ColorKeeporiginal |
on / offoff | When on, idle scenes get their own original node colour back instead of Off Color. The original colour of each scene COMP is remembered the first time it is tinted, so it can always be restored. |
Cues
| Control | Type / default | What it does |
|---|---|---|
Cue ModeCuemodePro |
menuOff | Off: the Cue Table is ignored and Select works as usual. Play: the cue list runs on its own clock (Start, Next, Previous, Go to Cue). A/B Fader: no clock; Start lines up the first cue and every completed A/B Fader switch lines up the next one (the row's mode picks crossfade, through black, or a cut as the Fader leaves home; timing columns are ignored). Locked to Timeline: cue time follows the timeline. External CHOP Channel / External Timecode: cue time follows the channel or timecode below. |
Cue TableCuetablePro |
operatorempty | Table DAT, one row per cue. Timer CHOP columns: length (seconds the cue is in charge, its transition included), delay, cycle, cyclelimit, maxcycles, cycleendalert (seconds before the cue ends that the next cue's scene starts cooking), speed. Cue columns: scene (index or scene name), mode (cross, fade, cut), fadein, fadeout, easingin, easingout, outro, label. Blank cells use the block, scene COMP or global setting. |
Create TableCuecreatePro |
button | Create a new Table DAT beside the changer with one cue per scene, filled in from the current settings (mode, fade times, easing, Pre-Roll, Outro; length from Auto Advance's interval), and point Cue Table at it. Existing tables are never changed. |
StartCuestartPro |
button | Play the cue list from its first cue. |
StopCuestopPro |
button | Stop the cue list. The visible scene stays; nothing further is cued. |
Previous CueCueprevPro |
button | Jump to the previous cue while the list plays. |
Next CueCuenextPro |
button | Jump to the next cue while the list plays. A cue with cycle = 1 and cyclelimit = 0 holds until Next Cue. |
CueCuegotoPro |
number0 | Cue number (0-based) for Go to Cue. |
Go to CueCuegoPro |
button | Jump to the cue number in Cue, starting the list if it is not playing. |
PlayCueplayPro |
on / offon | Pause the cue clock when off (the running transition still completes). |
SpeedCuespeedPro |
number1 | Cue clock speed. 2 plays every cue twice as fast. |
LoopCueloopPro |
on / offoff | Start again from the first cue after the last one ends. |
External CHOPCueextchopPro |
operatorempty | CHOP whose channel drives cue time in External CHOP Channel mode. |
External ChannelCueextchannelPro |
textchan1 | Channel of External CHOP that drives cue time. |
External UnitsCueextunitsPro |
menuSeconds | Units of the external channel. |
Timecode SourceCuetimecodePro |
operatorempty | Timecode CHOP (hour, minute, second, frame channels) or a DAT whose first cell is a timecode string, for External Timecode mode. |
Current CueCurrentcueread-onlyPro |
number-1 | Read-only: the cue in charge, -1 when none. |
Cue LabelCuelabelread-onlyPro |
textempty | Read-only: the label column of the cue in charge. |
Cue CountCuecountread-onlyPro |
number0 | Read-only: number of cues in the Cue Table. |
CHOP
| Control | Type / default | What it does |
|---|---|---|
CHOP OutputChopoutputPro |
on / offoff | Blend the scenes' CHOPs in lockstep with the picture and output them on the second output. Each scene contributes its Inputs block CHOP, or else its COMP's Out CHOP. |
Match Channels ByChopmatchPro |
menuName | How the channels of the outgoing and incoming CHOPs are paired: by channel name, or by position. |
Missing ChannelsChopmissingPro |
menuFade to Zero | A channel only one of the two CHOPs has. Fade to Zero: it fades out (or in) with the transition. Hold Value: it keeps its value until the switch completes. Drop: only channels both CHOPs share are output. |
Sample MismatchChopsamplesPro |
menuStretch to Longest | CHOPs with different sample counts. Stretch: resample the shorter one to the longest length. Pad: extend it by holding its last sample. Trim: cut every channel to the shortest length. |
Through BlackChopfadePro |
menuCrossfade | In Fade Through Black (and A/B Fader Through Black). Crossfade: the channels glide from the old scene to the new one across the whole fade, following the fade timing and easing (or the Fader). Switch at Black: they jump when the picture is black. Dip with the Fade: they jump at black and also scale down to zero and back with the fade. |
Callbacks
| Control | Type / default | What it does |
|---|---|---|
CallbacksCallbacks |
operatorempty | The DAT holding your callback functions (onPrerollStart, onTransitionStart, onSelectionChange, ...). It points at the built-in template, which does nothing, until you use Create Callbacks. |
Create CallbacksCreatecallbacks |
button | Create an editable callbacks DAT next to the changer, with every callback documented inside, and point Callbacks at it. |
About
| Control | Type / default | What it does |
|---|---|---|
Open DocumentationOpendocs |
button | Open the built-in documentation (the 'help' Text DAT inside the component) in a viewer window. |
LinkOpenauthor |
button | Open the author's page in your browser. |