Keysight 1.5 release!

Keysight

Keysight is a real-time MIDI visualization platform powered by Unreal Engine, built for piano-focused streamers and content creators, and featuring unmatched customization!

[h1]Two years![/h1] Greetings! Wow. Two years on Steam... and in celebration, I have two much-requested features for you folks: [b]Keysight can now directly render midi files into .mp4 videos, and there is a new visual element: Light bars![/b] Oh, and there is now [url=https://discord.gg/EHuJKU9393]an official support Discord server[/url] too. Before we break those down though, I thought it would be fun to show the first-ever demonstration/trailer for Keysight (before it was even on Steam!) and a comparison to the latest trailer: [previewyoutube=gF15AZsPNtk;full][/previewyoutube][previewyoutube=DkE4fCA1-g0;full][/previewyoutube]I think it's safe to say that Keysight has been the most creatively rewarding thing that I've ever worked on, both from the perspective of "I made and released something and that feels good" and the overwhelming kindness of you guys using it <3 Thank you so much for joining me on this much-longer-than-expected adventure into "what's the best way to liquify some eyeballs with midi effects"! Ok! Right, feature breakdown... enough emotional stuff! [h1]Render-to-video[/h1] After loading a midi file, you can- wait, hold up. Right. Midi file loading got overhauled! You can now scrub through the playback slider, time-remap very accurately, see some midi stats after loading a file, auto-load the last loaded midi file at startup, and toggle playback with P... [img]{STEAM_CLAN_IMAGE}/38079779/e811e4e5311d25abf3d01abc37ebfa49591f5b62.png[/img] Ahem, as I was saying: after loading a midi file, you are presented with a nice big render-to-video button! Clicking this will begin generating a perfect-quality .mp4 of your midi as fast as your computer can handle. Cool features: [h3]Maximum quality[/h3] Render-to-video can internally render all the way up to 8k, 7680x4320 (or 16x more pixels than regular old 1080p!) and output up to 4k, 3840x2160 at 30 / 60 / whatever framerate you like! Rendering to a much higher internal resolution and scaling it back down will make the render take longer, but particle clarity and note edges will look [i]extra[/i] crisp and clean. [img]{STEAM_CLAN_IMAGE}/38079779/8d796e0e7434d12b92f7e2b3e3a40df2aef03d1c.png[/img] [h3]Audio tracks and branding[/h3] Keysight can also add a chosen audio file as the track to your freshly rendered video! By using the same midi as you use in Keysight to generate an audio file (.mp3 / .wav / .flac), no additional video editing is required for you to produce a complete video. On top of this, Keysight can fade in and out the rendered video with specific timings, add padding at the beginning and end, and even overlay artwork of your choosing! If you're looking to make some nice straightforward midi visualization Youtube content, the only non-Keysight thing you need is some audio. [img]{STEAM_CLAN_IMAGE}/38079779/9d268d45478949531ef634cf27abb4d85ed484e5.gif[/img] [h3]Preset switch choreography[/h3] Speaking of automation: render-to-video can also queue up preset switching based on time. This is in addition to the existing preset-channel-mapping options found under Hotkeys, giving very fine control over both note appearance and backdrop for the duration of your midi file. [img]{STEAM_CLAN_IMAGE}/38079779/12b4fa9676005701c7e65a9c74cc4228e4a6bfd7.gif[/img] [h3]Caveats, warnings, limitations and other information[/h3] Render-to-video works via saving out each frame in Keysight to an image, and then compiling these images to a video using an FFMPEG-based subprocess. This means that the required disk space scales with the number of frames you'd like to render; really long midi files (30+ minutes) at 4k60 might even break into the 100GB of free space territory. Please ensure you have enough disk space before committing to a render! An estimate is given underneath the render button. Speed is very much dependent on settings. On my own machine (3900X + 2060 super, Samsung 970 Evo 1TB NVMe drive) with the same Keysight preset and the stock 62 second midi: [list][*]18.59 seconds, with the fastest possible render settings (unusably potato 720p30) [*]92.30 seconds, with stock render settings (a very nice down-sampled 1080p60) [*]766.66 seconds, with the slowest possible render settings (completely overkill 4k60)[/list]Be aware that render-to-video operations will max out your graphics card for the render stage, and then CPU for the export stage. Expect the fans to kick up if you're on a laptop! Of course, this is the first deployment of a big, complex new system. In beta testing, we've identified and squashed a lot of bugs but I'm sure there'll be plenty more! If you run into any strange behaviour, the first step is to check Log > Other for information on what exactly happened. You can also enable debugging mode via System > Interface to view and log more nuanced data. If you cannot resolve the issue with this information, please post the midi file you used and a screenshot of your log after the failed video render in the Steam community discussions under Bug Reports, or in [url=https://discord.gg/EHuJKU9393]the Discord![/url] [img]{STEAM_CLAN_IMAGE}/38079779/7afba9471e2ba5b4cdbacce1b6d3dd94a48b525d.png[/img] [h3]A special thank you[/h3] Render-to-video would not have been possible without an incredible amount of work from [url=https://heap.wtf/]HeapUnderflow[/url]. Heap produced two tools at my request to fulfil two functions: convert a midi file into a big list of events with an accurate timestamp in seconds, and a wrapper for FFMPEG which can be called within Keysight in order to combine frames into a video with an audio track. Both of these tools ([url=https://gitlab.com/HeapUnderflow/vidgen]Vidgen[/url] and [url=https://gitlab.com/HeapUnderflow/json_midi]Json_Midi[/url]) are available as standalone, open-source free tools if you have any need for them! I would also like to thank EagleJS, our resident macOS porter, for his tireless work fighting through a million compile errors to get all these things working. Without Eagle, it's safe to say that macOS support would still just be a distant dream! [h1]Light bars[/h1] I mean I'd have liked to call them "light sabers" but apparently that name is taken. "Light bars" are the first of many planned "Widgets"; extra preset elements outside of dynamic effects or static backdrops. [img]{STEAM_CLAN_IMAGE}/38079779/fad85c1f11e27f6d999d68fee146e91755b18314.gif[/img] Light bars are incredibly flexible, and come in templates similar to Particles and Pulses. A preset can contain any number of light bars, and each light bar can contain any number of five sub-components:[list] [*] [b]Cores:[/b] simple emissive bars [*] [b]Plasma:[/b] a bright line which displaces from the middle point up and down [*] [b]Wisps:[/b] the most configurable element. Often used to create evaporating smoke, but highly flexible [*] [b]Gradients:[/b] a simple, curve-able surface that fades out with distance. Can hue shift vertically [*] [b]Lights:[/b] static rectangle lights. These can be very performance expensive, watch out![/list] On top of light bars being hue-shift-able based on X-axis position and having note activity responsiveness for many variables, I figured: why lock light bars to the expected place on the keyboard? So all light bars can be freely snapped to the top/bottom/left/right/middle of the active area, and sub-components can be further offset within the system. This leads to a bit of a dilemma: should it still be called a "light bar" if it's no longer a light bar? All this flexibility means that very unorthodox and highly stylised presets are possible using carefully positioned light bars. For example, the new default preset "Synthwave" is almost entirely light-bar-driven, despite not being that glow-y or laser-y at all! [img]{STEAM_CLAN_IMAGE}/38079779/b70badd21a10a425f2d4832c800e679d96c09e8f.png[/img] While I'm talking about light bars, I do want to mention the negative stuff: light bars will typically have a 0-10% GPU performance penalty in any preset, and light bars containing "light" subcomponents can cost much more. Additionally, Gradient objects have a "multiply" blending mode which is only available on the Windows platform due to limitations in Apple's Metal graphics API, and so the "Rainbow shifter" template and "Spectrum" default preset are not available on MacOS, sorry! [h1]Other improvements[/h1] Of course, that's not all! There's a ton of smaller changes and improvements too. Check the [url=https://egglyberts.live/keysight/changelogs/1-5-0.txt]full changelog[/url] for absolutely everything, but here are some of the best ones: [h3]More default presets and particles[/h3] We have four new default presets: Quicksilver, Water, Spectrum and Synthwave [img]{STEAM_CLAN_IMAGE}/38079779/2d5f5daf64db23e4fbe1f702665f300c71e376c8.gif[/img] Sandstorm and Basic Spray have been slightly adjusted to be more reliably cool in the randomizer, and there are four new particle templates: Column, Burst, Geyser, and Tendrils! [img]{STEAM_CLAN_IMAGE}/38079779/d2e3abb9bd189b50d6de864f260639810a162c9a.gif[/img] [h3]Better graph interactions and copy/pasting[/h3] The modifier keys for interacting with graph variables have been expanded! Holding Alt while dragging with disable snapping while alt is held; holding Ctrl/Cmd will "translate" the whole graph around the bounds; holding Shift will "stretch" the whole graph centred on the "opposing corner" (so the right max handle will stretch to the bottom left corner of the graph, left min handle will stretch to the top left corner). I know these modifier keys aren't sexy, but they ARE very useful for rapidly adjusting effects while keeping the same "ratio" between variables. [img]{STEAM_CLAN_IMAGE}/38079779/54f8da604c3979c929245d28df8162bad1a8a4cd.gif[/img] Graphs and sliders also finally feature hover-based copy/pasting! Simply hit Ctrl/Cmd+C while hovering over a variable and it will be stored. Ctrl/Cmd+V over another variable to paste. Nice and familiar! This function does ensure you do not copy out-of-bounds variables into something (so, you cannot copy -10 into a slider which only support 0-1 values), but there is a lot of wiggle room in many graphs and sliders for "silly values". If you copy particle-count into note-light-brightness, I am not responsible for your burnt retinas! [img]{STEAM_CLAN_IMAGE}/38079779/0f793e2bf0a717c16ed4ab7eeb6ff1b73634f1cc.gif[/img] [h3]Other cool stuff[/h3] [list] [*] Presets can now be cycled through using - and =, or left/right bumper (L1/R1) on controller [*] The P key will now toggle midi file playback [*] Flare pulse template is now MUCH cooler [*] Pitch bend support is now disabled by default, but also now implemented correctly [*] Changed menu spacing to more clearly show Core as being separate to Effects inside presets [*] Changed particle note-wind force calculation to allow for interesting attractive forces without causing "explosions" (showcased in the new Tendrils template) [/list][h1]Official Discord[/h1] This has been a long time coming, but Keysight now has an [url=https://discord.gg/EHuJKU9393]official Discord server![/url] If I'm awake, I'm typically on hand to provide help to anyone who needs it here much faster than I can notice a Steam Community notification. [url=https://discord.gg/EHuJKU9393]The Discord[/url] also has channels to show off your presets and content, so get sharing! I find all the creative activity and awesome stuff being showcased to be enormously energising; I really should have set this up sooner... [h1]What's next?[/h1] The more I work on Keysight, the more ideas and goals I have for it. Two years on Steam is a long time, but I'm not even close to being "done" and nor do I want to be! I'd like to outline some of the ideas I have for where to focus development efforts next, but please be aware that these are not solid plans and I reserve the right to switch focus to something else if it is suitably shiny and distracting. [h3]1.5.1 plans[/h3][list] [*] [b]Light bar pedal-driven activity factor switch.[/b] This one is nice and easy, but I'm locked into the release candidate so cannot fit it into 1.5.0. The idea is to allow light bars to alter their activity-based parameters based on sustain, sostenuto or soft pedalling, giving an alternative pedal visualization to the damper simulation (which is now obscured by some light bars!) [*] [b]An actual loading screen.[/b] We're starting to get enough default resources that need to be loaded at boot that just leaving Keysight on a blank, hanging black screen feels like it's broken[/list][h3]1.6.0 plans[/h3][list] [*] [b]A complete menu overhaul.[/b] Yep. Again. By far and away the biggest issue Keysight suffers from is poor user experience. I'd like to spend a lot of time planning and completely rebuilding the entire menu from the ground up. I already have some mockups posted in the Discord that I would greatly appreciate feedback on, but the general changes may include: icon-based tabs; drag-and-drop preset organisation including folders; "template" versus "custom" mode for each effect (removing the need for basic/advanced menu mode); a global preset colour which can be then overwritten by specific effects... [*] [b]Rework the randomizer.[/b] It's a spaghetti monster right now, and I'd like to completely rebuild it from the ground up to be more reliable, faster, have better options and fit into future automation-triggerable per-module randomization [*] [b]Screenspace layout mode.[/b] This one is hard to explain, but right now Keysight has one set of actual coordinate data for positioning the camera, and I would like that data to be a secondary camera mode with "screenspace" being the primary one. "Screenspace" layout mode would allow you to define "I want this small amount of border at the edges, I want the piano to take up the bottom 15% of the screen, I want the height to terminate at 70% the way up the screen, and I want notes to take 3 seconds to travel their distance" and Keysight calculates the correct "actual values" to used based on your window resolution [*] [b]More widgets![/b] Starting with a session note counter UI, and positionable spotlights[/list][h3]Beyond 1.6.0[/h3] These are especially hazy, but this is the kind of stuff I'm thinking about![list] [*] [b]Include audio file playback with midi playback.[/b] [*] [b]Really in-depth device / track / channel / control ID midi mapping to presets.[/b] Including the ability to map one "input" control ID into a different "output" control ID used in Keysight, specifically targeted at allowing drum beats to be moved into spatially-relevant positions as opposed to their typical random-lower-register position. Also may look at supporting multiple midi tracks playing at the same time cleanly, but that's a huge task and would require "replacing the foundations" in Keysight. Still, moving into not-specifically-piano visualisation is on my to-do list! [*] [b]Overhaul the Stats system.[/b] I'd love to include pedalling stats there too, and generally have better session management and a session history, average note velocity, etc. [*] [b]Rework websockets, hotkeys and automation.[/b] All those systems are ancient and bad and terrible to use, and really need a full rebuild. [*] [b]Rebindable keyboard and controller hotkeys.[/b] [*] [b]Option to attach note names to notes.[/b] With configurable note naming of course; enharmonic spelling is important! [*] [b]Native Twitch chat control.[/b] [*] [b]Native and user-friendly preset sharing.[/b] [/list] Happy Keysighting <3