Welcome to the new Whirlwind Engine, powered by EX.

Introduction

If you are here, congrats on being selected as a power-user with beta access to our products and software. We're developing the new engine rapidly, which means lots of regular updates as features coalesce. This documentation will serve as a portal for us to describe how things have changed, what we are working on, and how they can help you design more compelling experiences by employing simple web technologies to create presets and visualizations. Below, we'll briefly describe what is new.

All of our products will be automatically discovered by the engine and made available to you on the 'devices' tab. For more detailed information about the connected device, you can press the settings (gear) button to expose a panel with additional product information. Currently, we only connect to and detect Whirlwind products, but we are working with external partners to expand the supported devices in the future.
Since there are so many available lighting systems, we've designed and patented a peripheral lighting rendering flow that uses HTML5 Canvas + Javascript for controlling lighting on all peripherals in unison. There will be more details in this document as you continue to read.
We allow two types of effects, but under the hood they are created and, for the most part, behave identically. Media effects grant direct access to EX analytics such as audio RMS level, frequency information, video color and information, and much much more. Idle effects are drawn on all peripherals when the user is not or does not want to engage a Media Effect (such as games, videos or music).

Download

You can download the engine installer here:

Release Notes

We are working hard to make sure that both our lighting engine and our EX Analytics core meets the demanding requirements we have set for gaming. This includes support for 2K content at framerates exceeding 100fps. If you have feedback that you'd like to communicate to us, please use the beta channel on Discord to propose any questions or concerns. You can join the engine beta channel here:

Join Beta Channel

If this link doesn't work for you, please contact support and they will make sure you get an invite code. We've limited this initial pilot to a fixed number of invites.

Engine Overview

The engine presents a new way to manage peripherals and effects. Products are auto-detected, and present on the devices tab when discovered. For each device, you can pick a position and scale to control which part of the active effect is rendered on the internal LEDs.

Idle vs Media Effects

An important principle to understand, is that there are two types of effects. Idle effects, which are rendered when there is no audio playback detected on the system, and media effects, which are meant for when audio and video content is actively being played back on the system. You can configure the engine to automatically switch which visual effect is rendered on all of your devices based on what you are currently doing.

Idle effects do not use audio or video or information, and are generally more traditional (although highly customizable). Rainbows, Hue Cycle, and many things are possible using the idle effect infrastructure. Media effects have deeper access to our analytics system, and can sample portions of the screen to create incredibly deep ambient and intelligent effects based on instantaneous audio and video parameters.

Selecting a Idle Effect

On the effects tab, you can select your primary idle effect with the appropriately named dropdown.

Selecting a Media Effect

You can also choose a media effect to render during video by choosing on the effects tab. The best way to view these effects is to have video and audio playing while choosing which look you prefer.

Vortx

Vortx creates wind and heat effects synchronized with the action on screen. To do this, Vortx analyzes the audio and video of your game to trigger bursts of air effects.

For proper operation of Vortx, you'll need to ensure that media effects are enabled (they are by default) and that audio and video capture are functioning correctly on your system.

Front panel knob.

On the front of Vortx, you can control the sensitivity of the processing, as a volume knob for 'air level' of sorts. As you reduce this knob, Vortx becomes more picky about content and outputs less air.

The Vortx main knob is also a button. Pressing the knob cycles through three values for Vortx:

  • Air Intensity Default
  • Heat Intensity
  • Disconnected Hue

You can press the knob to cycle between these three values and turn to set to your liking. The values you choose are visible both on the LED ring of the knob and within the settings pane of the engine. After 5 seconds of not adjust the knob, it will switch back to its default 'Air Intensity' function. Since this is most often adjusted, you need not press the knob to set this value; simply turn to adjust to your liking.

Element

Element is a mechanical keyboard designed for ambient immersion, insane particle effects, and hardcore performance.

Additionally, we support a growing list of intelligent game extensions to create visual effects across your entire rig when you take damage, increase health, or see fire in the frame. We are actively developing this infrastructure and it has been a crucial part of forward development for our team.

Scan Rate 1300hz - 1400hz
Lighting High-emission per-key RGB [Intelligent]
Debounce None [Zero-Bounce Technology]
Rollover N-Key
Body Material Aerospace-Grade Brushed Aluminum
Actuation Distance 1.7mm
Actuation Force 50G
Contacts 24-carat Gold
Key Configuration Full 104-Key ANSI
Available Keytypes Linear, Clicky, Mixed

Ex Key

