octa-bt-pt
Tool for patching Octatrack firmware, focused on default values when a new project is created
About
Highlights
- Effect parameter defaults for new projects
- Default effect assignment for FX1 and FX2
- Fix for the LO-FI AMF multiplication bug
- Version-stamped .bin (CF card) and .syx (MIDI) output, verified against the stock file's hash
What you need
Your own stock OS 1.40C, Python with Streamlit, and a Mac: the setup scripts are written for macOS, Windows needs WSL.
Good to know
It patches values, not code. Only OS 1.40C is accepted, any other file is refused. Read docs/FLASHING.md and the Startup Menu recovery path before flashing.
README
octa-bt-pt
No Elektron firmware is included in this repository.
make osdownloads your own official copy from Elektron directly; every patch is verified against that file's exact hash before anything is applied. Supports OS 1.40C only — a hash mismatch on any other version is refused, not silently patched.macOS only, for now. The build/setup scripts (Makefile,
elektron-firmware-toolcompilation) assume a Unix environment. Windows isn't supported without WSL. The Streamlit UI itself is plain Python and would run anywhere; it's the setup tooling around it that's Mac-shaped right now.
A parameter default patch tool for the Elektron Octatrack (OS 1.40C).
Pick the values you want for effect defaults, the AMF mpysu→mpyuu bug fix,
and the FX1/FX2 default-effect assignment in a web UI, and generate a
flashable patched OS image from your own copy of the official firmware. This
tool patches values, not code — see patch_tool/registry.json for exactly
what's exposed and why.
⚠️ Flashing a modified OS can leave your unit unusable until you recover it,
and puts your warranty in question. Nothing here is endorsed by, supported
by, or affiliated with Elektron. You flash entirely at your own risk. Read
docs/FLASHING.md (or your unit's manual, §8.5.2 and the Startup Menu MIDI
recovery path) before you need it, not after.
Quick start
make setup # build elektron-firmware-tool (pinned commit, patched) make os # download your own copy of the official Elektron OS make recon # extract the section this tool patches make streamlit # launch the parameter picker UI -- creates its own .venv on first run
In the UI: change whatever parameters you want, download patch_spec.json
from the sidebar, then:
make generate SPEC=~/Downloads/patch_spec.json # writes patches/9000_streamlit_generated.py make patch-image # applies it, packages it, verifies the round trip
Output lands at out/OCTATRACK_PATCH001.bin (copy to the root of your CF
card, then PROJECT → OS UPGRADE → [YES]) and
out/OCTATRACK_OS1.40C_PATCH001.syx (MIDI upgrade path, also your recovery
file format if you ever need the Startup Menu's MIDI UPGRADE).
Bump PATCH_BUILD on every subsequent flash so the version string on the
unit maps back to a specific build:
make patch-image PATCH_BUILD=002
make help lists every target.
How it fits together
patch_tool/ Streamlit UI. Reads registry.json only -- no dependency on
the firmware binary or its hash. Outputs a diff-only
patch_spec.json (only what you actually changed).
tools/ generate_streamlit_patch.py turns patch_spec.json into a
patches/*.py file. patchlib.py / master_patch.py apply,
verify, and list registered patches against a real image.
patches/ Populated by `make generate`. One generated file
(9000_streamlit_generated.py) covering everything the UI
touched -- slot defaults, the AMF fix, FX1/FX2 defaults.
scripts/ setup.sh builds elektron-firmware-tool (pinned commit).
fetch-os.sh downloads the official OS. recon.sh extracts
the section every patch targets.
registry.json documents, per effect parameter: its legal range, the
raw↔displayed-value conversion (plain, offset, bipolar, or a named
function for the two irregular cases), and whether it's independently
hardware-confirmed. Nothing is exposed as a labeled control unless its
behavior was checked against a real unit.
Third-party tooling
elektron-firmware-tool
(mischa85) does the actual .syx container inspection/repacking. MIT
licensed, no Elektron firmware included. make setup clones and builds it
locally, pinned to a specific commit (see scripts/setup.sh) with one small
patch applied (tools/elektron-firmware-tool.patch) for full version-string
writes and container-emit support.
License
MIT, covering this repository's own code. It does not extend to
Elektron's firmware, which is not distributed here, or to
elektron-firmware-tool, which carries its own MIT license in its own repo.
Pictures in the README load from GitHub.
- Language
- Python
- License
- MIT License
- Stars
- 11
- Forks
- 1
- Created
- 08-22-2026
- Last commit
- 1 month ago

