MCPcopy Index your code
hub / github.com/ClassicMiniDIY/UltraLog

github.com/ClassicMiniDIY/UltraLog @v2.10.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.10.1 ↗ · + Follow
1,778 symbols 4,923 edges 99 files 525 documented · 30%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

UltraLog

UltraLog Banner

A high-performance, cross-platform ECU log viewer written in Rust.

CI License Version


Overview

UltraLog is an independent, open-source desktop application designed for automotive tuners, engineers, and enthusiasts who need to analyze ECU (Engine Control Unit) log data. Built with Rust for maximum performance, it handles large log files (millions of data points) smoothly using advanced downsampling algorithms while maintaining visual accuracy.

Purpose: UltraLog exists to provide data interoperability for the automotive tuning community. It reads standard export formats (CSV, binary logs) from various ECU systems, enabling users to analyze their own vehicle telemetry data in a unified, cross-platform tool without vendor lock-in.

Key Benefits: - Fast - Handles massive log files without lag using LTTB downsampling - Universal - Supports multiple ECU formats in one unified interface for cross-platform data analysis - Cross-platform - Runs natively on Windows, macOS, and Linux - Accessible - Colorblind-friendly palette and clear visualization - Open - AGPL-3.0 licensed with documented format specifications for community benefit


Features

Data Visualization

  • Multi-channel overlay - Plot up to 10 data channels simultaneously on a single chart
  • Normalized display - All channels scaled 0-1 for easy comparison regardless of original units
  • Min/Max legend - Peak values displayed for each channel at a glance
  • Real-time cursor values - Legend shows live values at cursor position with proper units
  • High-performance rendering - LTTB (Largest Triangle Three Buckets) algorithm reduces millions of points to 2,000 while preserving visual fidelity
  • Stacked plot areas - Split the chart into up to 10 independent vertically-stacked panels, each with its own Y-axis and channel set — ideal for comparing channels with wildly different scales

Timeline and Playback

  • Interactive timeline - Click anywhere on the chart or use the scrubber to navigate
  • Playback controls - Play, pause, stop with adjustable speed (0.25x, 0.5x, 1x, 2x, 4x, 8x)
  • Cursor tracking mode - Keep the cursor centered while scrubbing through data
  • Manual time input - Type a specific time in seconds to jump directly to that position

Multi-File Support

  • Tab-based interface - Open multiple log files with Chrome-style tabs
  • Drag and drop - Simply drop files onto the window to load them
  • Per-tab state - Each tab maintains its own channel selections and view settings
  • Duplicate detection - Prevents loading the same file twice

Unit Conversion

Configurable units for 8 measurement categories: - Temperature - Kelvin, Celsius, Fahrenheit - Pressure - kPa, PSI, Bar - Speed - km/h, mph - Distance - km, miles - Fuel Economy - L/100km, MPG - Volume - Liters, Gallons - Flow Rate - L/min, GPM - Acceleration - m/s², g - AFR/Lambda - Air-Fuel Ratio, Lambda

Export Options

  • PNG Export - Save chart views as PNG images
  • PDF Export - Generate PDF reports of your visualizations

Computed Channels

  • Formula-based virtual channels - Create custom channels from mathematical expressions
  • Time-shifting support - Reference past/future values with index offsets (RPM[-1]) or time offsets (Boost@-0.5s)
  • Reusable library - Save formulas as templates to use across different log files
  • Full expression support - All standard math functions: sin, cos, sqrt, abs, max, min, etc.
  • Example formulas:
  • RPM * 0.5 - Simple arithmetic
  • "Manifold Pressure" - "Barometric Pressure" - Quoted channel names with spaces
  • RPM[-1] - RPM - RPM change from previous sample
  • max(AFR1, AFR2) - Maximum of two channels
  • sqrt(TPS * MAP) - Complex calculations

Additional Tools

  • Scatter Plot - XY scatter visualization for channel correlation analysis
  • Histogram - 2D heatmap visualization with configurable grid sizes (10x10 to 25x25) for analyzing channel distributions
  • MCP Server - Built-in Model Context Protocol server lets Claude Desktop (or any MCP client) control UltraLog — load files, select channels, get stats, create computed channels, and run analysis via http://localhost:52453/mcp
  • Analysis Tools - Built-in signal processing and statistics:
  • Filters - Moving average, Kalman filter, and other signal processing tools
  • Statistics - Min/max, percentiles, standard deviation calculations
  • AFR Analysis - Air-Fuel Ratio analysis with target comparison
  • Derived Channels - Calculated channels from existing data
  • Normalization Editor - Create custom field name mappings for cross-ECU comparison
  • Field Normalization - Maps ECU-specific channel names to standard names (e.g., "Act_AFR" → "AFR")

