Season's greetings!
Keysight has long suffered from a cramped and horrible-to-use menu. What started as a "oh, let's rework the menu" turned into a full systems rebuild, because the menu should really point to cleaner-structured variables, right? And then 4 months disappeared. But hey, got it done in time for Christmas!
Almost every single aspect of Keysight got rebuilt from the ground up to support a new data structure for presets. The exciting thing here is not the smattering of cool new features that got added in the process, but the flexible way in which new features can be added down the line. 2021 will be an exciting year for midi visualization, and that's a promise.
Anyway, I hope you all have a wonderful Holiday! Without further ado, here are the update details... brace for impact, wall of text incoming!
Major feature reworks
- Re-structured, re-stylable menu.
- Infinite preset slots, improved back-end
- "Pulse" objects replacing rings
- Custom particle and pulse textures
- Seed-based randomizer
- Support for dynamic masking for perfect semi-transparency, no chroma key required
- Improved auto camera adjustment, first person cam, dolly zoom FOV slider
- Improved performance
- Individual note stat tracking
Changelog
(Advanced menu only - Basic menu is simply organised into tabs for the most part)Important overhauls
Re-structured menu. Menu now follow a tab-based approach. Various menu behaviours can be controlled via the System > Interface tab. Holding alt while interacting with a slider will disable value snapping.
'Rings' have been changed to 'Pulses'. These perform the same basic function, but are modular with infinite slots available; use a texture-based shape (with user-imported texture support); and have a configurable activation / rotation / brightness.
Presets are now infinite, and are saved to a single PresetsStruct.sav in AppData/Local/Keysight/Saved/SaveGames. Preset management tab can be used to "export" the currently selected preset to DonorPreset.sav, for sharing single presets.
Core menu
Fixed a lot of weird edge-case behaviour relating to changing top-down / bottom-up note mode while notes are active
Moved camera settings from Graphics Settings to "Viewport" tab
Moved "animate piano keys" to Viewport tab
Changed "use global core" toggle to be more obvious
Changed key length edits to also affect frame height if frame height is default value
Changed field of view slider to perform a "dolly zoom" effect when in a default camera angle to keep the active area framed
Added "reset to custom angle" option, and a button to save the current camera angle as "custom angle"
Added "alignment image overlay" feature. Allows for a user-imported image to be applied across the screen with variable opacity to facilitate camera matching. Images are imported under "Camera alignment" custom texture folder. Also has alignment notes spawn option (spawns low A + all C notes)
Added sustain pedal midi velocity floor and ceiling sliders
Effects menu
Note Objects
Added shape override. This forces all notes to use the shape of the override, regardless of which key is actually being activated
Added width and depth scaling for white and black key objects. Width scale applies additional X-axis scaling, depth provides additional Z-axis scaling (ie scaling towards the camera)
Note lights
Changed "min brightness" to now be a proportion of the maximum brightness
Keypresses
Added fade-out animation curve slider. High values give sharp change at the beginning of animation, and less at the end
Added opacity fade and horizontal shink animation options, with toggles to enable/disable animation types independently
Impact lights
Changed "min radius" to now be a proportion of the maximum radius
Added option to enable/disable impact light brightness being dependent on sustain pedalling
Added option to control Y-axis shift of impact light
Added option to control light falloff exponent. Higher values cause sharper lighting dropoff. Low values might look better on metallic backdrops
Pulses
These replace the previous "ring" objects! See documentation for full option breakdown
Particles
Changed all "min" values except brightness to be "min proportion". "Fade-out" speed option is now "Min speed prop. on note-off", and controls the proportion of minimum speed particles blend to once key is released and particles are still in flight
Scene menu
Added "masking mode" feature to "Component visibilities" tab. This allows for semi-transparency in OBS using the StreamFX plugin's Dynamic Mask filter rather than using chroma-keying. See documentation and Steam guide for more information
Randomizer menu
Fixed a ton of specific edge-case randomization bugs and unintended behaviours
Overhauled randomizer to use "seed" values. Clicking "randomize" generates a random number to be used as a seed before performing randomization, or a seed can be specified and randomized with for a guaranteed random preset. Only alphanumeric characters are parsed into seed values
Added minimum / maximum hue sliders for colour randomization, for randomizing to specific colour sets. Min hue locks hue values to the right of the slider position, "wrapping back around" if max hue is lower than min hue
Hotkeys menu
Changed debug testing notes to spawn with the actively selected preset if using midi channel preset switching mode, allowing testing of changes to the current preset without having to generate notes over that specific midi channel
Added support for more actions to be automated through hotkeys
Added option to keep backdrop and piano materials as the default materials (specified under System > Defaults Calibration) while in automatic randomization mode, to ensure backdrop does not "flash" due to excessive switching with low interval
Removed option for "preset cycle" and "preset random" automatic switching options. If you are a user who wants these features back, get in touch! (They got removed because nobody used them, as best I could tell)
Graphics menu
Added options to enable alternate frame delivery mode. Basically a placebo button, I have no idea what it does
System menu
Added "Interface" menu tab with options to tune menu behaviour
Added "password" and "command" fields for Inbound Websocket connectivity. See documentation for more information
Added override switch for Inbound Websocket to disable incoming commands from having any effect
Added "Menu styling" menu tab for switching between menu themes (or if you're really obsessive, customizing the look of every button in Keysight)
Added "Default material calibration" menu tab to override defaults used when Keysight spawns new pulses, particles, presets etc.
Added button to re-run Setup wizard
Statistics menu
Added support for showing every note tracked individually. Mouse over each bar for specific counts
Changelog menu
Added changelog menu to view update information directly from inside Keysight
Other changes
Changed how first-person fly camera (activated with F) behaves. Now is more similar to free-cams in video games. Changing camera tilt to 0 degrees and local roll to 0 will functionally "flip" Keysight "upright", to behave like a TV hanging on a wall
Changed files in this update