Skip to content
sambanksPublic

About

A remixer for the Elektron Octatrack's OS: modules (custom DSP56300 effects, ColdFire mods, ports of community mods) composed into one firmware image built from your own 1.40C. No firmware distributed.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

290 stars

Watchers

10 watching

Forks

Repository files navigation

octabam

CI

An unofficial community remixer for the Elektron Octatrack's operating system, not affiliated with Elektron: pick the modifications you want and build them into one firmware image from your own copy of OS 1.40C.

A modification is a module (modules/<name>/). A named selection of modules is a remix (remixes/<name>/). make image REMIX=<name> composes a remix into a card-flashable image: it places the code, wires the hooks by symbol, refuses collisions by name, and proves every ported module against its author's own build byte for byte. No firmware is distributed here; every image is derived from the user's own 1.40C on the user's machine, and a built image must never be shared.

Every module is contributed by its author and credited in the table below. Pull requests are accepted: a module, a port of an existing mod, a fix, a doc correction. GitHub Issues take bug reports, module proposals and hardware test reports; each has a form (.github/ISSUE_TEMPLATE/) asking for the remix, image build, hardware model and steps to reproduce. The licence is MIT.

Unofficial firmware

This is unofficial firmware, not made, endorsed or supported by Elektron. Flashing it is generally safe and can be reverted by flashing the stock OS again (BUILDING.md section 7). Elektron is not responsible for any damage to your Octatrack. See Before you flash anything.

Start here

you want to read
put a remix on your Octatrack docs/guide/BUILDING.md: a fresh machine to a flashed unit, step by step, with the recovery path
see what remixes exist and what is in each remixes/README.md, then the remix's own page in remixes/<name>/README.md
see every module and how far it is proven the table below; each module's modules/<name>/README.md has the measurements
compose your own selection docs/guide/COMPOSING.md: a remix.py by hand
write a module or port an existing mod CONTRIBUTING.md (the contract), docs/contributing/MODULES.md (the guide), docs/contributing/TESTING.md (what the gates prove)
understand the firmware docs/firmware/ARCHITECTURE.md and its neighbours; docs/contributing/TOOLING.md for the tools
find any other doc docs/README.md

Quick start

docs/guide/BUILDING.md has every step. Section 0 is what to install first: on macOS the Xcode Command Line Tools (xcode-select --install) and Homebrew, then make setup-mac; on Linux or WSL2 make setup-linux. Then make emu-setup, make os && make recon, make image REMIX=<name> BUILD=1, and the flash from the card (section 5).

Effects: the bus

module author what it does proof
DELAY SERVER sambanks Multi-mode delay: CLEAN / pitched GRAIN cloud / REVERSE, tape wow. on hardware: Sam's MKII
REVERB SERVER sambanks Eight-line FDN reverb: ROOM/PLATE/BIG, shimmer, gate, mid/side width. on hardware: Sam's MKII
FX2 LOCK sambanks The FX2 chooser cannot change a track's effect: YES's key-table entry points at NO's close handler, so the select handler never runs. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_fx2_lock under the port, 4 Oct 2026
MODE DEFAULTS sambanks A MODE turned on the panel re-defaults the knobs around it (the manifests' ModeViews), on FX1 and FX2. on hardware: Sam's MKII (images 26/27, 15 Sep 2026)
RIG HOSTS sambanks A new part is born hosted: T1 FX2 = BusDelay, T5 = BusVerb, T8 = the stock DELAY, the rest SEND. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); a new project born hosted under the port
SEND sambanks Bus client: DEL into the delay, REV into the reverb, from any track. The default effect. on hardware: Sam's MKII
TEMPO BUS sambanks The TEMPO window lists and edits BusDelay's and BusVerb's knobs (UP/DOWN = row, A or B = value, LEFT/RIGHT = engine, FUNC + LEVEL = 0.1 BPM). on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_set; carried by image 88 on Sam's MKII
TEMPO SYNC sambanks ColdFire DRAM units: publishes the held MIDI note to BusDelay, and draws BusDelay TIME as a tempo division. on hardware: Sam's MKII

Effects: on a track