Accessibility

  • Colorblind mode - Wong's optimized color palette designed for deuteranopia, protanopia, and tritanopia
  • Font scaling - Four font sizes (S, M, L, XL) for improved readability
  • Custom font - Clear, readable Outfit typeface
  • Toast notifications - Non-intrusive feedback for user actions
  • Multilingual support - 15 languages including English, Spanish, German, French, Italian, Portuguese, Chinese, Japanese, Hindi, Arabic, Bengali, Russian, Urdu, and Indonesian

Supported ECU Formats

Haltech - Full Support

  • File type: CSV exports from Haltech NSP software
  • Features: 50+ channel types with automatic unit conversion
  • Supported data: Pressure, temperature, RPM, throttle position, boost, ignition timing, fuel trim, and more

ECUMaster EMU Pro - Full Support

  • File type: CSV exports (semicolon or tab-delimited) from EMU Pro software
  • Features: Hierarchical channel paths, automatic unit inference
  • Note: Native .emuprolog binary format not supported; export to CSV from EMU Pro

RomRaider - Full Support

  • File type: CSV exports from RomRaider ECU logging software
  • Features: Automatic unit extraction from column headers, Subaru ECU parameter support
  • Supported data: Engine speed, load, AFR corrections, timing, knock, temperatures, and all standard Subaru ECU parameters

Speeduino / rusEFI - Full Support

  • File type: MegaLogViewer binary format (.mlg)
  • Features: Binary format parsing with field type detection
  • Supported data: All standard Speeduino/rusEFI channels with timestamps

AiM - Full Support

  • File type: XRK/DRK binary format (.xrk, .drk)
  • Features: Pure Rust binary parser for AiM motorsport data loggers
  • Supported devices: MXP, MXG, MXL2, EVO5, MyChron5, and other AiM data acquisition systems
  • Supported data: All logged channels with lap times, GPS data, and metadata

Link ECU - Full Support

  • File type: Link log format (.llg)
  • Features: Binary format parser for Link G4/G4+/G4X ECUs
  • Supported data: All ECU parameters including RPM, MAP, AFR, ignition timing, temperatures, and custom channels

Emerald ECU - Full Support

  • File type: Binary format (.lg1 data + .lg2 channel definitions)
  • Features: Native binary format parser for Emerald K6/M3D ECUs
  • Supported devices: Emerald K6, M3D, and compatible ECU models
  • Supported data: TPS, Air Temp, MAP, Lambda, Oil/Fuel Pressure, Oil/Fuel Temp, Exhaust Temp, Boost Target/Duty, RPM, Coolant Temp, Battery Voltage, Ignition Advance, Injector Pulse Width, and more
  • Note: Both .lg1 (data) and .lg2 (channel definitions) files must be in the same directory

MegaSquirt / Honda Tuning Studio - Full Support

  • File type: CSV datalogs exported from TunerStudio
  • Features: Automatic channel and unit extraction, boolean value parsing (MIL lamp ON/OFF), anomalous first-row timestamp handling
  • Supported devices: MegaSquirt MS1, MS2, MS3, MS3Pro, Honda Tuning Studio, and any TunerStudio-compatible ECU
  • Supported data: RPM, MAP, TPS, injector duration/duty, ignition timing, ECT, IAT, AFR, battery voltage, boost, VSS, gear, and all logged channels

BlueDriver OBD-II - Full Support

  • File type: CSV exports from BlueDriver Bluetooth OBD-II scanner app
  • Features: Automatic channel and unit detection from BlueDriver live data exports
  • Supported data: All OBD-II PIDs logged by BlueDriver including RPM, speed, coolant temp, MAF, fuel trims, O2 sensors, and more

Woolich Racing Tuned - Full Support

  • File type: CSV exports from Woolich Racing Tuned (WRT) flash-tuning software
  • Features: HH:MM:SS.mmm timestamp normalization, boolean channel parsing (Clutch In True/False), unit inference, trailing-comma handling
  • Supported devices: Yamaha, Kawasaki, Suzuki, Honda, and BMW sportbike ECUs flashed/logged via the WRT datalogger
  • Supported data: RPM, TPS, IAP (intake air pressure), AFR, Gear, Clutch In, Coolant Temp, IAT, and all logged channels

Coming Soon

  • AEM
  • MaxxECU
  • MoTeC

Installation

Pre-built Binaries

Download the latest release for your platform from the Releases page:

Platform Download Notes
Windows x64 ultralog-windows.zip Windows 10/11
macOS Intel ultralog-macos-intel.tar.gz macOS 10.15+
macOS Apple Silicon ultralog-macos-arm64.tar.gz M1/M2/M3/M4 Macs
Linux x64 ultralog-linux.tar.gz Most distributions

Windows: 1. Download and extract ultralog-windows.zip 2. Run ultralog-windows.exe 3. You may see a SmartScreen warning on first run - click "More info" → "Run anyway"

macOS: 1. Download the appropriate .tar.gz for your Mac 2. Extract: tar -xzf ultralog-macos-*.tar.gz 3. On first run, right-click the file and select "Open" to bypass Gatekeeper 4. Or remove quarantine attribute: xattr -d com.apple.quarantine ultralog-macos-*

