Sapphire Zoo: a programmable chaotic oscillator

Really want to get into this, hopefully, at the weekend. Just want to post a couple demo shots of how well it works with the VCV scope in Lissajous mode with my cable colour blend feature mod (the extra button that appears)

From Attraktoren

Dequan Li.vcvm (2.5 KB)

It’s a nice one, I skipped it early on because it had 6 parameters. Today, I set the values in the formulas for the two extra params and here ya go.

We already have Bouali… it is in the factory presets in pre-release 5. Here is the list of the presets we now have, so nobody spends time on one that has already been completed:

  1. Bouali
  2. Chen-Lee
  3. Dadras
  4. Four-Wing
  5. Hadley
  6. Halvorsen
  7. Lorenz
  8. Nose-Hoover
  9. Qi-3D
  10. Rossler
  11. Sakarya
  12. Sprott
  13. Three-Scroll

I’m going to resolve the issues @ale47p found in Rossler, Sakarya, and Sprott.

Also, I have implemented auto-reset when the particle goes more than 100V away from the origin. There is not threshold adjustment yet, but I will probably add a slider in the menu for this in a future pre-release, i.e. after pre-release 6 (see more below).

I also added a menu feature in all the chaos modules (Frolic, Glee, Lark, Zoo) that lets you insert a Chaops to the left, to complement the existing option to insert a Tricorder to the right.

I’m going to try to get all this stuff in a pre-release 6 build within a few hours… stay tuned!

Oh by the way, Dequan Li already exists… that is the attractor used by Lark. So I should add those to the list:

  1. Frolic = Rucklidge attractor
  2. Glee = Aizawa attractor
  3. Lark = Dequan Li

[EDIT] I started wondering if 14…16 would still make sense as presets? For example, what if you want to take Frolic/Rucklidge, but change the formula a little bit, or change how the parameters work?

Sorry about that. I have been checking the existing list before building new ones but that one got past. I lost track and uploaded it in error. I’ll clean up my work area. I don’t need old stuff hanging around there.

I am very happy you are contributing all of these fun attractors… it is saving me a lot of development time to do other things for releasing Zoo.

You should definitely do it! I would totally use it. My Sapphire road map is already as full as I can handle right now. (More fun and top secret stuff is in the works.)

Yes, especially when the attractor has more than 4 parameters like Dequan Li

@scook brings up a good point. When you start entering formulas into Zoo, you will run into this quickly. Some of the attractors have more than 4 parameters, so you have to pick and choose which of them to assign to Zoo variables a, b, c, d.

This means sometimes you have to just guess, play with it, then reassign one of the variables to a different parameter in the original formula, play with that, etc.

And of course you have to keep track of what the original formula calls each parameter, versus what you call them in Zoo (a, b, c, d). Any unused parameters beyond 4 must be replaced with numeric literal values like (-3.72).

I limited to 4 parameters for no technical reason. I think that’s enough cognitive load for a human operating the thing enough to learn the attractor’s personality.

I’m pretty sure Spock would say, “The needs of the user outweigh the needs of the developer.” Welcome to being a developer, LOL.

Thanks for changing my internal dialog about the missing trig functions as a McCoy problem.

These are fairly different from the one already in the library.

From Attraktoren

Four Wing 2.vcvm (2.5 KB)

(could not capture a good image of this one)

and

From Attraktoren

Four Wing 3.vcvm (2.5 KB)

I have a few others from the same source but nothing special.

Fun to play with + i think the multi scroll attactors look particularly pretty - and maybe useful for some modulation.

I found this image that i particularly like - maybe it will inspire one of you to make a preset:

https://www.researchgate.net/publication/220265245_FAMILIES_OF_SCROLL_GRID_ATTRACTORS

Wow, that is an amazing resource! I will study this to see if I can make it work in Zoo.

I wanted to bring this up because I think this might be the best way to format Zoo’s factory presets. More specifically, I am considering various ideas, but I’m not sure how other people feel about it. So I’m asking for feedback.

Instead of talking about implementation, we should first decide on what our goals are. What makes the most sense to you as a user?

  • When you load a preset, does it make you happy or sad that it resets CHAOS and SPEED to their default values? Do you like knowing that everything has gone back to its default? Or do you find it more practical to just load the formulas so that you are operating a new attractor with the same chaos and speed settings? Quirk: not all attractors have the same number of supported parameters (a, b, c, d). I think we will have to store/load the chaos mode in the preset no matter what, to avoid ending up with an invalid mode, whether or not we store the chaos, speed, and turbo settings.
  • (Similar but different issue.) When you initialize Zoo (via menu or Ctrl+I), how do you feel about it snapping back to the Rossler attractor? I feel a little stronger that this should stay this way, because it’s easy to get messed up formulas and you just want to go back to a safe place quickly. But I could be talked out of this if most people want Zoo to have a “sticky attractor” that can be initialized without losing the formulas.
  • Is the Rossler attractor really the best default for Zoo? Is there another preset that would make Zoo more fun/useful by default?

I won’t make any big decisions about these topics for a day or two, to give people a chance to ponder and respond here.

If it were my module, i would make the factory presets only change the formulas and their parameters, nothing else. If the user wants a preset that also changes the speed or chaos they can save their own.

As for invalid states, as i mentioned above, you can override that function to set a bool when a preset is loaded, and when this bool is true, run a validation function that corrects any invalid state.

But that’s just my personal preference…

If default attractor matters and the user can decide it, let the user pick a default with a hard-coded fallback and warning message if your really nice.

Same with SPEED and CHAOS - let the user decide if they should be persistent.

Here are a couple of presets that I wrote by hand. I added a comments section so I can keep notes with the preset.

From Attraktoren

M1.vcvm (558 Bytes)

and

from Attraktoren

Zhou-Chen.vcvm (774 Bytes)

Trying to tune the last two preset, I found myself wanting a way to independently scale x,y and z.

From Attraktoren

Wang-Sun.vcvm (1.1 KB)

Here’s what I’m doing right now… I’m going through and tuning the factory presets. I’m making sure that both the initial default speed looks somewhat consistent with Frolic, and that the 100% morph control from Chaops also has good ranges.

I have added some more tuning stuff that will be available in the next pre-release. I have not yet added independent xyz position scaling, but I did do this for the 100% morph setting (velocity instead of position). It does make sense to provide the same thing for position.

I have enough factory presets now… they each require a certain amount of work for me in the initial release, in terms of testing and tuning. I want to focus on getting everything cleaned up and ready for release.

Thanks you @scook for all the amazing presets!

I hope the last 3 are a little easier to tune. I have learned some in the last few days.

Thanks for the opportunity