Introduction
DISCLAIMER: Building the PER|FORMER sequencer is not recommended for beginners.
This page is based on the original Westlicht build guide.
The lower part of this page also includes practical notes for building, launching, and using the local Desktop Simulator, including MIDI and Launchpad setup.
If you just want the browser-based build, use the published Web Simulator instead of the local desktop flow described below.
Sourcing Parts
To build the sequencer you first need to source all the required parts. The original build guide references the complete BOM, Octopart BOM, and assembly resources for the hardware project.
For the hardware build process and sourcing details, the original upstream guide remains the main reference: Westlicht Build Guide
Setup on macOS and Linux
Clone this repository:
git clone --recursive https://github.com/VinxScorza/performer.git
cd performer
Make sure you have a recent version of CMake installed. On Debian-based systems you may also need:
sudo apt-get install libtool autoconf cmake libusb-1.0.0-dev libftdi-dev pkg-config
To compile for hardware and allow flashing firmware:
make tools_install
Then set up the build directories:
make setup_stm32
make setup_sim
Setup on Windows
There is currently no native Windows build flow. The standard workaround is the Vagrant virtual machine, as in the original Westlicht documentation.
git clone --recursive https://github.com/VinxScorza/performer.git
cd performer
vagrant up
vagrant ssh
Build directories
After setup, build directories are available under build/[stm32|sim]/[release|debug].
Use release for hardware builds and debug for the Desktop Simulator.
Build for hardware
cd build/stm32/release
make -j
The sequencer build generates an UPDATE.DAT file suitable for firmware updates through the bootloader.
For full hardware assembly, flashing, and sourcing notes, refer to the original build guide: Westlicht Build Guide
Build for Desktop Simulator
cd build/sim/debug
make -j
./src/apps/sequencer/sequencer
Here, Desktop Simulator means the native local simulator build, distinct from the
browser-based Web Simulator published on the site.
The Desktop Simulator can use external MIDI ports. Run ./src/apps/sequencer/sequencer --midi to list
the available ports, then use options such as --midi-port, --midi-in, --midi-out,
--usb-midi-port, --usb-midi-in, --usb-midi-out, --trace-midi, and --trace-dio to route DIN and USB MIDI or inspect simulator traffic from the terminal.
Use none, off, or - to disable a default input or output assignment.
By default, the Desktop Simulator now starts with both DIN MIDI and USB MIDI disabled, so it does not keep probing missing MIDI devices unless you explicitly assign them from the command line.
In the current Vinx line, LP Note Style defaults to Circuit, so dedicated Launchpad Circuit editors are the normal reference workflow when you test Launchpad behavior through the Desktop Simulator.
Useful launch commands:
./src/apps/sequencer/sequencer --midi
./src/apps/sequencer/sequencer --midi-port "Your MIDI Port"
./src/apps/sequencer/sequencer --midi-in "Your MIDI In" --midi-out none
./src/apps/sequencer/sequencer --usb-midi-port "Your USB MIDI Port"
./src/apps/sequencer/sequencer --trace-midi
./src/apps/sequencer/sequencer --trace-dio
On macOS, some devices expose port directions from the device point of view. For example, a Launchpad Mini MK3
on the simulated USB MIDI port may need --usb-midi-in "Launchpad Mini MK3 LPMiniMK3 DAW Out" and
--usb-midi-out "Launchpad Mini MK3 LPMiniMK3 DAW In".
./src/apps/sequencer/sequencer \
--usb-midi-in "Launchpad Mini MK3 LPMiniMK3 DAW Out" \
--usb-midi-out "Launchpad Mini MK3 LPMiniMK3 DAW In"
In the current Vinx setup, the simulator-side USB MIDI workflow has only been validated with a
Launchpad Mini MK3 on macOS / OS X, since that is the only Launchpad currently available for local testing.
Current validation scope: Desktop Simulator USB MIDI is validated well on macOS / OS X with
Launchpad Mini MK3, but not yet across other Launchpads or operating systems.
The simulator also infers the Launchpad model from the selected USB port names, so a Mini MK3 is no longer exposed to the firmware as the old Mini Mk2 default device.
For Launchpad-style USB controllers, the simulator also mirrors the matching sibling input and output ports
(DAW / MIDI) when possible, so pad presses and initialization messages can still land
on the endpoint the device actually uses.
When a MIDI connection is active, the lower status area shows DIN MIDI ... and USB MIDI ...
indicators with states such as OFF, WAIT, and OPEN.
When --trace-midi is enabled, the terminal prints the incoming DIN and USB MIDI messages that actually reach the simulator, which is useful when testing routing, Launchpad input, or external controller behavior.
When --trace-dio is enabled, the terminal prints simulated CLK OUT and RESET OUT
transitions as they happen, which is useful for checking clock pulse timing independently from the UI rendering.
16-step Editing Mode (Experimental): BeatStep Pro + Launch Control XL templates
The firmware includes a dedicated 16-step Editing Mode controller path for 16-knob / 16-pad step editing on Note tracks.
For BeatStep Pro, import the provided MIDI Control Center template:
PERFORMERstep16_BSP.beatsteppro.
For Launch Control XL, use Factory Preset #1.
This controller path is currently experimental and still needs broader field testing.
Real hardware validation by the maintainer has so far been done only with Launch Control XL.
Treat the BeatStep Pro template/profile as supported-in-code but still pending dedicated maintainer-side on-hardware validation.
This mapping is designed for MIDI channel 9 and maps:
CC 13..20 and CC 29..36 to step knobs 1..16,
Note 41..44, 57..60, 73..76, and 89..92 to pad gates 1..16,
and CC 106/107 (on BSP: Ptn 1 / Ptn 2; on LCXL: Track Select < / >) to prev/next section.
Controller compatibility for this path is map-driven (not brand-driven): explicit USB VID/PID support is optional if a controller emits that same MIDI map on channel 9. If a device cannot emit this map, it requires a dedicated firmware profile.
In firmware, Prev + Next (controller-side, on BSP: Ptn 1 + Ptn 2; on LCXL: Track Select < + >) together toggle 16-step Editing Mode armed state. BeatStep Pro template download: PERFORMERstep16_BSP.beatsteppro. On Launch Control XL, use Factory Preset #1.
Armed mode forces loop to the visible 16-step window and enables knob/pad edits; disarming restores the previous loop range.
Target scope is the currently selected Note track: knob note editing is active only when the machine layer is Note, while pad gate toggle remains active on that same track across layers.
Current LED scope: firmware feedback is gate-focused. Step gate states are reflected on controller pads (and mode/section function buttons have feedback), while note-value edits from knobs have no dedicated LED rendering; knob-row LED behavior remains device-local.
Knob note editing works in a range equivalent to two octaves (-1V..+1V) quantized to the current scale; the current root is applied in the output path.
Architecture limit: only one external control workflow should be considered active at a time. Launchpad and 16-step Editing Mode are not intended for simultaneous concurrent control in the same session path. BeatStep Pro template download: PERFORMERstep16_BSP.beatsteppro. On Launch Control XL, use Factory Preset #1.
Architecture limit: the current firmware supports exactly one external USB controller at a time, and that controller must be connected directly to the module USB host port.
USB hubs, including externally powered hubs, are not supported. The current firmware architecture does not implement hub-based multi-device handling on top of the STM32 USB Host stack, so devices connected through a hub are not enumerated by the firmware and cannot establish a usable controller connection.
See also: Manual - 16-step Editing Mode and Manual - Controller Concurrency Limits.