module author what it does proof
BBD JamCones Clocked BBD delay: compander, clock/3 filters, bucket noise, freeze, governor; FX2. on hardware: JamCones' MKII, BBDOB4 (remixes/test/bbd, BUILD 4), 17 Oct 2026
CHARACTER sambanks FX1 station: fold, saturation, tilt, compressor, width. on hardware: Sam's MKII
CHARACTER TXTR sambanks Character plus TXTR (Airwindows Pockey2): fold, texture, saturation, tilt, compressor, width. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026)
DEVILISH MaMarko The Devil Fish mods (Robin Whittle) for an OCTA303 track: twelve knobs read by the 303 voice; the DSP passes the audio through. on hardware: the owner's MKI, image DEVPR2 (BUILD 93, remix devilish, on 0x10), 22 Oct 2026: every knob of both pages, FX1 and FX2, an LFO on a knob moving the 303, a scene and a lock, a non-303 track passing, two 303 tracks for five minutes, save and reload. Before, in daily use in the acidtrack images up to ACIDV71 (on 0x1f / 0x1e). The Devil Fish engine is bit-exact in OCTA303's source simulator
DISTORX MaMarko SD-1 + RAT + Turbo RAT in one insert: MODE picks the pedal (OFF first), a 3 ms fade between them. on hardware: the owner's MKI, image DTXPR3 (BUILD 96, remix distorx, on 0x05), 22 Oct 2026: DISTORX on T1 for more than four minutes with four DISTORX at once on both cores (T1 and T2 kicks with DISTORX, T3 hats and T4 claps dry, T5 COMB FILTER + DISTORX, T6 COMB FILTER + DARK REV, T7 COMB FILTER + DISTORX, T8 MASTER), MODE changed while playing, OFF on re-selection, no clicks, by ear. Before, on 0x0a, image DTXPR1 (21 Oct): every knob in every MODE, FX1 and FX2, an LFO, a scene, save and reload. v10's loops (28 Oct) are not flashed
DLPROBE sambanks Measurement instrument: the demand loader's per-effect counters, in the track's audio. make check
EUCLID repeat98 Euclidean LP/BP/HP/notch/amp sequencer: swing, envelope, gate, random and loop. on hardware: Tested on Sam's MKII (16 Oct 2026) and radiohagen's MKII (21 and 25 Oct 2026): start/resume, multiple tracks and both FX slots.
EXTPROBE sambanks Measurement instrument: the highest window word a reverb on T8's FX2 writes, in the track's audio. make check
GATE VERB Emilie Gillet (Mutable Instruments), ported here A gated plate reverb (Griesinger topology, after the reverb stage of Mutable Instruments Clouds): amount, input gain, time, diffusion, tone, gate. One FX2 slot per instance. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_gateverb (dsp_host, against a float model of Clouds' reverb)
LOFI2 Bryan T Ring mod or frequency shifter, then sample-rate and bit reduction. on hardware: Bryan T's MKII, images 96-99 (Oct 2026, this tree): tracks 1 and 5, five instances at once; _bt_oct build 11 (12 Oct 2026, the 414-cycle loop): eight in SHIFT at once, four per core, UP/DOWN switched while playing
MINIVERB repeat98 Modulated diffused FDN reverb; independent FX2 buffers, smoothed controls. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); make verify-miniverb
MODULATION sambanks FX1 station: a modulation pedal -- Juno, Dimension, flanger, phaser, comb; FX1 only. on hardware: Sam's MKII
PEXT PROBE sambanks Measurement instrument: tests P memory above P:0x2000 and code in the shared window, and reports it in the track's audio. make check
RESONATOR ilia-murzinov FX1: 4 Chamberlin BPs, per-band gains, SCALE makeup, DECY rings. on hardware: Ilia's MKII, remix resonator BUILD RR as RESON RR.RMX, 19 Oct 2026: page-1 GN1–4/DECY/MIX, page-2 PIT1–4/SCAL 8 and 127, DECY low and high, FX2 dry-pass, two FX1 instances
SHATTER ilia-murzinov Crush insert: fold, clip, bit/SRR crush, chaotic feedback. on hardware: Ilia's MKII, remix shatter BUILD S6 (SHATTER S6.RMX), 21 Oct 2026: every page-1/page-2 knob exercised (CLIP open + FDBK for MODE/TONE/RATE); verify_shatter
SIDECHAIN_COMPRESSOR Zac Kyoti Stock COMPRESSOR with a side-chain KEY from any of T1-T8, key gain, a base-width key filter (KBAS high-pass in Hz, KWID low-pass in octaves above it) and a key listen switch on page 2. on hardware: this pin's octabam form (remixes/test/sidechain-compressor) on the author's MKI as OCTABAM33, 26 Oct 2026: KBAS/KWID, MON's switch and its OFF on older projects, KEY's pressed turn, the fades, all good; the key-filter table fix alone as OCTABAM32, 25 Oct 2026. The author's standalone image (140C_SCKF4) and KYOTI V1.6 on the author's MKI, 22 Oct 2026, and KEY's rotary switch and KWID's clip in the standalone image, 23 Oct 2026: page 2, KBAS/KWID ranges and readouts, a kick fundamental keyed at short attack and release, MON and KEY declick, load with 1 + 7 and 4 + 4 COMPRESSOR/DJ EQ per core. The previous version's octabam form ran on the unit on 4 Oct 2026
SPECTRUM sambanks FX1 station: a filter pedal -- the Moog ladder, SEM (LP -> BP -> HP by SHPE), Airwindows Capacitor2, formants; ENV and LFO onto the cutoff; width. on hardware: Sam's MKII
STUTTR ilia-murzinov Chance grain repeater: grab, hold-loop, reverse/slow modes. on hardware: Ilia's MKII, STUT NS.RMX (latest−SHATTER; BRAIN switch), 21 Oct 2026: empty-project play; every page-1/page-2 knob, MODE/SYNC, trig splits, two instances/core, engage/release fades click-free; verify_stuttr
TAPE ECHO repeat98 Economy CPU tape echo: two biquads, simple FREE slew, snapped BEAT TIME and page-1 AGE. on hardware: the author's unit (OCTACLID4): six instances run, a seventh freezes it, open
TESTGEN Ignorato Measurement source: a sine, sweep, pink or white noise, impulses, a needle pulse train or DC replace the track's audio. on hardware: Ignorato's MKII, images OCTABAM4-6 and 10 (remix testgen), 3-4 Oct 2026; 0.1 measured at the main outs; FX1-only in the emulator so far
TRANSIENT Ignorato Transient shaper: ATCK and SUST reshape onsets and tails, level-independent. on hardware: Ignorato's MKII, images OCTABAM2 and OCTABAM3 (remix transient), 3 Oct 2026
VOCODER Ignorato Ten-band vocoder after the Roland VP-330: the track's voice, a built-in carrier at NOTE or input B. FX2 of tracks 2, 4, 6 and 8 only. local render: 0.2 at T2 T4 T6 T8 in dsp_host and under the ColdFire port (verify_vocoder, make check), 11 Oct 2026; SCAL, KEY and RANG in dsp_host and under the port, 18 Oct 2026 (value 0 bit for bit the build before them); not flashed, T4 and T8 not heard, the selectors not heard. The 0.2 code before the de-zipper was heard on Ignorato's MKII at T2 T3 (OCTABAM20, 5 Oct 2026, by ear); 0.1 ran on OCTABAM12
VOID ilia-murzinov Input↔noise BAL; LFO/nbr AM + DRV/FDBK on noise only; WID stereo grit. on hardware: MKII LATEST NP / VRCS VJ: SRC LFO
WAVE sambanks Experiment: a 4-voice wavetable synth on FX2; a sine on the track sets its pitch and level. on hardware: Sam's MKII, image 93, 3 Oct 2026: plays, PTCH and the CHROMATIC keys move the pitch