You can use the function + pause/break key to show or hide the Engine. Pressing it once brings the Whirlwind Engine to the foreground, and pressing it a second time or while already in the foreground will minimize the Engine to the task tray.

Fn+Media Controls

Element incorporates standard brightness and media controls.

  • Brightness Up
  • Brightness Down
  • Track Prev
  • Track Play/Pause
  • Track Next
  • Vol Mute
  • Vol Down
  • Vol Up

Effect Development & Locations

All installed effects are parsed on startup and made available to the lighting subsystems. If you'd like to create your own effect, you'll need to place it in the 'Effects/idle' or 'Effects/media' subdirectory, and give it a unique name with an .html extension. After that, you'll need to restart the engine for that effect to be picked up and available for selection.

  • Effects Local Effect Location
    • Static (Idle) Installed Idle Effects
      • Rainbow.html Idle Script
      • Hue Cycle.html Idle Script
      • Terminal.html Idle Script
    • Dynamic (Media) Installed Media Effects
      • Call of Duty: Warzone.html Media Script
      • Fortnite.html Media Script
      • Natural.html Media Script
  • WhirlwindEngine.exe Engine Executable

Effects in the "Dynamic" directory will automatically inject the variables detailed in the API reference documentation. These analysis variables are not injected or supported in effects contained within the "Static" directory. If media effects are enabled on the effects tab in the UI, the system will auto-switch to the selected media effect only when audio/video content is detected. If audio data is silence, the system will fallback to the selected idle effect.

Content & Game Extensions

Content extensions allow us to drive extra features for games, such as health, shields or really any other metered item on the hud. Tagged extensions are automatically enabled when relevant content is being consumed on the target machine.

We are currently expanding our internal analysis system to support an increasing number of titles and context awareness methods. (Text, meters, etc) The system's extensions are driven largely by a JSON document that contains some helpful positional information related to metering, and tag associations for the relevant titles.

If this is interesting to you, or you'd like to see a specific game supported with internal extensions for health/damage or an arbitrary metering condition, please email support to make a request or reach out to the private Discord alpha group.

Effect Overview

Our engine renders effects in realtime, similar to the way a browser renders websites you visit. A simple hue cycle example follows.

                              
    <head>
    <meta description="Stock hue cycle."/>
    <meta publisher="WhirlwindFX" />
    <meta property="speed" label="Cycle Speed" type="number" min="1" max="10" default="2">
	</head>
                              

    <body style="margin: 0; padding: 0;">
  	<canvas id="exCanvas" width="320" height="200"></canvas>
	</body>
                              

    <script>
    // Get the canvas element from the DOM
    var c = document.getElementById("exCanvas");
    var ctx = c.getContext("2d");  
    var width = 320;
    var height = 200;
    var hue = 0;

    function loop() 
    {
      ctx.fillStyle = 'hsl('+ hue + ', 100%, 50%)';
      ctx.fillRect(0, 0, width , height);
      hue+=(speed / 4);
      if (hue > 360) { hue = hue % 360; }
    }

  	setInterval(loop, 20);
	</script>                          
                              

    <head>
    <meta description="Stock hue cycle."/>
    <meta publisher="WhirlwindFX" />
    <meta property="speed" label="Cycle Speed" type="number" min="1" max="10" default="2">
	</head>
    
    <body style="margin: 0; padding: 0;">
  	<canvas id="exCanvas" width="320" height="200"></canvas>
	</body>
    
    <script>
    // Get the canvas element from the DOM
    var c = document.getElementById("exCanvas");
    var ctx = c.getContext("2d");  
    var width = 320;
    var height = 200;
    var hue = 0;

    function loop() 
    {
      ctx.fillStyle = 'hsl('+ hue + ', 100%, 50%)';
      ctx.fillRect(0, 0, width , height);
      hue+=(speed / 4);
      if (hue > 360) { hue = hue % 360; }
    }

  	setInterval(loop, 20);
	</script>                          
                              

The Effect Plane

The result of a rendered effect is a 320px x 200px frame that is used to drive all connected peripherals. This frame, we refer to as the 'effect plane' and is visible on the 'Effect' tab in the engine. You can position peripherals on this plane, and in common terms, they will take the colors underneath them based on a selected scale and x/y position. If you select a device on the 'Devices' tab of the Whirlwind Engine, you'll see a position button in the bottom-right hand corner (a set of arrows). This allows you to place and move any device to a desired geospacial position on the plane.

This means that if you build a left to right 'sweep' on the effects plane, and place your devices in their repective areas in the software, the sweep will move left to right through all supported peripherals across your desk.