Releases: REMvisual/td-BrownianMotion
v2.0.0
What's New in v2.0
Math Upgrades
- Exact OU transition formula (Gillespie 1996) — zero discretization error, no substep loops
- Implicit spring filter (Klak-style) — unconditionally stable at any timestep
- Voss-McCartney 1/f pink noise detail layer — true organic micro-texture
New Features
- Rotation noise — independent OU process with its own speed, per-axis amplitude (pitch/yaw/roll)
- Detail + Detail Layers — adds fractal richness, respects Smoothing
- 6-channel output: tx, ty, tz, rx, ry, rz
Parameter Renames
- Reversion → Center Pull
- Roughness → Smoothing (inverted: 1 = smooth, 0 = raw)
- Center → Anchor
Bug Fixes
- Speed=0 stops instantly (no settling delay)
- TD timeline pause freezes the script
- Smoothing no longer changes perceived speed (narrowed omega range)
- Detail respects Smoothing (applied before spring filter)
- Init at Anchor (no cold-start drift)
- par.enable moved to enableExpr (prevents cook loops)
Testing
- 26 automated tests covering all parameters at extreme values
v1.2.1 — Clean Release (TD 2025+)
Patch release with clean script and version requirement.
- TD 2025+ required — uses
CookLevel.ALWAYSand 2025.xabsTimebehavior - Removed
enableExprthat caused setup failures on some versions - Clean single-file script (
src/brownian_motion.py)
All core features from v1.2.0 intact:
- Decoupled spring filter (smooth at any speed)
- sqrt(speed) spring scaling
- Per-axis range toggle
- Module-level state (no cook loop)
Full changelog: v1.2.0...v1.2.1
v1.2.0 — Smooth at Any Speed
What's New
Decoupled Spring Filter
The critically-damped spring now runs at real frame time, separate from the OU simulation. Previously the spring ran inside the OU substep loop — at high speeds it was chasing 20+ random jumps per frame and couldn't smooth anything. Now the OU evolves at speed-scaled time, and the spring smoothly interpolates toward wherever it lands. Crank speed to 100 with roughness=0 and it's still butter.
sqrt(speed) Spring Scaling
The spring's natural frequency scales with sqrt(speed) instead of linearly. At speed=10 the spring is 3.2x stiffer (not 10x), keeping motion smooth while still tracking faster OU evolution.
Per-Axis Range
New Per-Axis Range toggle — set different min/max bounds per axis. X can be [-180, 180] degrees while Z is [-10, 10] centimeters. Irrelevant range params are greyed out based on the toggle and axis enable state.
Parameter Enable Logic
- Per-Axis Range OFF: uniform Range Min/Max active, per-axis params greyed out
- Per-Axis Range ON: per-axis params active, uniform greyed out
- Affect X/Y/Z OFF: corresponding per-axis range params also greyed out
Cook Loop Fix
Replaced scriptOp.store()/fetch() with module-level state dict — eliminates the cook dependency loop that was freezing animation. Added CookLevel.ALWAYS for guaranteed per-frame cooking.
Detailed Parameter Docs
README rewritten with plain-English descriptions for every parameter.
Full Parameter List
Motion: Range Min/Max, Speed, Amplitude, Reversion, Roughness
Range: Per-Axis Range toggle, Range Min/Max X/Y/Z
Axes: Affect X, Affect Y, Affect Z
Advanced: Center X/Y/Z, Seed, Independent, Reset
Install
Download the .tox below and drag it into your TouchDesigner project.
Brownian Motion v1.0.0
Brownian Motion v1.0.0
Ornstein-Uhlenbeck brownian motion Script CHOP for TouchDesigner.
Features
- Mean-reverting procedural noise — stays within your defined range
- Critically-damped spring smoothing for silky motion
- Per-axis control (X, Y, Z)
- Deterministic seeding for repeatable results
- All parameters animatable
Install
Download Brownian Motion.tox below and drag it into your TouchDesigner project.
Requires TouchDesigner 2023.11000+