The visual engine

A Direct3D 11 stage that never holds up your MIDI

The stage runs a game loop of its own on a thread of its own: 16-bit HDR, multi-level bloom, up to 24,000 particles and an 88-key keyboard shaded by HLSL. A heavy frame costs frame rate — never latency, because your notes reach the sound engine and the renderer on the MIDI callback thread itself.

Direct3D 11 · Vortice.WindowsHDR 16-bit + bloom60 / 120 / 144 / 240 FPSHLSL · ACES filmicWARP & WPF fallback
The GPU stage running the Galaxy Voyage presetRendered in-app
Galaxy Voyage, drawn by the GPU engine: rainbow trails, a cosmic ambient layer and the lit keyboard.
240FPS target on the GPU stage
24,000particles in one frame
12HLSL shader entry points
6 + 6shader backgrounds and hit-line styles

The render loop

Why the picture can be heavy and the playing still light

  • One game loop on its own thread owns the ID3D11Device and its context, at 60, 120, 144, 240 FPS or unlimited — 144 by default.
  • MIDI input goes to the synthesizer and to the GPU engine on the callback thread, so notes and pedals keep the order they arrived in and never wait for the UI dispatcher.
  • The render thread receives the running song, the held keys and a clock extrapolated by never more than 50 ms.
  • OPEN GPU STAGE WINDOW opens a flip-model swap-chain window with optional VSync and F11 full screen — for a second monitor, a projector or OBS.
  • If Direct3D cannot start, the WPF renderer takes over and General → GRAPHICS ENGINE says why; a machine with no compatible card uses WARP — the same shaders, just slower.
Electric Storm: speed lines and arcs between held keysGPU stage · Electric Storm
Electric Storm: the same engine, a different effect family — speed-line trails and electric arcs joining the keys you hold.

Effect families

Every family of the software engine runs on the GPU

Falling trails

Glow, Sparkles, Speed lines, Blur, Ribbon, Rainbow and Stream, plus ghosting behind the note.

Hold effects

A bar, a breath, a vibration or an electric arc joining the keys you keep down.

Release effects

Six ways for a note to leave the stage when you let go of the key.

Impact waves & flashes

Ring, Shockwave or Ripple, with Flash, Lightning or Plasma driven by how hard the note was hit.

Bursts & morphs

Five particle bursts and five note morphs — Shatter, Melt, Absorb, Bounce and Star.

Ambient layers

Energy, Nature, Light and Cosmic, each switchable on its own, plus acoustic motes, guide lanes and pedal glow.

Notes

Every note parameter, on one page

GroupWhat you can set
StyleFour: Solid, Neon outline, Glass, and Fire with an animated burning texture.
ColourFive modes: gradient by pitch (six palettes or custom start/end colours), by hand with a movable split point, by MIDI track with an eight-colour table, rainbow by pitch and rainbow by time.
ShapeWidth, corner radius, minimum length, gap between notes, 3D shadow, the note name printed on the bar, tint, bloom, border brightness and thickness, leading-edge glow and refraction.
MotionFall speed and direction — Down falls to the keys and sinks under the hit line, Up is born at the key with the note and rises out of the stage — plus shimmer and landing glow on the GPU stage.
Smart modulatorsVelocity, octave, keyboard zone, pedal, tempo and audio reactivity feed the effects.

All of it lives on the Notes page of the design dock, and every change applies live.

Ray-traced keyboard

Eighty-eight keys shaded like a product render

The keyboard is drawn by a shader, not a bitmap: a Cook-Torrance GGX BRDF with Smith visibility and Schlick fresnel, a softbox with a real penumbra, contact occlusion inside the gaps between keys, image-based lighting from the environment, coloured light thrown back by the keys that are sounding, and an ACES filmic tonemap.

  • Key styles Classic, Studio 3D and Glass, with key height, black-key length, key labels, lid shadow, the red felt strip and how far a key dips when pressed.
  • Quality Off / Fast / Balanced / Cinematic plus key light, shadow, occlusion, gloss, rim, emission, exposure and camera tilt.
  • On the GPU stage those sliders go straight into HLSL and are re-applied every frame; the quality selector shapes the software renderer, which bakes the keyboard once and repaints a small tile per sounding key to hold 60 fps.
  • Keys of sounding MIDI notes light up as well, not only the keys a player presses.
Neon Violet, the default stage, with a held chordGPU stage · Neon Violet
Neon Violet, the default look: hold effects join the keys of a chord that is being held.

Backgrounds & hit line

A backdrop that can stay out of the way, or take part

  • Solid colour, your own picture (PNG, JPEG, BMP, GIF, TIFF) with a 0–100 dim so the notes stay readable, or pure green for keying.
  • Six GPU shader backgrounds — Aurora, Nebula, Prism, Ember Haze, Ocean Flow and Retro Grid — each with intensity, speed and base colour.
  • Six hit-line motion styles — Pulse, Sweep, Twin Comets, Spectrum, Electric Arc and Ripple — with their own intensity and speed sliders beside the halo colour.
  • Aura gradient, stars with shooting stars, guide lanes, vignette, horizon glow and light beams, plus halo colour and line.
  • Four independent ambient layers — Energy, Nature, Light and Cosmic — with spotlights inside Light; all off by default so the stage stays clean.
A user-chosen picture behind the keysBackground image
Your own picture behind the keys: centre-cropped to fill the frame without stretching, dimmed 30/100 by default so the notes stay readable.

Only on the GPU stage

Six things the software renderer cannot do

Note shimmer — a band of light drifting down the body of a note, carrying the note's colourLanding glow — light gathering on the key a note is about to touch, beautiful and useful for practiceHalo light pulses — three bright heads running along the hit line in the Pulse styleShooting stars crossing the star field behind the notesSpotlights — three soft stage lights swaying with the musicHold-stream particles in the family of the burst you chose: embers, water splash, fireworks, confetti or dustParticle physics decoupled from the music clock, so slowing the tempo never slows the sparks

Motion, timing and the layers that stay vector

Every animation — falling notes, petals, the backdrop, panels moving — runs on one vsync clock (FrameClock), so nothing judders and no frame is drawn twice; the clock lets go when the stage is at rest. A motion level of Off, Calm or Full applies to the whole interface and honours the reduce-animation setting of Windows.

The staff layer, the hand marker, the camera picture, the watermark and the key counter / FPS readout stay WPF vector layers composited over the GPU frame — sharp at any resolution.

What the stage does not do yet

There is no particle compute shader, no depth of field, no velocity-buffer motion blur and no camera keyframing. A 3D perspective camera is not supported either: the stage is a flat piano roll with slight parallax.

Where these settings live

General → GRAPHICS ENGINE

GPU frame rate
60, 120, 144, 240 FPS or Unlimited — 144 by default.
VSync
VSync in the GPU stage window, on by default.
Status line
Names the adapter in use and how long the shaders took to compile — or says why the software renderer took over.
Belongs to the machine
Applying a preset never changes these; a settings file that names the old Software engine is moved to the GPU when it loads.

Pictures

The same engine, four looks

Click any picture to open it full size. Every frame is rendered by Keyflow in CI.

Neon Violet — the default stage
Neon Violet — the default stage
Galaxy Voyage — rainbow trails and a cosmic layer
Galaxy Voyage — rainbow trails and a cosmic layer
Electric Storm — speed lines and arcs between held keys
Electric Storm — speed lines and arcs between held keys
Live play — only the notes you play, with the transport bar below
Live play — only the notes you play, with the transport bar below

See it move on your own machine

The GPU stage is the default from the first launch — there is nothing to switch on.