Create modulators
create_modulatorsBuild a bank of tempo-synced LFOs with configurable shapes, rates, and phase offsets, all locked to BPM and outputting to a single Null CHOP for direct binding.
Instructions
Build a bank of N BPM-synced LFOs in one self-contained container — each an oscillator (sine/triangle/saw/square or a random sample-&-hold) with its own rate-in-beats, output range and phase offset. Every rate locks to a tempo source (a create_tempo_sync Null, or TouchDesigner's global tempo) by expression, so the whole bank speeds up/slows down with the music and stays phase-continuous across tempo changes. All outputs land on one Null CHOP (mod_out) with one named channel per modulator, ready for bind_to_channel — the 'everything breathes' lever. Note: modulators are timeline-driven, so they only move while the timeline is playing. Re-running with an existing container name rebuilds it in place (clearing that container's children), so this tool is marked destructive and hidden from the safe profile.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the self-contained modulator-bank container. | modulators |
| parent_path | No | Parent COMP the 'modulators' container is created inside. | /project1 |
| modulators | Yes | The modulators (LFOs) to build. Each becomes one named output channel on the bank's Null. | |
| tempo_source | No | Path to an existing tempo Null/Beat CHOP carrying a 'bpm' channel (e.g. the Null from create_tempo_sync, '/project1/tempo_sync/tempo'). Omit to create a fresh Beat CHOP locked to TouchDesigner's global tempo inside the bank. | |
| bpm_channel | No | Name of the BPM channel on the tempo source to lock rates to. | bpm |
| expose_controls | No | Expose a live custom-parameter page on the bank: a master Rate multiplier and a master Depth (amplitude) scale, so you can speed up or flatten the whole bank from one knob during a show. |