Machines and the sequencer

module author what it does proof
ANALOG BD repeat98 Analog BD track machine: switchable 808/909 circuit-informed synthesis. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); source/AMP/main on both cores and engine-browser/hidden-control gates
BLACKPYRAMIDS_303 Zac Kyoti BLKPYRAMD: a TB-303 voice (built on Open303, recalibrated on the TB-303 circuit) as a track machine, one per DSP core, played by the sequencer, the chromatic keys and MIDI. on hardware: the author's MKI: standalone images 14-23 Oct 2026; this octabam form 19 Oct 2026 and, with this voice, 21 Oct 2026 (the 23 Oct link clips: standalone only)
CX OSC ilia-murzinov CX OSC in the machine list (no marker file): PTCH RATO INDX FOLD SYMM FDBK, mono, stock LFOs. Local fork of FM SYNTH. on hardware: MKII BUILD CS @ 052bb14d (author, cxosc-core): machine select; each PLAYBACK knob (PTCH RATO INDX FOLD SYMM FDBK); FUNC RATO snaps; MIDI note-on; STOP/START; Part change. Port: verify_cxosc + make check REMIX=cxosc
DIRECT JUMP timhastie/octatrick-modules CHAIN AFTER: DIRECT (its unused value 1) -- a pattern change lands at the next step, the step count continuing (A4/Rytm direct jump). on hardware: octatrick-usb on his MKI, 26 Sep 2026 (OCTATRICK9) through 2.9; the last two 2.9 fixes under the port
DIRECT_JUMP_KYOTI Zac Kyoti Clock-locked DIRECT JUMP ([PTN]+[YES]): a cued pattern lands on the next step exactly where it would be had it played since START. on hardware: the author's MKI, 27-28 Sep 2026 (standalone 140C_KDJ7 and the KYOTI V1.0 combined image) and 1 Oct 2026 from DRAM (an octabam image with all six KYOTI modules); Program Change re-cues, MIDI tracks, START SILENT and the trig-condition reset emulator-verified
ERASE_EMPTY_TRIGLESS_LOCKS Zac Kyoti Bug fix: a trigless lock whose last parameter lock is erased stops staying lit on the trig row. on hardware: the author's MKI (standalone image)
EUCLID FILL ilia-murzinov TRACK + PAGE: Euclidean sample-trig fill (STEPS=pattern len / PULSE / ROT / RAND VEL / RAND PTCH; CUE = random k-subset; RAND VEL = VOL locks; RAND PTCH = in-scale range around Part PLAYBACK PTCH). on hardware: YES/CUE with RAND PTCH>0 on sample + FM (SY encoding path in source, not tried on an SY track), SCALE on/off, relative RAND VEL — author BUILD 34 / minimal on CF, MKII, 16 Oct 2026; also cursory on Sam's MKII (owner report, 16 Oct 2026); builds and boots under the port; fill math gated in verify_euclid_fill
MUTE_MODES Zac Kyoti PERSONALIZE -> MUTE MODE: OT (stock) / OTFX / OTFX-T / DT-T -- dry cut with FX tails, trig suppression, or a Digitakt-style sequencer mute. on hardware: the author's MKI (standalone image and the KYOTI V1.0 combined image)
OCTA303 MaMarko A FLEX track whose sample is named TB303* plays a circuit-modelled TB-303 (diode ladder, accent-sweep capacitor, RC slide; TB303D*/TB303SQD* add a pedal). PLAYBACK: TUNE (-24..+24 semitones: four octaves) CUT RES ENV DEC ACC; dEVILish on FX1/FX2 = the Devil Fish mods (Whittle). Accent = an ACC lock, slide = a trigless PTCH lock. v7.0: OCTA-303 is also its own machine (row 5 of the machine list, no sample needed) with a SETUP page WAVE GATE FINE SLID DRIV ACCV; GATE 303 = the 303's own gate, 3.5 of the step's 6 clocks (Whittle). v7.1: held trig + UP / DOWN = an octave, a new slide takes the note it slides from. on hardware: v7.1 on the author's MKI, image O3V71 (BUILD A0, remix octa303), 23 Oct 2026: held trig + UP / DOWN an octave (several trigs at once, C5 stays), FUNC + TRIG's slide tied into the previous note, then turned to another note and an octave up, a FLEX track's TRIG + UP stock, LFO SETUP's names, save / power-cycle / reload; v7.0 on the author's MKI, image ACIDV70 (BUILD 87, remix acidtrack), 19 Oct 2026: the OCTA-303 machine chosen from the list, its SETUP page, save / power-cycle / reload, the 303 gate; v6.3-v6.9 played for hours (two or three tracks, with dEVILish and DisTorX). The engine is bit-exact against tools/octa303/ref303.py (test_octa303); the panel under the port in verify_octa303_ui. The ColdFire load is not measured on the unit.
PATTERN MUTE sambanks Double-press FUNC: mute edits go to a PATTERN layer saved with the pattern, beside the GLOBAL layer (Digitakt II PATTERN MUTE / GLOBAL MUTE). port-gated: verify_pattern_mute under the port on octabam, 30 Oct 2026; not flashed
PLOCKS P2 sambanks Parameter locks on FX1/FX2 page 2 (hold trigs, turn a knob on the SETUP page). on hardware: Tested on Sam's MKII (16 Oct 2026) and radiohagen's MKII (17, 22 and 25 Oct 2026): held edits, copy operations and controlled trig-paste undo.
QUANTIZE_LIVE_REC_TOGGLE Zac Kyoti QUANTIZE LIVE REC from the front panel: hold [REC], tap [PLAY] to see it, tap again while the toast is up to invert it. on hardware: the author's MKI, 25 Sep 2026 (gesture) and 30 Sep 2026 (setting survives a power cycle); 22 Oct 2026 (toast text, PERSONALIZE redraw; standalone and KYOTI V1.6 images, not this octabam form)
SCALE QUANTIZER timhastie/octatrick-modules PROJECT > CONTROL > SEQUENCER > SCALE: the PTCH knob and CHROMATIC trig keys quantize to a scale (24 scales, OFF = stock); > ROOT: the note the scale is built on (C..B; key 1 of the CHROMATIC keyboard sounds it); > GLIDE: the synth's glide time (OFF, 1..127; the legato switch is the synth track's LEG setting); polyphonic chromatic keys on a synth track whose VOIC is 2..4; on a synth track PTCH is semitones (-64..+63) and the CHROMATIC octave runs -4..+4. on hardware: octatrick-usb on his MKI, 26 Sep 2026 (OCTATRICK9) through 2.9; the last two 2.9 fixes under the port
REC THRESHOLD Chupitnik Recorder TRIG value THR: a REC press arms, and recording starts when the input passes the track's LEV (RECORDING SETUP 2, beside a live IN meter). on hardware: Chupitnik's MKII, 11-13 Oct 2026, THR1 to THR9 from the card: armed with TRACK 1 + REC AB, silence never records, the input starts the take, a second press cancels, LEV and IN on RECORDING SETUP 2, TRIG moved off THR while armed drops the arm and the blink, an armed track's icon blinks, armed inside RECORDING SETUP 1 it records; THR9 is this code
REC_TRIG_MUTE Zac Kyoti [TRACK]+[NO]/[YES] mute/unmute the held tracks' recorder trigs; MIDI CC 80; '..' beside a muted track's status icon. on hardware: the author's MKI, 2-3 Oct 2026 (standalone image and KYOTI V1.0; MIDI CC 80 not tried)
RELOAD_FROM_PROJECT Zac Kyoti Reload one track's sequence from the card without stopping the transport: [PTN]+[TRACK n], or [BANK]+[TRACK n] to re-apply the Part. on hardware: the author's MKI (standalone image), sequencer and metronome phase kept; 1 Oct 2026 from DRAM in an octabam image with all six KYOTI modules
RLEN PLEN sambanks ColdFire cave: RLEN value PLEN (past MAX) = one loop of the track's pattern on its own scale, so TRIG ONE + QREC PLEN records the next pass and stops. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); 26 Sep 2026
STEM REC yvesrosius Multitrack recording to the card: each track (after its fader), MAIN, CUE and the inputs as separate WAV files, 16 or 24 bits, up to 60 minutes. UP + REC opens STEMS. on hardware: Yves's MKII: STEMS1 (30 Sep 2026), T1-T8 for about two minutes; STEMS3 (6 Oct 2026), T1-T8 after the fader, MAIN and AB at 16 and 24 bits
SYNTH MACHINE timhastie/octatrick-modules A FLEX track whose sample is named SYNTH* plays a two-operator FM voice (STRT/LEN/RTRG/RTIM = ratio/index/feedback/decay); the DSP shapes and effects it as a sample. Its PLAYBACK page reads RATO/INDX/FDBK/DEC with icons and the title FM SYNTH; PTCH is semitones (-64..+63) and RATE is FINE (cents) on a synth track, 0c the moment a track becomes one. A FLEX or STATIC sample track with LEG MONO and GLIDE slides its pitch (2.8). on hardware: octatrick-usb on his MKI, 26 Sep 2026 (OCTATRICK9) through 2.9; the last two 2.9 fixes under the port
TRACK PATTERNS pgstath Each track plays its own pattern of the playing bank; changes land at the track's loop end. on hardware: MKII, OCTABAM3 (remix trackpatterns), 21 Oct 2026: functional tests and trig LEDs passed (contributor's report)
TUNER timhastie/octatrick-modules UP + TEMPO: a tuner window for the current audio track -- note, octave, cents, needle, Hz (McLeod NSDF + YIN refine on the ColdFire, in the UI task). on hardware: Tim's MKI, test build 3.0 b40 (octatrick at BUILD 40), 29 Sep 2026: UP + TEMPO opens the window and tunes; sources unchanged since 26 Sep
VARISPEED Zac Kyoti STATIC/FLEX TSTR VARI: dry, tempo-locked varispeed with QUAN ratios on PTCH (the plain build of VARISPEED_EMUS: nothing emulated, stock DSP). on hardware: the author's MKI, 15 Oct 2026 (the VARI1 build, standalone image); QUAN's rotary switch, 23 Oct 2026 (standalone image)

