Skip to main content

ECU binary analysis and patching toolkit — diff, validate, and apply tuning recipes to automotive ECU binaries.

Project description

OpenRemap

CI PyPI License: MIT Python 3.14+ uv

Extract what changed between a stock and a tuned ECU binary. Replay that change — safely — on any matching ECU.

Drop any .bin at it — manufacturer, ECU family, software version, match key, all back in under a second. Point it at a folder of hundreds of binaries — sorted into Bosch/EDC17/, Siemens/SIM2K/ automatically, nothing moved until you say so. Diff a stock and a tuned binary and the difference becomes a portable recipe — validated against any target before touching it, applied byte-by-byte with a full audit trail, verified after the fact. No guessing, no blind flashing.

Built for tuners who want to understand what they're writing to an ECU, and for developers who want an open, scriptable alternative to closed tuning toolchains. → How it works in detail


Install

Now on PyPI — no git URL required. Requires Python 3.14+ and uv. Full setup guide → docs/setup.md

Regular use

uv tool install openremap

Installs openremap permanently on your system PATH. Works from any folder, no environment to activate, survives reboots. Verify with:

openremap --version

Prefer pip? That works too:

pip install openremap

Contributing / development

git clone https://github.com/Pinelo92/openremap.git
cd openremap
uv sync

After uv sync the command lives inside the virtual environment. Either prefix every call with uv run, or activate the environment first:

# Option A — prefix (no activation needed)
uv run openremap identify ecu.bin

# Option B — activate once per session, then use bare command
source .venv/bin/activate          # macOS / Linux
.venv\Scripts\activate             # Windows
openremap identify ecu.bin

CLI Quickstart

New here? Run openremap workflow first — it prints a complete plain-English guide with every step, the exact commands to type, and what to do when something goes wrong. No reading required.

Full CLI Guide → docs/cli.md

# New users: print the full step-by-step workflow guide
openremap workflow

# Identify an ECU binary
openremap identify ecu.bin

# Extract the tune — diff a stock and a modified binary into a recipe
openremap cook stock.bin stage1.bin --output recipe.json

# Validate the target before touching it
openremap validate strict target.bin recipe.json

# Apply the tune
openremap tune target.bin recipe.json --output target_tuned.bin

# Confirm every byte landed correctly
openremap validate tuned target_tuned.bin recipe.json

# Batch-scan a folder of binaries — dry-run is the default, nothing moves
openremap scan ./my_bins/

# Sort files into a manufacturer/family tree once you're happy with the preview
openremap scan ./my_bins/ --move --organize

🔴 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 validate tuned confirms the recipe was applied — it does not correct or validate ECU checksums. Flashing a binary with an incorrect checksum will brick your ECU. No exceptions.


Supported ECU Families

All current extractors are Bosch. The registry is built to be extended to any manufacturer without touching existing code.

Family Era Notes
EDC1 / EDC2 1990–1997 Audi 80/A6 TDI, 32 KB / 64 KB
EDC 3.x 1993–2000 VAG TDI diesel bridge generation
EDC15 1997–2004 Format A (TSW) and Format B (C3-fill)
EDC16 2003–2008 0xDECAFE magic, 256 KB / 1 MB / 2 MB
EDC17 / MEDC17 / MED17 / ME17 2008+ PSA, VAG, BMW diesel and petrol
ME7 1999–2006 VAG 1.8T, Porsche, Ferrari
M1.x 1987–1996 BMW, early VAG, unique ROM header
M1.55 1994–2002 Alfa Romeo 155/156/GT, 128 KB
M2.x 1993–1999 Porsche 964 (M2.3) and related
M3.x 1989–1999 BMW E30/E36 petrol
M5.x / M3.8x 1997–2004 VW/Audi 1.8T (AGU, AUM, APX)
LH-Jetronic 1982–1995 Volvo, early BMW/Mercedes
Motronic Legacy various Early 6802-era Bosch DME / KE / EZK

⚠️ 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 before proceeding.


Documentation

Document Contents
docs/setup.md Full install guide — regular use, development, shell completion, updating, troubleshooting
docs/cli.md Commands guide — what each command does, with links to full per-command pages
docs/recipe-format.md The recipe JSON spec — fields, structure, versioning
CONTRIBUTING.md How to add a new ECU extractor, code style, submitting a PR, contributor safety notice
DISCLAIMER.md Liability, intended use, professional review requirements, legal notice

Contributing

Contributions are welcome — especially new ECU family extractors. See CONTRIBUTING.md.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openremap-0.2.0.tar.gz (179.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openremap-0.2.0-py3-none-any.whl (158.4 kB view details)

Uploaded Python 3

File details

Details for the file openremap-0.2.0.tar.gz.

File metadata

  • Download URL: openremap-0.2.0.tar.gz
  • Upload date:
  • Size: 179.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","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

Hashes for openremap-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d8de10d84ba321e231a1cd8f4c4964b952b33469cb36ca7a8d7fc9f9b8023d6f
MD5 9abce3b238e7bf8d6055b0f8e7898d81
BLAKE2b-256 9f6a2b28f113402622a3de4e5c0255e458a1d5498d3728976d8dedd9a0ee82ed

See more details on using hashes here.

File details

Details for the file openremap-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: openremap-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 158.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","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

Hashes for openremap-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd07ef8bd9a0ede187f31be076dd4a20d583e096e74706a7260f72d93ff729fb
MD5 af89e975df979aef7ea27b6137855d77
BLAKE2b-256 1f282b50fb74e0dc1b63300c4430f0e621345e308ad89709c18f8dc5bff90c69

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page