Linux: 1. Download and extract: tar -xzf ultralog-linux.tar.gz 2. Run: ./ultralog-linux

Building from Source

Prerequisites: - Rust (latest stable version) - Platform-specific build tools (see below)

Linux Dependencies (Ubuntu/Debian):

sudo apt-get update
sudo apt-get install -y \
    build-essential \
    libxcb-render0-dev \
    libxcb-shape0-dev \
    libxcb-xfixes0-dev \
    libxkbcommon-dev \
    libssl-dev \
    libgtk-3-dev \
    libglib2.0-dev \
    libatk1.0-dev \
    libcairo2-dev \
    libpango1.0-dev \
    libgdk-pixbuf2.0-dev

macOS Dependencies:

xcode-select --install

Windows Dependencies: - Install Visual Studio Build Tools - Select "Desktop development with C++" workload

Build Steps:

# Clone the repository
git clone https://github.com/ClassicMiniDIY/UltraLog.git
cd UltraLog

# Build release version (optimized)
cargo build --release

# The binary will be at:
# - Windows: target/release/ultralog.exe
# - macOS/Linux: target/release/ultralog

Quick Start Guide

  1. Launch UltraLog - Double-click the application or run from terminal

  2. Load a log file - Either:

  3. Click the "Select a file" button in the left sidebar
  4. Drag and drop a log file onto the window

  5. Select channels - Click channel names in the right panel to add them to the chart (up to 10)

  6. Navigate the data -

  7. Click anywhere on the chart to move the cursor
  8. Use the timeline scrubber at the bottom
  9. Use playback controls to animate through the data

  10. Customize your view -

  11. Change units via the Units menu
  12. Enable Cursor Tracking to keep the cursor centered
  13. Enable Colorblind Mode for accessible colors

User Guide

Interface Overview

UltraLog v2.0 features a VS Code-style interface with an activity bar on the far left:

Activity Bar Panels: - Files (folder icon) - File list, drop zone, loaded files management - Channels (list icon) - Channel selection, search, selected channel cards - Tools (wrench icon) - Access to Scatter Plot, Histogram, and Analysis Tools - Settings (gear icon) - All application settings in one place (units, display options, accessibility)

Loading Log Files

Supported file extensions: .csv, .log, .txt, .mlg, .xrk, .drk, .llg, .lg1/.lg2

UltraLog automatically detects the ECU format based on file contents: - Haltech: Identified by %DataLog% header - ECUMaster: Identified by semicolon/tab-delimited CSV with TIME column - RomRaider: Identified by comma-delimited CSV starting with Time column - Speeduino/rusEFI: Identified by MLVLG binary header - AiM: Identified by <hCNF tag in XRK/DRK files - Link ECU: Identified by lf3 magic bytes in LLG files - Emerald: Identified by .lg1 and .lg2 file pair - Woolich Racing Tuned: Identified by comma-delimited CSV starting with a Log Time column of HH:MM:SS.mmm timestamps

Loading multiple files: - Each file opens in its own tab - Switch between tabs by clicking them - Close tabs with the × button - The same file cannot be loaded twice

Visualizing Data

Selecting channels: 1. Use the search box to filter channels by name 2. Click a channel name to add it to the chart (turns blue when selected) 3. Click again to remove it from the chart 4. Up to 10 channels can be displayed simultaneously

**Understanding the chart:

Extension points exported contracts — how you extend this code

Parseable (Interface)
Trait for log file parsers [11 implementers]
src/parsers/types.rs
Analyzer (Interface)
Core trait for all analysis algorithms [14 implementers]
src/analysis/mod.rs
LogDataAccess (Interface)
Helper trait for accessing log data by channel name [1 implementers]
src/analysis/mod.rs

Core symbols most depended-on inside this repo

clone
called by 250
src/analysis/mod.rs
size
called by 237
src/state.rs
color
called by 205
src/state.rs
parse
called by 168
src/parsers/link.rs
example_file_exists
called by 108
tests/common/mod.rs
scaled_font
called by 92
src/app.rs
extract_channel_references
called by 67
src/expression.rs
assert_approx_eq
called by 57
tests/common/mod.rs

Shape

Function 1,102
Method 489
Class 137
Enum 47
Interface 3

Languages

Rust100%

Modules by API surface

src/app.rs74 symbols
tests/core/state_tests.rs65 symbols
src/units.rs61 symbols
tests/core/computed_channels_tests.rs57 symbols
tests/computed_channels_tests.rs57 symbols
src/parsers/types.rs54 symbols
tests/core/units_tests.rs52 symbols
src/mcp/server.rs51 symbols
tests/core/normalize_tests.rs50 symbols
tests/core/expression_tests.rs44 symbols
src/analysis/filters.rs42 symbols
tests/parsers/emerald_tests.rs38 symbols

For agents

$ claude mcp add UltraLog \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact