OpenRemap
An offline-first engine for analyzing, comparing, and reproducing ECU binary changes.
Embed it as a library, automate it in a pipeline, or run it from the terminal — your ECU data never leaves your machine.
🌐 openremap.com — full documentation, guides, and changelog.
Runs entirely offline. No accounts, no telemetry, no data leaves your machine — ever.
What it is
OpenRemap is an offline-first ECU binary analysis engine, exposed as a Python library and a CLI. The same pipeline that powers the command-line tool is fully available as importable services — no subprocess, no parsing stdout.
from openremap.core.services.identifier import identify_ecu
from openremap.core.services.confidence import score_identity
from openremap.core.services.patcher import ECUPatcher
data = open("ecu.bin", "rb").read()
identity = identify_ecu(data, filename="ecu.bin")
result = score_identity(identity)
print(f"{identity['ecu_family']} {result.tier}") # EDC17 High
All services accept bytes and dict — no file paths, no hidden state, trivial to test and wrap in an API endpoint or a desktop app.
CPU-bound algorithms run on a compiled Rust backend via PyO3 (24–115× faster than pure Python). Pre-built wheels ship the native extension for Linux (glibc + musl), macOS, and Windows — pip install openremap and it just works.
The problem
ECU work revolves around three tasks that today require expensive commercial software (€2,500–€8,000+) or manual hex-editor work with no audit trail:
- Identify a binary — manufacturer, ECU family, software revision, confidence score
- Diff two binaries — what changed between a stock file and a tuned file, captured as a portable recipe
- Apply a recipe to another binary — validate, patch, and verify — all-or-nothing
Whether you are building a tuning application, automating a workflow, or just need a reliable offline tool — OpenRemap gives you a clean Python API and a full CLI for all three.
Features
- ECU identification — 30 extractors across Bosch, Siemens, Delphi, and Magneti Marelli. Every binary gets back manufacturer, family, software version, hardware number, and a multi-signal confidence score.
- Batch scanning — point it at a folder, get every file classified and optionally sorted into manufacturer/family trees. Suspicious files are flagged before you touch them.
- Structural map discovery — find calibration axes and 2D tables in any binary without manufacturer identification. Detects parallel maps (fuel, timing, boost, EGR) sharing breakpoint axes. Works on unsupported ECUs.
- Portable recipes — diff two binaries into a
.remapJSON recipe. Every changed byte is captured with a 32-byte context anchor. Human-readable, Git-diffable, shareable. - Safe patching — validate, apply, verify — all in one shot. All-or-nothing: partial patches never happen.
- Terminal UI — full interactive interface for identifying, scanning,
cooking, and tuning. Run
openremapwith no arguments. - Python library — every service is importable directly. No subprocess, no parsing stdout. Embed in scripts, pipelines, or desktop apps.
- Rust acceleration — CPU-bound algorithms run on a compiled native extension. Pre-built wheels for Linux (glibc + musl), macOS, and Windows.
→ CLI reference · Integration guide
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.
Supported ECUs
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. A recipe is a portable, reproducible record of a tune — you can review it, version it, and apply it to any matching ECU.
Install
Works on Windows, macOS, and Linux. One command:
pip install openremap
Or with uv (recommended):
uv tool install openremap
Pre-built wheels include the compiled Rust backend — no Rust toolchain required. On platforms without a pre-built wheel, the pure-Python backend takes over automatically.
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
The full terminal UI launches — identify files, scan folders, cook recipes, and apply tunes, all from one interface.
The complete CLI is also there when you need it:
openremap workflow # Prints a plain-English step-by-step guide
openremap commands # Quick reference of all available commands
Documentation
- 🌐 openremap.com — website with full guides and changelog
- Integration guide — using OpenRemap as a Python library
- 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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.6.4-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: openremap-0.6.4-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 558.4 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71e4777df739b233d5c3137d28a17631e6737d79dda29b5db9334bb07a83e905
|
|
| MD5 |
b79cf505ad889d549dd77b2d0bcee05a
|
|
| BLAKE2b-256 |
5f6cada6e0963f58878a6d27e366c45f98bd1ad465df9da592dc43d7b750f887
|
Provenance
The following attestation bundles were made for openremap-0.6.4-cp310-abi3-win_amd64.whl:
Publisher:
release.yml on v-arapidis/openremap-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openremap-0.6.4-cp310-abi3-win_amd64.whl -
Subject digest:
71e4777df739b233d5c3137d28a17631e6737d79dda29b5db9334bb07a83e905 - Sigstore transparency entry: 2422720269
- Sigstore integration time:
-
Permalink:
v-arapidis/openremap-core@cc8e09158c441659d9191194847d62f214d9c89f -
Branch / Tag:
refs/tags/v0.6.4 - Owner: https://github.com/v-arapidis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc8e09158c441659d9191194847d62f214d9c89f -
Trigger Event:
push
-
Statement type:
File details
Details for the file openremap-0.6.4-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: openremap-0.6.4-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 757.0 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
899ceba06e274aa85d80cf734e69b5e9875cb1d58ce2d6f055ee13ecd35141e2
|
|
| MD5 |
900af1f71556aa9508faa01ca9fbd8c4
|
|
| BLAKE2b-256 |
3cfca1ac5a448c339a86a4edea87d0418aef3a203d122efa35a466756f352738
|
Provenance
The following attestation bundles were made for openremap-0.6.4-cp310-abi3-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on v-arapidis/openremap-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openremap-0.6.4-cp310-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
899ceba06e274aa85d80cf734e69b5e9875cb1d58ce2d6f055ee13ecd35141e2 - Sigstore transparency entry: 2422720503
- Sigstore integration time:
-
Permalink:
v-arapidis/openremap-core@cc8e09158c441659d9191194847d62f214d9c89f -
Branch / Tag:
refs/tags/v0.6.4 - Owner: https://github.com/v-arapidis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc8e09158c441659d9191194847d62f214d9c89f -
Trigger Event:
push
-
Statement type:
File details
Details for the file openremap-0.6.4-cp310-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: openremap-0.6.4-cp310-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 669.8 kB
- Tags: CPython 3.10+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b184b6850f6c4720e65051091602279d62ffda206bed453f95b2ffdf36a1178c
|
|
| MD5 |
ca96ade498c23b9f0d451d72a10d46fa
|
|
| BLAKE2b-256 |
0b80851bd933cd906aa5d4174badccc9f490ccb967a776cb619dec08c43e316b
|
Provenance
The following attestation bundles were made for openremap-0.6.4-cp310-abi3-manylinux_2_34_x86_64.whl:
Publisher:
release.yml on v-arapidis/openremap-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openremap-0.6.4-cp310-abi3-manylinux_2_34_x86_64.whl -
Subject digest:
b184b6850f6c4720e65051091602279d62ffda206bed453f95b2ffdf36a1178c - Sigstore transparency entry: 2422720634
- Sigstore integration time:
-
Permalink:
v-arapidis/openremap-core@cc8e09158c441659d9191194847d62f214d9c89f -
Branch / Tag:
refs/tags/v0.6.4 - Owner: https://github.com/v-arapidis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc8e09158c441659d9191194847d62f214d9c89f -
Trigger Event:
push
-
Statement type:
File details
Details for the file openremap-0.6.4-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: openremap-0.6.4-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 643.3 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ce7b1d4459bc76c98cacb08c867669ca54098c8c2f11c29a92106ed1374e3a3
|
|
| MD5 |
b7ea269202db11977968a028007ec562
|
|
| BLAKE2b-256 |
8d551ab4b71ab4adc3ffdfbfb233d884993e822758e1f66133a15781a973ab68
|
Provenance
The following attestation bundles were made for openremap-0.6.4-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on v-arapidis/openremap-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openremap-0.6.4-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
9ce7b1d4459bc76c98cacb08c867669ca54098c8c2f11c29a92106ed1374e3a3 - Sigstore transparency entry: 2422720909
- Sigstore integration time:
-
Permalink:
v-arapidis/openremap-core@cc8e09158c441659d9191194847d62f214d9c89f -
Branch / Tag:
refs/tags/v0.6.4 - Owner: https://github.com/v-arapidis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc8e09158c441659d9191194847d62f214d9c89f -
Trigger Event:
push
-
Statement type: