--- OVERHAULS --- Added menu scaling and ultrawide support! And preset bar height adjustment! Both found under System > Interface, these sliders allow you to see much more of the menu on higher resolution displays. By default, the menu now scales to remain at 16:9 for the "core elements" (tabs/options/preset testing) and pinned to the left side of the screen, with the preset bar still filling across the top as before. For ultrawide users, this gives you a lot of nice empty space on the right for seeing your presets in action while you edit them. The menu scaling slider functionally makes the menu believe your viewport is wider than it actually is, causing this pinning to scale down the menu while filling downwards and showing you more options at a smaller size. Added "Force aspect ratio" option to Automatic layout! This is on by default and forces 16:9 resolution. This ties into ultrawide support, where running Keysight on an ultrawide will now pin the render view to the right side of the screen and keep it at 16:9 for a better representation of how your preset will look when rendered. It can also be used to preview Keysight in 9:16 (portrait) if working on vertical content! ----- Added a note counter! It's very debug-y and not an "official" feature, and is only accessible through console commands. Pairs well with the new console command auto-execution-from-text-file system though if you want to "save" it. Here's how it works: - Three modes: - Session: displays current session total notes - Total: displays total notes across all saved sessions - Subathon: counts *down* from a set number (that can be increased via websocket), and turns Keysight black once counter hits 0 - Configurable digits (up to 9, so up to 1 billion notes) - Configurable size (fixed font though) - Alignment and offset values to position it on-screen - Background/foreground colour, with a "odometer" style background image behind each number Console commands required: - "counteron" turns counter on - "counteroff" turns counter off - "countermax [number]" sets max subathon counter that incoming adds cannot exceed - "counteradd [number]" adds number to subathon counter. Can be negative numbers to subtract - "counterset [number]" sets the subathon counter, useful for beginning subathon sessions - "counternewsession" sets current session note count as an offset for session counter mode (for a "soft" session reset to count notes for a particular piece, for example) - "counterresetsession" sets session offset back to 0 for session counter mode - "counteroffset [number]" sets a manual session offset - "counterquery" sends the current counter value over the Inbound websocket (if connected) via the "counter" event name, with variable name "counter" - "counter [session,total,subathon],[digits],[digit size],[alignment TL/T/TR/L/M/R/BL/B/BR],[X-offset]x[Y-offset],[background hex],[foreground hex],[opacity]" This last one sets the styling. For example, I quite like - "counter session,5,40,TL,20x20,#333333,#FFFFFF,0.25" Which gives enough digits for 99,999 notes in one current session, puts the counter in the top left, monochrome, semi-transparent, and fairly small ----- Added pedal display! Very similar to the note counter, and also only accessible through console commands: - "pedalson" turns pedal display on - "pedalsoff" turns pedal display off - "pedals [soft],[sost],[sust],[squash proportion],[size],[alignment TL/T/TR/L/M/R/BL/B/BR],[X-offset]x[Y-offset],[background hex],[inactive pedal hex],[active pedal hex],[opacity] I quite like: - "pedals 1,1,1,0.9,40,TL,60x60,#333333,#666666,#FFFFFF,0.25" Which shows all three pedals, a little bit of squash while pedals are down, small size, positioned under the note counter, monochrome, semi-transparent. --- SMALL ADDITIONS --- Added more granular control for pedal-based effect extension, with sostenuto and sustain support split across keyboard and backdrop effects Added commands.txt file to the save data location. Any lines not starting with // will be executed as console commands in Keysight upon launch Added "Console command" as an action to the inbound websocket. Format follows seed randomization formatting (ie "[trigger]:[console command]", eg "cc:r.DefaultFeature.AntiAliasing 2") Added some extra prints to Log > Other for websocket connect/disconnect information Added file selector support for M4A audio files when attaching audio to renders Added ability for a single console command to contain multiple individual commands. Commands are split by the | character, so "counteron|counter [styling]" will both turn the counter on and style it Added console command "querynps" which sends the current smoothed notes-per-second value over the connected Inbound websocket via the event name "query" with variable name "nps" Added console command "queryactivity" which sends the current smoothed activity value over the connected Inbound websocket via the event name "query" with variable name "activity" Added console command "pitch [ID] [channel]" for overriding the MIDI channel of a given note on/off pitch. Requires raw MIDI ID of the pitch, eg. "pitch 21 2" will set note ID 21 (A0) to channel 2 Added console command "pitchall [channel]" for setting the MIDI channel override for all 88 pitches at once Added console command "pitchreset" to wipe any pitch channel overrides Added ability for incoming messages over the websocket to be split on the / character and execute individually Added small clear button to preset search Added a toggle under Scene > Piano for the divider bar visibility between frame and piano Added websocket action to reload the current preset from file --- CHANGES --- Updated websocket settings on any save data that has the Inbound websocket disabled *and* no address set to use settings that work with the new official chat control tool Changed websocket behaviour to be far more robust in the face of reconnections or changing websocket addresses Changed fresh Keysight installs to use a 144 FPS framerate lock. Stops GPU coil whine when window is minimised Changed Deframe console command to encode the current simulation time into a colour (don't worry about it) Changed particle systems to manual allocation mode from auto for Niagara particle pre-allocation. May minimally help stutter in particle-heavy presets Changed preset tabs to fill to the available horizontal space better Removed console command field auto-clearing itself after triggering a command, to make repeat commands with small changes a bit easier Removed "Disable frame-smoothing optimisations" toggle from Graphics and reset to default RHI CVars, as further testing proved the defaults were better (go figure) --- BUG FIXES --- Fixed sustain pedal effect extension not working if note-off events were triggered through note-on events with 0 velocity (thanks to BrentusFirmus for helping find this!) Fixed fatal crash if refreshing websocket connection faster than 0.25 seconds (don't even ask) Fixed websocket response message sometimes sending "Unrecognized command" even if a command was recognized and executed properly Fixed (or, well, reduced by 24 times) the edge case where particles/pulses would snap "below" a light bar if very close in height when new pulses/particles were spawned Fixed Randomizer's Light Bar tab not greying out properly in Safe randomizer mode Fixed some Pulse setups showing line of interpolated pixels at edges of Pulse bounds when given certain stencils Fixed rare instances of the description flickering during import-preset actions