WhiteCat was created and developed by Christoph Guillermet from 2009 to 2014.
After several years of inactivity, Jacques Bouault (arpschuino.fr) resumed development in 2026.
The first priority was to modernise the technical foundation: replacing obsolete libraries (Allegro, OpenLayer, Audiere, MidiShare) with SDL2 and RtMidi, and upgrading to GCC 5.1.0.
WhiteCat now compiles and runs again on a modern machine.
Functional development is resuming progressively. This page lists the changes in version 0.9.x, the migration status, and known bugs.
The major undertaking of this release is the Linux port. WhiteCat now compiles and runs on Linux x86_64 (tested on Linux Mint). An AppImage and a self-contained archive are produced. The fixes below are genuine bugs, which also benefit Windows and the upcoming Raspberry Pi port.
Older-SDL compatibility: KMOD_SCROLL (SDL β₯ 2.0.18) and the DPI hints SDL_HINT_WINDOWS_DPI_* (SDL β₯ 2.24) are now guarded by version checks, allowing compilation against SDL 2.0.10 (Ubuntu 18.04). The Linux binary is thus compatible with glibc 2.27, and runs from Mint 19 / Ubuntu 18.04 / Debian 10 up to the most recent distributions.
Path separators: 18 path constructions used the hardcoded Windows separator \ (saves, audio, import/export, plans, ressources). On Linux these backslashes became literal characters in file names (saves\last_save instead of saves/last_save), breaking show saving and reloading. All replaced with / (valid on both Windows and Linux).
Undersized Arduino arrays: digital_limit (127 β 128) and analog_limit (63 β 64) did not match the serialization size used by fread/fwrite (128/64). Loading a show read one element too many, causing a memory overrun (silent corruption on Windows, crash on load on Linux).
Buffer overflow in time display: a 4-byte buffer was too small for the "%.2f" string (always β₯ 5 bytes). The overflow occurred on every refresh, causing an immediate crash on Linux. Buffer enlarged and time values clamped.
Crash diagnostics: added a POSIX signal handler (SIGSEGV / SIGBUS / SIGFPE / SIGABRT) that writes the call stack (symbolized backtrace) to wc_debug.txt, greatly easing the diagnosis of crashes on Linux and Raspberry Pi.
Glitch-free OGG/FLAC loading: loading an OGG or FLAC file no longer briefly cuts the audio of other players currently playing. Files are loaded into RAM then decoded incrementally in the audio callback, without ever blocking the main thread.
Configurable RAM limit (default: 300 MB, adjustable from 50 to 2048 MB in CFG menu β core cfg β Audio RAM OGG/FLAC). Beyond this limit, the old behaviour applies (possible glitch on load).
MP3 playback: MP3 files of any size now play correctly (frame-by-frame streaming). Previously playback stopped after a fraction of a second.
Audio file duration: the total duration displayed is now correct for all formats (MP3 CBR/VBR, WAV, OGGβ¦).
Clickable seekbar: a seekbar can now be clicked directly to reposition playback.
Cue In/Out in non-loop mode: cue In and Out points are now usable in simple (non-looping) playback mode.
Double-click on Pan and Pitch: double-clicking the pan or pitch fader resets it to centre.
Audio folder selection: the source folder can now be selected with the mouse via a scrollable dropdown menu.
Continuous crossfade (no fader re-pickup): new Continuous xfade option in the MIDI PRESETS & OPTIONS tab. Once enabled, the X1/X2 faders let you chain crossfades without ever having to re-pick them up: bringing both faders down triggers a crossfade (preset β stage), bringing them back up automatically triggers the next crossfade, and so on indefinitely. In classic mode (option off), the usual behaviour is kept (WhiteCat waits for the faders to be brought back up β "GET UP MIDI FADERS" β before accepting a new crossfade). The option is saved in the show file.
Dedicated "MIDI CLOCK" tab: the MIDI clock settings (BPM, encoder, stored-tempo grid) are moved to a 4th tab, freeing space for the options in the MIDI PRESETS & OPTIONS tab, now laid out in two columns.
Fix: MIDI CLOCK wheel cursor position at startup β the orange dot appeared at the top-left (0,0) on opening. Its position is now recomputed on each render from the wheel centre.
Inline editing of descriptions: double-clicking the first or second description line of a cue lets you write or edit the text directly in the cue list (in addition to the classic Name mode).
Name on creation: the cue-creation confirmation window offers a field to enter a name or description.
Wider buttons: the bottom oval buttons (Stage Β±, Preset Β±, etc.) are widened by 3 px so the "Preset+" label fits fully.
More readable grid: the separator lines (columns and rows) are slightly darkened for better contrast.
Name field for REPORT: recording a stage level into a dock via [F3] + click now shows a "Name" field in the confirmation window (like [STORE]), and the entered name is applied to the dock.
Confirm with F3: the confirmation window of a REPORT is confirmed with [F3] ([F1] stays reserved for STORE).
Scrollbars: the +/- circles of the lists (import/export and shows) are replaced by a proper scrollbar, identical to the audio window one (track, arrows, mouse-draggable thumb, mouse-wheel scrolling). It only appears when the list overflows the visible area.
Cleaned-up element selectors: the entries for removed features (iCAT, MOVER, empty slot) are gone from the binary-save and PDF-export selectors. The binary selector is reorganised into 3 balanced columns, with no gaps. Save indices are preserved: full compatibility with existing show files.
Reorganisation: the MENUS window, whose columns were uneven and gapped after some buttons were moved elsewhere (Freeze, Exclude, Help), is laid out cleanly into 4 columns of 4 entries + 1 column of 5.
CPU reduction β smart ticker: CPU usage significantly reduced thanks to an adaptive idle mode and a three-tier cap: 60 fps while the user is interacting (500 ms after the last mouse/keyboard event), 25 fps during automatic animations (LFO, chasers, crossfades, fader dampers), and near-idle mode (100 ms) as soon as no animation is active. Measured results: CPU 0.4β0.8% at rest, CPU 7β8% with active LFOs.
MIDI dot connector line: the line linking faders to their MIDI feedback dot now stops exactly at the edge of the circle. Fixed on: faders, grand master, crossfaders X1/X2 in the cue list.
Circle thickness: Go/GoBack/DoubleGo buttons now display with the correct 2 px border.
Cue list graduation: removed spurious tick marks displayed beside crossfaders X1/X2.
Debug overlay: removed the permanent debug display visible in the main interface.
Flash of the 6 circles on activation: the 6 circles in the banger window now flash red (like the "bang it" button) when active. Two fixes: display (pulsed red colour instead of the static hover colour) and interaction (a direct click on a circle now triggers the visual flash).
Value validation (val1/val2): each banger type now checks the bounds of entered values (fader 1β48, MIDI channel 0β15, audio player 1β4, audio file 0β126, chaser 1β128β¦) and shows a WCat-style popup if a value is out of range. Corrupted values already present in show files are automatically sanitised on load.
Fix: delay save size β a size error in the banger delay serialization read/wrote twice as many bytes as needed. Existing files remain readable; only the actually-used portion is taken into account.
val1/val2 display: the value, action and delay columns no longer show for empty events (type 0), removing the appearance of garbage values in unconfigured rows.
Split into independent translation units β Phase 4: C++ files previously included via #include in MAIN.cpp are being extracted as separately compiled TUs. Files extracted in this phase: faders_core.cpp, arduino_core.cpp, arduino_visu.cpp, CFG_config_panel.cpp, midi_functions.cpp, banger_core.cpp. Full build time reduced to 25 s (from 70 s).
Text rendering fix in separate TUs: after extraction into TUs, all text disappeared in every window except the main one. Root cause: wc_cache and wc_cache_mutex were declared static in graphics_backend.h, creating a distinct symbol per TU. Fixed via the WC_SKIP_GLOBALS pattern (single definition in MAIN.cpp, extern in all other TUs) and adding graphics_backend.h as a PCH dependency in the Makefile.
Graphics migration: Allegro + OpenLayer replaced by SDL2.
Audio migration: Audiere replaced by SDL2_mixer + minimp3. Supported formats: WAV, MP3, OGG, FLAC.
MIDI migration: MidiShare (obsolete) replaced by RtMidi.
OGG and FLAC playback: in addition to MP3 and WAV, OGG and FLAC files can now be played.
Time display in h:mm:ss: position, total duration, and In/Out points are now displayed in hours:minutes:seconds format.
Logarithmic volume curve: the volume fader follows a cubic (vΒ³) curve, better suited to human perception.
Multiple selection: several DMX interfaces can be active simultaneously (ArtNet, Enttec Open, Enttec Pro, Sunlite). The old "Double DMX" button is removed; each interface is an independent toggle.
DMX King UltraDMX2 Pro: fixed β the interface was detected but no DMX was output.
Enttec Pro: detection extended to generic CDC drivers (in addition to FTDI).
C++ sources: plot.cpp, generate_strings_arrays.cpp, dmx_enttec_pro_FTDI.cpp, help_2.cpp, WhiteCat_private.h, debug_informations.h, midi_affectation_table.h, enttec_pro_dmxin.exe.
Old libraries: sources and binaries for Allegro 4.4.2, OpenLayer 2.1, Audiere 1.9.4, MidiShare 1.91 removed from whitecatlib/.
Obsolete DLLs: alleg44.dll, audiere.dll, libopenlayer.dll, mshare32.dll, msMMSystem.dll. Stray log msMMSystem.log (65 MB) removed.
Compiled with GCC 5.1.0 (portable MinGW in tools/).
100% portable build via relative paths (build.bat).
VSCode integration (build Ctrl+Shift+B, debug F5).
Modified files carry the signature Jacques Bouault - arpschuino.fr - 2026 in their header.
clang-format reformatting (4 spaces, LLVM style, col. 120) on modified files.
Channels space (channels, patch, list)
Faders space
Cuelist (sequential)
Banger
Chasers
Trichromy
GridPlayers
AudioPlayers
Minifaders
CFG menu (configuration)
Echo window
Video Tracking
Draw
Light Plot
Audio Wave (waveform window)
This list dates from version 0.8.6 (Christoph Guillermet, 2014). Some bugs may have been resolved or changed by the SDL2 migration.
Plan name with spaces: causes problems reading plot data (scanf issue).
Live patching from the plot: there is a conflict between circuit and symbol manipulation that can cause issues when patching entirely from the plot. Using it as a supplement is fine.
Manual fader ratio when engaged prevents Go from being triggered by mouse click or spacebar.
Negative times displayed for some crossfades (does not affect execution, display issue only).
Raspberry Pi (ARM64) port β the Linux build is ready, remaining work is to compile and validate it on the Pi
Mover, for moving heads
Channel times
Wizard: include faders, and dynamic content in channel functions
Pick-up function (grab a specific chaser, fader, or MIDI config from another show)
Expand to 1024 channels
Add 16-bit crossfades
Customisable keyboard mapping
Universal MIDI mapper with built-in presets
Timeline
0.8.6 Spring Power
Improvements
Performance:
Saves and layouts:
Audio:
Banger:
Open source:
The GitHub repository is open if you want to help bring WhiteCat to Linux and Mac:
GitHub WhiteCat
Bug fixes
Bug fixes
CFG NETWORK: if the ArtNet server or client was not ON, WhiteCat crashed on rescan.
Audio crackling bug fixed; reverted to linear curve.
Improvements
First release July 14. WHITE CAT goes OPEN SOURCE and the licence system is removed! White Cat stays free!
New features
Changes
BANGER:
Added function to copy a banger to another.
Added DRAW and ECHO categories.
Windows category: window order reorganised. If you use this function in a show from a previous version, you will need to re-encode.
Sequences category: GO function, Set Blind.
GridPlayers: Snap fader, Next Step, Previous Step.
Faders: Set Fader as DCHan / Set Channel at Full / Set Channel at 0.
alias Community Release
New features
LightPlot: a built-in light plan editor.
16 customisable channel views.
Major ergonomic changes to window and menu navigation.
EXPERT mode added to skip confirmation dialogs (CFG MENU > General tab).
alias Xmas Release
New features