Skip to content

Add Chaosforge module - #1

Merged
carlosedp merged 4 commits into
mainfrom
chaosforge
Aug 5, 2026
Merged

carlosedp merged 4 commits into
mainfrom
chaosforge

Conversation

@carlosedp

Copy link
Copy Markdown
Contributor

No description provided.

A fifth module (apps/att), built on the shared shell, core and VCV layer.

Two generators each integrate one of twelve published chaotic systems
(Lorenz, Rössler, Thomas, Chua, Halvorsen, Chen, Burke-Shaw, Aizawa,
Dadras, Sprott B/C, Finance) and send two of their three state variables
to a pair of jacks: OUT 1/2 from A, OUT 3/4 from B. Two outputs from one
orbit are related but never equal, which is the thing a pair of LFOs
cannot do.

- SPEED is a multiplier on the rate each system was catalogued at, so
  1.00x means comparable motion whichever system is selected. A fixed
  1 ms module step drives an RK4 integrator whose own step follows SPEED;
  ATT_MAX_SUBSTEPS bounds the work and lets accuracy degrade rather than
  letting time slow down.
- COUPLE is diffusive coupling in normalised units, taking the two orbits
  from unrelated through entrained to locked.
- Output scaling is a measured 0.2/99.8 percentile window per axis, with
  RANGE > AUTO tracking the orbit's own window once the constants have
  been moved off their published values.
- The home screen is a live XY plot per generator, sampled on the orbit's
  clock so the figure covers the same arc at any speed.
- IN 1 does RESET / RESET A / RESET B / FREEZE (level-driven, so a gate
  holds every output at its exact voltage).

Two systems needed their published defaults changed: Thomas at b=0.19 and
the Finance system at a=0.001 are limit cycles, not attractors, so both
generators stayed locked together and the module had two outputs instead
of four. Their defaults now sit in genuinely chaotic bands (Thomas 0.05,
Finance 0.95) with re-measured output windows; docs/Design.md carries the
Lyapunov table and the method.

Also adds forgevcv::EngineFloatQuantity and FloatSlider — ChaosForge is
the first module with continuous parameters, and rounding a range 0.05
wide to integers leaves one usable value.

Tests: 27 native cases (attractors + generator) and a two-instance VCV
isolation test. The isolation test caught a real bug: constrain() is a
macro that evaluates its argument three times, and randomize.hpp had a
PRNG call inside one, so roughly one roll in fifty stored a parameter
outside its own legal range.
- Increased speed range from 0.01×–16× to 0.01×–100× across documentation and code.
- Adjusted display refresh rate to 30 fps for smoother animations.
- Modified speed settings in default parameters for better performance.
- Enhanced drawing logic to reflect live output instead of buffered points, improving visual fluidity.
- Changed preset startup parameters
@carlosedp
carlosedp merged commit 67e9890 into main Aug 5, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant