This page covers:

  • How the Randomizer works
  • How the Randomizer can be used
  • Looping

How the Randomizer works

There are something along the lines of 600 unique options in Keysight that all interact with each other, and so Randomization has to be a bit more nuanced than "scramble everything". When randomization is triggered, the broad pipeline is as follows:

  • The default preset is copied into the active preset slot
  • A "master random stream" is generated from the given seed text
  • Sub-streams are created for each Randomizer branch from the master stream
  • The Randomizer executes using the provided settings

Note

The Randomizer is a spaghetti monster. It is a ridiculously huge and multi-layered graph of nonsense and it's insane to me that it can execute so quickly.

Random streams and seeds

The Randomizer is "seeded randomization". The output is unpredictable, but guaranteed to be consistent across repeat operations if provided the same input seed. This allows users to share known-cool seeds (as long as both users are using the same Randomizer settings).

Seed

Text entered here is converted to a "random stream". Random streams take an integer value and are used to generate seeded random numbers. Each time the stream is called by a random number generation function, the stream will generate a new random number until the stream is reset.

Text is converted to an integer for use as a random stream via an incredibly basic function:

  • Any non-alphanumeric characters are stripped (only 0-9 and A-Z are allowed)
  • Letters are converted to a number that is their position into the alphabet (so A = 1, J = 10)
  • Number is used as-is, carrying over digits between columns as necessary

So, for example:

ABC = 123
123 = 123
70Z = 726
J1  = 101
HEY = 875

Info

The random stream integer is a signed int32, and will overflow if provided a long seed. Overflowing is consistent, so the same long seed will still give the same random stream integer.

Branches

There are 19 main branches in the Randomizer, each with their own sub-stream. This ensures that if a Randomizer setting is altered, it only impacts the branch relevant to it and the same seed will still generate similar presets between users with different settings.

However, within each main branch, there are lots of sub-branches. Altering Randomizer settings and causing the same seed to pick different a sub-branch path will have knock-on consequences to other sub-branches within that main branch category. For example: adjusting "note has border" chance and causing a randomized Note object to now have a border (where previously that seed did not cause a border) will also change the way the Note object body material is randomized, as these elements are sequential on the same random stream.

All this is to say: changing Randomizer settings between two instances of Keysight will often cause a similar preset to still be produced by the same seed, but not always, and where discrepencies do occur they may not always be intuitive.

How the Randomizer can be used

Ctrl + R or (X / Square on controller) is a useful shortcut for rapidly triggering the Randomizer. Whenever the Randomizer is triggered, it will generate a new random seed first if the seed has not changed since the last randomization. Spamming the Randomizer can be a great way of coming up with new preset ideas, or just presets to use as-is!

Safe vs. Full randomization

The Randomizer has 96 configurable chance branches. "Full" randomization uses a user-driven set of Randomizer settings, configured in the Randomizer menu. "Safe" randomization, on the other hand, is a conservative Randomizer configuration baked into Keysight and not editable outside of enabling/disabling categories. The "Full" Randomizer mode, under stock settings, will scramble presets more heavily than "Safe", with "Safe" generating presets that should behave somewhat consistently with uniform colours, etc.

Mode

Warning

The Randomizer settings are adjusted by the Graphics preset selected under Graphics and at startup, with MacOS launching into HIGH by default (as opposed to Windows' ULTRA). As a result, sharing seeds between Mac and Windows may result in different presets.

Re-rolling

A great use-case for the Randomizer is to "re-roll" individual elements of a preset. If you have a preset where you like most elements of it but, for example, the Pulses look bad: the refresh icon on the corresponding category will randomize only that category with the given seed.

Re-rolling

Looping

The Randomizer can trigger itself on a loop, which is exactly as ridiculous as it sounds. The small refresh icon next to >>> Randomize preset <<< will activate looping mode:

Loop

This reveals a few options. The most obvious is Time between randomizations. Setting this to the minimum value of 0.05s will result in functionally a different preset per note, which is visually very impressive if quite overstimulating.

Only randomize on no activity will reset the Randomizer's looping timer on every frame where there is simulated note activity (or notes-per-second above 0). This is very useful in a livestreaming context if you want to automatically generate new presets for each thing you play, but not have the Randomizer trigger mid-performance. As long as there is a suitable gap between pieces, the Randomizer should kick in and give you a new preset before you start the next piece.

Keep default backdrop will stop the Backdrop, Overlay and Light Bars from being adjusted by the Randomizer at all (that is, they keep the current preset's elements. The default preset is not copied for these elements). This is useful if you have a particular scene you wish to keep and only randomize the effects within it.

Warning

This setting is also critical if using a short Time between randomizations! Disabling this will re-roll light bars each randomization, which is incredibly painful on the eyeballs.