Resize, inspect, edit, smooth, and compare ECU calibration tables with direct RomRaider clipboard support.
Warning
ECU Map Studio performs numerical transformations; it cannot determine whether a calibration is safe for an engine. Review every result and validate changes with appropriate logs, instrumentation, and calibration practices.
ECU Map Studio is a Windows desktop application for resampling ECU maps and curves onto new breakpoint grids. It accepts complete RomRaider tables directly from the clipboard, eliminating the usual Excel intermediary, and makes extrapolated data visually explicit.
The application supports:
- RomRaider
[Table3D]maps with X, Y, and Z data. - RomRaider
[Table2D]curves with one axis and one value series. - Excel-compatible tab-separated tables.
- Automatic constant-spacing axes or fully custom breakpoints.
- Bilinear, shape-preserving PCHIP, and nearest-neighbor interpolation.
- Held-edge, limited-linear, local edge-trend, global table-trend, or disabled extrapolation.
- Heat maps, live X/Y slices, interactive 3D surfaces, and difference views.
- Deterministic selected-region interpolation and table smoothing with previews and warnings.
- Direct selected-cell entry, block copy/paste, selection math, comparison/merge, undo/redo, and project files.
| Tool | Purpose |
|---|---|
| Heat map | Inspect the complete source, result, or difference table. |
| Live X/Y slices | Follow both cross-sections through the selected heat-map cell. |
| 3D surface | Rotate, pan, and zoom a surface snapshot; extrapolated points remain highlighted. |
| VS BILINEAR / VS LINEAR | Show how the selected smooth method differs from the predictable linear reference. |
| Safety report | Summarize changes, extrapolated cells, extrema, RMS difference, and sharp adjacent edges. |
Python 3.10 or newer is required.
python -m venv .venv
.\.venv\Scripts\python -m pip install -r requirements.txt
.\.venv\Scripts\python app.pyOnce the environment exists, run_app.bat starts the application directly.
- In RomRaider, copy the complete table using Copy Table.
- In ECU Map Studio, choose Paste RomRaider / Excel table.
- Set an automatic target range and table size, or enter custom axes.
- Select the interpolation and boundary policies.
- Generate the result and inspect the heat map, extrapolated cells, slices, 3D surface, and safety report.
- Choose Copy for RomRaider, paste the complete result into RomRaider, and validate the calibration.
RomRaider selection payloads do not contain axes. Load a complete table first, select the destination cell, and then paste the selection.
Some expanded calibrations repeat their final X or Y breakpoint so a larger table initially behaves like the smaller original table. ECU Map Studio preserves every imported row, column, repeated breakpoint, and Z value.
When repeated coordinates contain matching values, calculations use an equivalent unique-coordinate surface without rewriting the source table. Use Edit source axes when the new breakpoints are ready to be assigned. If values at one repeated coordinate no longer match, surface calculations pause until those breakpoints are made distinct because the coordinate has become mathematically ambiguous.
| Method | Recommended use |
|---|---|
| Bilinear | Predictable default for normal ignition, fuel, boost, and similar continuous maps. It is local and does not overshoot within a source cell. |
| PCHIP | A smoother, shape-preserving result when the source grid has at least four points on each axis. Compare it with the bilinear reference before use. |
| Nearest neighbor | Categorical maps, switches, or intentionally discrete levels. |
For 2D curves, Linear is the predictable default, PCHIP provides a smoother shape-preserving curve, and Nearest preserves discrete levels.
| Policy | Behavior |
|---|---|
| Hold edge values | Clamps out-of-range coordinates to the nearest known boundary. This is the default. |
| Limited linear | Continues the nearest edge slope for a configurable number of edge intervals. |
| Local edge trend | Fits the nearest 4 × 4 source region and continues its boundary-matched least-squares trend for a configurable number of edge intervals. |
| Global table trend | Fits the complete source table and continues its boundary-matched least-squares trend for a configurable number of edge intervals. |
| Do not extrapolate | Rejects any target grid extending beyond the source range. |
Adding more breakpoints inside the original axis limits is interpolation, not extrapolation. Extrapolation occurs only when a target axis extends beyond a source limit.
Smoothing is deterministic and deliberately has no strength slider.
- Detect suspicious cells identifies strong interior anomalies without changing data.
- Repair selected cells reconstructs only the selected region from the unchanged surrounding surface. Select every cell sharing a repeated X/Y coordinate together.
- Smooth entire table performs one axis-aware pass and always shows a warning, proposed map, and difference preview before it can be applied.
- Undo last smoothing restores the values from before the accepted operation.
A visually smoother calibration is not necessarily a better or safer calibration. Intentional steps, ridges, and compensations can be flattened by smoothing.
Open 2D Curve Tool from the main window or paste a complete [Table2D] payload and the application will route it automatically. The curve tool provides automatic or custom target axes, interpolation and extrapolation policies, plotted results, difference views, anomaly detection, repair, smoothing, selection math, undo/redo, and RomRaider copy-back.
Versioned .ecumap project files preserve the loaded source, generated result, extrapolation mask, target axes, numerical settings, and display precision. Source and generated results have separate undo histories. Result Undo/Redo restores the saved values, axes, extrapolation flags, and comparison data without recalculating them from newer settings.
Select one cell or a range, type a number, and press Enter to set every selected cell in one undoable edit. Source and Result both provide interpolation, smoothing, math, comparison, axis editing, visualization, and export actions.
Use Clear table / New session or Ctrl+N to reset a map workspace. The 2D curve window provides the equivalent command. Resetting a session does not modify RomRaider or the system clipboard.
Install the build dependencies and run the reproducible build script:
.\.venv\Scripts\python -m pip install -r requirements-dev.txt
.\build_exe.batThe single-file application is written to dist\ECUMapStudio.exe. Build output is intentionally excluded from version control; publish executables as versioned release assets instead.
To build the standard installer and the alternative Nuitka installer with the locally installed Inno Setup compiler:
.\packaging\build_installers.ps1 -Version 1.2.1 -Iscc C:\tmp\ECUEditor-InnoSetup6\ISCC.exeThe release helper validates version metadata, lint and formatting, runs the complete test suite and source smoke test, builds the executable, runs the packaged smoke test, and prepares versioned artifacts:
.\packaging\prepare_release.ps1 -Version 1.2.1The ignored release\v1.2.1 directory contains:
- A versioned standalone Windows executable.
- A portable ZIP containing the executable, manual, README, changelog, and license.
- The illustrated PDF manual.
- A standalone copy of the MIT License.
SHA256SUMS.txtfor download-integrity verification.
Run packaging\build_installers.ps1 instead to also build the standard PyInstaller installer, alternative Nuitka installer, and portable Nuitka ZIP. It calls the release helper and updates the checksums for the complete artifact set. The tag-triggered GitHub workflow builds the standard executable and portable ZIP; installers and the Nuitka ZIP are added from the verified dual-installer build.
Publishing remains separate from local packaging. Do not create or push a version tag until the generated installers have been approved.
The test suite covers clipboard layouts, padded tables, interpolation and extrapolation policies, smoothing, projects, comparison and merge behavior, 2D curves, live slices, 3D rendering, table editing, and headless Qt workflows.
.\.venv\Scripts\python -m unittest discover -s tests -vThe repository includes a Windows CI workflow that runs the suite on supported Python versions.
The illustrated ECU Map Studio User Manual provides the complete end-user workflow, screenshots, troubleshooting guidance, and calibration checklist.
ecu_map_tool/ Application, numerical methods, clipboard support, and UI
tests/ Unit, integration, and headless GUI tests
tests/fixtures/ RomRaider clipboard fixtures
assets/ Application icon assets
packaging/ Executable, icon, screenshot, and manual build helpers
output/pdf/ Published user manual
CHANGELOG.md Version history
app.py Source entry point
ECUMapStudio.spec PyInstaller configuration
ECU Map Studio is developed and tested on Windows. Clipboard integration targets RomRaider table formats and conventional Excel-compatible TSV layouts. The project is independent and is not affiliated with or endorsed by the RomRaider project.
ECU Map Studio is available under the MIT License.
Copyright © 2026 CAATZ.
