ECU binary analysis and patching toolkit — diff, validate, and apply tuning recipes to automotive ECU binaries.
Project description
OpenRemap
Open-source ECU binary identification, diffing, and patching toolkit. Free alternative to the identification and binary-diff workflows locked inside WinOLS, ECM Titanium, and similar commercial tools.
Runs on your machine. No internet. No account. No data leaves your hands — ever.
Ready to try it? Jump to Install — one command on any platform.
The problem
ECU tuners work with raw binary files — .bin dumps read from engine control units. Every day they need to:
- Figure out what a binary is — which manufacturer, which ECU family, which software revision
- Compare two binaries — what exactly changed between a stock file and a tuned file
- Apply those changes to another file — take a known-good tune and patch it onto a different binary of the same ECU
Today, these tasks require expensive commercial software (€2,500–€8,000+), or manual hex-editor work with no audit trail and no safety net.
What OpenRemap does
OpenRemap is a free, offline, open-source toolkit that handles the binary analysis and patching pipeline:
| Step | Command | What happens |
|---|---|---|
| Identify | openremap identify ecu.bin |
Reads the binary and tells you: manufacturer, ECU family, software version, hardware number, calibration ID — plus a confidence score rating how likely the file is unmodified |
| Scan | openremap scan ./bins/ |
Batch-identifies every binary in a folder. Sorts them into Bosch/EDC17/, Siemens/PPD/, etc. Flags suspicious files before you touch them |
| Cook | openremap cook stock.bin tuned.bin |
Diffs two binaries byte-by-byte and produces a .remap recipe — a portable JSON file listing every changed byte with context anchors. Readable in any text editor, diffable in Git |
| Tune | openremap tune target.bin recipe.remap |
Validates the recipe against the target binary, applies the patch, then verifies every byte landed correctly. All-or-nothing — partial patches never happen |
What it does NOT do
- Map editing — OpenRemap works at the byte level, not the map level. Use WinOLS or ECM Titanium to find and edit maps. Use OpenRemap to capture, share, and reapply those edits.
- Checksum correction — you must run the output through WinOLS, ECM Titanium, or equivalent before flashing. Always.
- ECU reading/writing — it operates on
.binfiles you already have.
Coverage
30 extractors across 4 manufacturers, covering ECUs from 1982 to present:
| Manufacturer | Families | Examples |
|---|---|---|
| Bosch (18) | EDC17, EDC16, EDC15, ME7, ME9, M5.x, M4.x, M3.x, M2.x, M1.x, MP9, ME1.5.5, LH-Jetronic, Mono-Motronic, and more | VAG TDI, BMW, Volvo, PSA, Porsche, Alfa Romeo |
| Siemens (6) | SIMOS, PPD, SID 801/803, Simtec 56, EMS2000 | VAG petrol, PSA/Ford diesel, Volvo turbo |
| Delphi (2) | Multec, Multec S | Opel/Vauxhall diesel and petrol |
| Marelli (4) | IAW 1AV, IAW 1AP, IAW 4LV, MJD 6JF | Fiat, PSA, GM/Opel |
→ Full reference: Bosch · Siemens · Delphi · Marelli
Confidence scoring
Every identification includes a confidence verdict — HIGH, MEDIUM, LOW, SUSPICIOUS, or UNKNOWN — built from multiple signals:
- Detection strength — how rigorous the extractor's matching cascade is
- Software version format — manufacturer-aware canonical format checking (Bosch
1037-prefixed, Delphi 8-digit GM-style, etc.) - Identity fields present — hardware number, calibration ID, ECU variant
- Filename analysis — tuning keywords (
stage2,dpf_off,egr_off) and generic names (1.bin) flag suspicious files - Family-aware scoring — ECU families that architecturally lack certain fields are never penalised for their absence
The recipe format
The .remap recipe is a self-contained JSON file. Every changed byte is listed with its offset, original value, modified value, and a context anchor — 32 bytes of surrounding data that let the patcher find the right location even if the binary has shifted slightly between software revisions.
Recipes are human-readable, Git-diffable, and shareable. No proprietary format, no binary blobs.
Install
Works on Windows, macOS, and Linux. One command to get started:
pip install openremap
Or with uv (recommended):
uv tool install openremap
Detailed guides:
- 🪟 Windows — Step-by-step guide · written for people who rarely use a terminal
- 🍎 macOS / 🐧 Linux — One-command install
- 🛠️ Contributing / development — Clone and run from source
Get started
openremap
That's it. The full terminal UI launches — identify files, scan folders, cook recipes, and apply tunes, all from one interface. No flags to memorise.
The complete CLI is still there when you need it:
openremap workflow # Prints a plain-English guide with every step and command
openremap commands # Quick reference for all available commands
Documentation
- How it all works
- CLI commands overview
- Confidence scoring — tiers, signals, and breakdown
- Recipe format (.remap)
- Supported families: Bosch · Siemens · Delphi · Marelli
- Contributing — adding extractors, code style, PRs
Contributing
Contributions are welcome — especially new ECU family extractors. See CONTRIBUTING.md.
License
MIT — see LICENSE.
⚠️ Checksum verification is mandatory. Before flashing any tuned binary to a vehicle, you must run it through a dedicated checksum correction tool (ECM Titanium, WinOLS, or equivalent).
openremap tuneconfirms the recipe was applied correctly — it does not correct or validate ECU checksums. Flashing a binary with an incorrect checksum will brick your ECU.
⚠️ Research and educational use only. Any output produced by this software must be reviewed by a qualified professional before being flashed to a vehicle. The authors accept no liability for damage, loss, or legal consequences arising from its use. Read the full DISCLAIMER.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openremap-0.4.1.tar.gz.
File metadata
- Download URL: openremap-0.4.1.tar.gz
- Upload date:
- Size: 765.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68c55098d21e192df22a69d090a7e16148c3fc8e512bc1121efc33ccfed961ac
|
|
| MD5 |
1d359bb890543d551d20a0e2eb0136a9
|
|
| BLAKE2b-256 |
9f5f92264218c861463359226bee09a4b74a48c73f79a0979cbdee72513244c2
|
File details
Details for the file openremap-0.4.1-py3-none-any.whl.
File metadata
- Download URL: openremap-0.4.1-py3-none-any.whl
- Upload date:
- Size: 357.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
706b73f349e855a1b4f70b2b876009400d04787b199114d86ff571996d7c0a9c
|
|
| MD5 |
3bd7beb06fed12907a72f45bef9de33b
|
|
| BLAKE2b-256 |
b5485c13d71bd3c354359b4e108a4312f41c5ba78cc2e9bc52d8966337dccfb1
|