Parts, Kits and scenes

module author what it does proof
EVENTS radiohagen System: transport and MIDI notifications, held-step ownership and copy notifications. make check: Tested on radiohagen's MKII (25 Oct 2026): transport and trig-paste undo.
KITS sambanks 255 Kits per project: PART = LOAD KIT, FUNC+PART = SAVE KIT (MKI: FUNC+MIDI, then FUNC+BANK); each pattern plays its Kit through the stock Part slots. Replaces the earlier Octakit implementation. on hardware: Sam's MKII (image A6, 6 Oct 2026): importing Octakit-format kit files, ems-octakit #5, STOP/PTN+TRIG/PLAY with the Rytm, a rejected bank file, power cycles; verify_kits under the port
MIDI SCENES bkkbrls-del/midisc Scene locks for the MIDI tracks (hold-to-lock, readout, unlock, lock LEDs, XF morph, scene clear / copy / paste), kept per Part in scenes.work and CS1. Port of bkkbrls-del's midisc project. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_scenes against MIDISC2.1 under the port, phase 1 scenarios (b1, b7, b3, b29copy, b29clear); MIDISC 2.0 ran on the author's unit as ok-ms (14 Sep 2026)
MORPH MaMarko Hold a track key and press UP: from the next step that track's scene morph runs by itself, A -> B -> A over STEPS x x steps, starting on A; the other tracks keep the crossfader. Track + DOWN finishes the cycle on A and parks the track there until the crossfader reaches A. Settings saved with the project. Inspired by the Korg Electribe's Motion Sequence. on hardware: the owner's MKI, image MRPPR1 (BUILD 98, remix morph), 23 Oct 2026: the window, the start on the release, x to 16 and 41.625, saving (SAVE PROJECT, power cycle, RELOAD, another project and back), stop and parking on A; before, inside aCiDtRacK (ACIDV74MP, 22 Oct): several tracks at once, SMOOTH and TRIG HOLD
SCENES P2 sambanks Scene locks and the crossfader on FX1/FX2 page 2 (hold a scene, turn a page-2 knob). on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); 26 Sep 2026
STORE sambanks Platform: the stock save, load, copy, CS1 and Part sites STORE clients share. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); native Part access extension: hardware testing outstanding

MIDI and USB

module author what it does proof
CC FEEDBACK sambanks Every knob value change is transmitted as its CC (page 1: 16-45; page 2: CC MAP's 62-73), so a controller's encoders follow the unit. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_ccfeedback (Unicorn) and verify_set (the port's MIDI OUT bytes)
CC MAP sambanks MIDI CC 62-67 drive the FX2 engine's page-2 slots 6-11; CC 68-73 the FX1 station's. on hardware: Sam's MKII (image 96, 13 Sep 2026)
MIDI LOOPBACK radiohagen Press CHAN for per-Part EXT/INT/BOTH routing of MIDI-track notes and controls. port-gated: STORE native Part/context and client machine checks pass; hardware testing outstanding
MIDI SCALES radiohagen Stock MIDI ARP SETUP KEY: OFF plus all 12 keys in seven diatonic modes, stored in the Part. port-gated
USB markandrus/octemu Class-compliant USB-MIDI in/out plus UAC2 audio to and from the host on the OT's own USB port (markandrus/octemu; the input path and crossbar bryantysinger's; the TRACKS POST stems allmyfriendsaresynths's), by its TRACKS / MAIN / CUE / MASTER / IN / MIDI checkboxes. on hardware: Sam's MKII, octabam-core OCTABAMB5 (main 11d9f129), macOS on an arm64 Mac, 19 Oct 2026, with TRACKS PRE, MAIN, CUE and MIDI at their defaults (20 channels): enumeration (the MIDI port and a 20-channel input); MIDI in (notes trig tracks 3, 4, 5 and 8 on their own channels, and again after a replug); MIDI out clock at 48-49 per second, back after each of three cable replugs; audio after a replug with 0 overruns and 0 underruns; DISK MODE in and out (the image read back off the card, cmp equal, then MIDI, audio and counters clean); not run on a unit that day: TRACKS OFF and POST, MASTER, MAIN or CUE off, MIDI off, IN (octabam-core fixes it OFF), a Windows host, an MKI; earlier: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_usb for every combination and verify_usb_in for every IN value under the port; on units: MIDI in/out on Sam's MKII (image 64, 25 Sep 2026), Tim's MKI (OCTATRICK9, 26 Sep 2026) and Ignorato's MKII (OCTABAM21, 9 Oct 2026, transmit after three replugs, macOS and Windows 10), USB clock tempo on Kazeko's MKI (#633, 6 Oct 2026); TRACKS MAIN CUE on Sam's MKII and Tim's MKI, MAIN CUE and the ABCD inject on Bryan T's MKII (build 16, 27 Sep 2026), TRACKS POST on allmyfriendsaresynths's MKII (P3, 5 Oct 2026); the crossbar values at stream-up on Bryan T's MKII (usbin-test 12-16, 26-27 Sep 2026); README.md per combination and direction

Fixes

module author what it does proof
ATA WRITE GUARD sambanks Keeps the first PIO card sector and its pointer/count update atomic against interrupts; restores the caller's interrupt mask before returning. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); forced completion interrupt and full DSP-enabled project load under the port, 15 Oct 2026; not on hardware
BATCH_BUGFIXES Zac Kyoti Three stock 1.40C bug fixes in one module: MIDI Plays-Free trig, empty-pattern LED, and Part-change carryover. on hardware: the author's MKI (bugs 1 and 3, and bug 2's [BANK]-held stall ended); bug 2's [PTN] answers emulator-verified identical to its earlier hardware-confirmed version
LOFI AMF FIX bryantysinger/octa-bt-pt Fixes stock LO-FI's AMF knob: mpysu -> mpyuu, both payloads. Ported from bryantysinger/octa-bt-pt. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); both words disassembled against stock
RECORDER LOOP FIX sambanks ColdFire caves: the recorder loop click -- seek on a same-sample FLEX re-bind, keep its counter, record exactly the arm spacing, and repeat the last sample where sound-on-sound would play a zero. on hardware: OCTABAM83, 12 Sep 2026 (self-loop); Bryan T's MKII, sos-capture BUILD=95, 3 Oct 2026 (sound-on-sound)

Settings

module author what it does proof
BRAIN Sam Banks The settings store on the unit: card-wide knob defaults read from BRAIN/card.work at each project load (docs/proposals/BRAIN.md). on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); verify_brain under the port (6 Oct 2026)
HOOKS Sam Banks Platform: owns a stock site two selected modules both claim, and calls each one's routine there. port-gated: verify_hooks: the bridged tables and chains under Unicorn, and each bridged image's sites
MEMORY Sam Banks Platform: the DRAM reserve in stock's audio page arena, sized from what the remix's modules claim. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); the reserve's size per remix in the build report; verify_dram_boot under the port
PERSISTENT BUFFERS ilia-murzinov On project save, dump non-empty recorder buffers to BUFFERS/REC1.wav..REC8.wav (overwrite); on project load, restore them. on hardware: verify_persistent_buffers port; author MKII R2–R6 (17 Oct 2026); R7 PBUF R7.RMX (22 Oct 2026): short/long save UI immediate, 8 slots, empty skip, load/reload, reopen+play, overwrite, save≡load play

Utilities

module author what it does proof
BUFFER SAVER Chupitnik SAVE PROJECT (and SAVE TO NEW) offers to save unsaved recorder takes, each back into its own buffer, so they reload with the project. on hardware: Chupitnik's MKII, 15-16 Oct 2026, AUTOSAVE1 and AUTOSAVE2 from the card (the module under its first name): after a take FUNC + PROJ and PROJECT > SAVE ask SAVE SAMPLES?; YES saves R-YYMMDD-HHMM and assigns it to its buffer, two buffers in one save, an immediate re-save does not ask, a reload brings the takes back, NO saves as stock
COPY PROJECT ilia-murzinov CHANGE project list > FUNC+BANK > COPY: duplicate the selected project folder on the card. on hardware: FUNC+BANK (#931); CORE CP on MKII 27 Oct 2026: COPY + OPEN IT? loads/closes CHOOSE, no save prompt
REMIX SWITCH sanderlegit MAIN MENU > BRAIN lists the raw OS images (.RMX) in /BRAIN/REMIXES/ and boots the one picked without writing the flash; remembers the choice across reboots. on hardware: an MKII, 29 Sep 2026 (OCTABAM14 with BOOT TRACE): switched to its own image and to stock 1.40C, audio and play working; and with the park moved into the dead vector run (BSRETVEC) booted, played and switched away again -- 40 region words down to 18; verify_remix_switch. The list in BRAIN's pane and /BRAIN/REMIXES/ (8 Oct 2026), and the persisted selection (#743): under the port only
RND NAME iliamurzinov Project name editors: FUNC+CUE fills YYMMDD + random pool name. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); FUNC+CUE on CREATE / SAVE PROJECT AS / CHOOSE NEW PROJECT NAME under the port (verify_rnd_name); pools from unit
SCOPE ilia-murzinov DOWN+TEMPO OSC/XY/ALL; UP/DOWN switch; A GAIN B TIME; bridges TUNER. on hardware: MKII: LSCOPE BJ 24 Oct 2026 (OSC/XY/ALL; owner busy 8-track: CF METER SCOPE open ISR mean 291 µs / closed 288 µs, TUE 0 ROE 0; several min ALL soak no glitch); also make check REMIX=test/scope

Reference

module author what it does proof
BOOT TRACE sanderlegit Probe: a MIDI note on MIDI OUT at each boot stage, the DSP upload's record echoes and any stall, for finding where a boot hangs. on hardware: an MKII, 29 Sep 2026 (OCTABAM4-14); verify_boot_trace
CF METER sambanks Probe: frame-interrupt duration and (with CF METER IDLE) idle time, plus core 0's frame spin count, ESAI underrun/overrun frames and frame period, printed as audio on T8's FX2. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); ColdFire half on image 92 (Sam's MKII, 3 Oct 2026: interrupt 123.1 us stopped, 213.5 us playing); the DSP slots and DBRN under the port only (4 Oct 2026)
CF METER IDLE sambanks Probe: main's idle loop timed, for CF METER's idle-time slot. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); boots and loads a project under the port (28 Sep 2026)
DLCOPY sambanks Frame hook on payload B: copies a staged block into the shared window (demand loader). make check
DLPUMP sambanks Host-writes a staged block to a DSP core, a chunk per frame interrupt (demand loader). make check
LOAD METER sambanks The frame interrupt's share of the ColdFire, each DSP core's busy time per frame and each effect call's cost, for BRAIN's OTOP screen. on hardware: cursory testing on Sam's MKII (owner report, 16 Oct 2026); the window and both DSP cores' figures under the port (verify_load_meter, verify_brain)
SC LOAD METER BRIDGE sambanks Shares the FX2 commit site between SIDECHAIN_COMPRESSOR's moncommit and LOAD METER's otop_e2. make check
WAVE LOAD sambanks Probe: K 4-voice wave engines per frame interrupt (CF METER's BURN), for CF METER's duration readout. on hardware: image 92, Sam's MKII, 3 Oct 2026: one 4-voice engine 69.2 us of the 362.8 us frame, clean beside four sample tracks

How it works

modules/<name>/manifest.py   what a module is and what it claims (yours, or a pointer into an author's repo)
remixes/<name>/remix.py      which modules, in which chooser order; README.md beside it
remixes/test/<name>/         a remix of one module, for that module's gates
tools/remix/ledger.py        refuses two modules that claim one address, hook, id or buffer, by name
tools/build/build_bus.py     the build: assembles, links, places, wires, verifies -> out/mainos_bus.bin
tools/verify/*               the gates: oracles, the boot under the ColdFire port, menu, cycles, identity

A module's code lands in one of two places; the build decides which bytes go where, and a module declares what it is, not an address:

class declared as where
ROM cave CavePatch: a .s source, or ratified hex one of the OS image's free zero runs, ~8 KB total shared by everyone
DRAM unit Linked(..., dram=True): a GNU-as unit linked with every other DRAM unit in the remix into one runtime, packed, appended behind octabam's loader, depacked at boot into a 10 MB reserve carved off stock's 85.5 MB sample/recorder pool

The OS-image edits every class needs (a detour at a stock instruction, a poke, a grown table) are Detour, Poke, TableGrow, wired by symbol and asserted against stock before a byte is written. docs/contributing/PLACEMENT.md is the map of what is free and what was measured.

A port is a proof. The build re-links every unit at the author's own address and compares, and refuses on any drift.

Where a module's state lives. An effect's twelve knobs are Part parameters and stay in the Part. Personal material (KITS's library) is in files the module owns and formats. A module's settings (menu options, a USB profile) live in BRAIN (modules/brain), the settings, defaults and templates store: SETTINGS, MIDI LOG, DEFAULTS, the project pair and TOOLS, designed in docs/proposals/BRAIN.md (6 Oct 2026, starting from nordseele's OTX proposal). Measured under the port only; not on a unit.

Checking without a flash

Everything is checked on your machine against your own 1.40C (docs/contributing/TESTING.md). The DSP side renders locally on the assembled instruction stream (make render, make render-rig; tools/harness/README.md). The whole machine, the ColdFire, both DSP cores, the card, the panel, MIDI and USB, runs under a port of it (tools/emu/ot_emu, make emu-cf; tools/emu/README.md):

make check REMIX=<name>             # build + every gate + boot under the port; OT_PROJECT=<dir> adds a real project
make reach                          # the gates this branch's diff reaches, in order; RUN=1 runs them
make panel REMIX=<name>             # the virtual front panel with sound at localhost:8563 (tools/panel/README.md)
make emu-live REMIX=<name>          # the screen and keys in a window, no sound

CI (.github/workflows/ci.yml, make ci) runs the checks that need no firmware. What the emulators cannot see (caches, the recorder's DMA, cross-core timing) is listed beside every gate that is blind to it.

Before you flash anything

Writing a non-official OS to an Octatrack can leave it unusable and puts your warranty in question. Nothing here is endorsed by, supported by, or affiliated with Elektron. BUILDING.md has the recovery path (section 7).

No Elektron binary is redistributed here, and none may be. A built .bin or .syx contains Elektron's OS: do not share built images. Share the repo; everyone builds their own.

Octatrack and Elektron are trademarks of Elektron Music Machines MAV AB, used here only to identify the hardware this project targets.

Documentation

docs/README.md lists every doc by who it is for. Each module's page is modules/<name>/README.md, each remix's remixes/<name>/README.md, and each tool's tools/<dir>/README.md.

Repository layout

CONTRIBUTING.md    your first PR, the module contract, the oracle rule, the gates, what CI checks
AGENTS.md          working rules and the trap index for coding agents (CLAUDE.md imports it; the full register: docs/contributing/TRAPS.md)
.github/           CI (Ubuntu + macOS, SHA-pinned actions), the PR template
modules/           the contributions, one directory each, each with its README
remixes/           one directory per remix: remix.py (the selection, in chooser order) and README.md; README.md here is the index
remixes/test/      the one-module remixes, for their modules' gates (make check REMIX=<name>)
docs/guide/        building, flashing and composing a remix
docs/contributing/ writing a module, testing, placement, tooling, the failure register
docs/firmware/     the firmware, reverse-engineered
docs/proposals/    technical propositions
tools/remix/       the toolkit: schema, registry, ledger, the loader, the DRAM platform, the TUI
tools/build/       the image build (build_bus.py) and the tools that understand the OS layout
tools/verify/      the gates
tools/harness/     hear and measure the DSP side locally (dsp_host, send_probe, rig_render)
tools/emu/         the ColdFire emulators: the headless port (ot_emu) and the Unicorn bring-up
tools/panel/       the virtual front panel over the port, with sound
tools/hw/          the unit and its card: MIDI control, capture, project files, MIDI flashing
tools/ghidra/      one Ghidra project over the OS and both DSP payloads
tools/patches/     local patches to the vendored toolchains
scripts/           toolchain setup, vendored pins (vendor.sh), OS fetch and recon, the bit-identity gate
dsp/               shared DSP infrastructure: the null stub and the probes

Credit

Em (emuyia) designed Octakit and the loader-appended DRAM runtime octabam adopted as its large-payload placement; tools/remix/loader.S and the payload packer (tools/remix/pack.py) are derived from hers with attribution. Octakit was carried here as a submodule until 6 Oct 2026; KITS (modules/kits) follows its key map and reads its kits3a/b.work files.

This began as a fork of mxldyn/octamax by Maxolydian, whose reverse engineering of the OS format, memory map and parameter tables made any of this reachable; the upstream history is in this repository's log.

BRAIN's LOAD view (modules/load-meter) follows the LOAD view design for the Machinedrum by Hamish Renton (SamplesAndSnacks): the bounded reads, the - and ? states, the refresh counter and the zero-cost close.

vendor/ pulls in dsp56300, mc68k and elektron-firmware-tool.

License

MIT for this repository's own code and documentation. It does not extend to Elektron's firmware, which is not distributed here, nor to the repositories referenced as submodules, which remain their authors' under their own terms. THIRD_PARTY.md lists every transcribed DSP source (Airwindows, JClones, Mutable Instruments, ChowDSP, jpcima, audiojs), the submodules and the vendored tools, each with its licence.

About

A remixer for the Elektron Octatrack's OS: modules (custom DSP56300 effects, ColdFire mods, ports of community mods) composed into one firmware image built from your own 1.40C. No firmware distributed.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

290 stars

Watchers

10 watching

Forks

Releases

Packages

Contributors

Languages