AI-powered diagnostic analyzer for drone flight logs and car engine telemetry. Auto-detects your data, visualizes discrepancies, and provides intelligent tuning recommendations.
Windows & Linux · NVIDIA · AMD · Intel · CPU Fallback
Choose your platform. No install needed — just download and run.
Linux: 422 MB · Standalone binary · No Python required
A modern dark-theme desktop app with real-time signal analysis, interactive plots, and an AI chat assistant.
| Channel | Max Error | Mean Error | Discrepancy | Regions |
|---|---|---|---|---|
| Roll | 0.3842 | 0.0521 | 8.2% | 12 |
| Pitch | 0.4156 | 0.0687 | 14.1% | 18 |
| Yaw | 0.1923 | 0.0312 | 4.7% | 6 |
Simulated UI — actual application uses tkinter with matplotlib plots and Phi-3 AI assistant
Everything you need to diagnose, analyze, and tune — with AI assistance.
Scans column names to auto-identify drone BBL or car OBD-II data. Selects the right diagnostic profile with confidence scoring.
Normalizes input/output signal pairs, computes absolute error, and finds contiguous discrepancy regions above your threshold.
Microsoft Phi-3-mini GGUF model (~2.5 GB). Runs 100% locally via llama-cpp-python. No cloud, no API keys, no data leaves your machine.
Auto-detects NVIDIA (CUDA), AMD (ROCm/Vulkan), Intel (Vulkan). Falls back to CPU automatically if no GPU is found.
Modern dark palette with card panels, gradient header, styled buttons, and chat bubbles. DPI-aware on HiDPI displays.
Abstract DiagnosticProfile base class. Add new data domains (marine, industrial) by implementing detect, compute, and prompt methods.
Configurable threshold slider. Real-time re-analysis when adjusted. Red overlay highlights problem regions on signal plots.
Pre-built binaries for Windows (.exe) and Linux. Build scripts with PyInstaller. Tested on Windows 11 and Ubuntu 22.04.
TuneAI auto-detects your data format and applies the correct diagnostic profile with confidence scoring.
Parses Betaflight Blackbox .bbl files via the orangebox library, or pre-converted .csv files. Compares setpoint (pilot input) vs gyro (actual response) per axis.
Reads OBD-II CSV exports from Torque Pro, ScanMaster, or similar tools. Analyzes up to 7 diagnostic channels with domain-specific normalization.
From raw log file to actionable tuning advice in four steps.
Click "Open Log File" and select a .bbl, .bfl, or .csv file. Supports multiple encodings (UTF-8, Latin-1, CP1252).
Column-name matching identifies the data type. Signals are normalized, errors computed, and discrepancy regions extracted above your threshold.
Multi-channel matplotlib plots overlay input vs output with red discrepancy highlights. Summary table shows max/mean error, std dev, and region counts.
Ask natural language questions. The AI receives your computed stats as context and provides domain-specific recommendations referencing your data.
Modular design with pluggable profiles and GPU-accelerated AI inference.
detect_gpu() probes hardware at launch. Checks nvidia-smi for NVIDIA, rocm-smi or WMI for AMD, WMI for Intel. Caches result. Returns vendor, driver version, VRAM, and backend type.
DiagnosticProfile ABC with detect(), compute_channels(), get_ai_system_prompt(), and get_summary_text(). Two implementations: DroneProfile and CarEngineProfile.
AIModelManager handles download (~2.5 GB Phi-3-mini GGUF), GPU/CPU loading via llama-cpp-python with n_gpu_layers=-1 for full offload, and inference with 4096 token context.
build_channel() normalizes signals (joint or independent), computes absolute error, finds contiguous discrepancy regions via threshold scan, and returns a stats dict.
DiagnosticDataStore holds the DataFrame, channels, active profile, and threshold. build_ai_context() serializes everything into a prompt string for inference.
App(tk.Tk) with custom widgets: CardFrame (bordered panels), StyledButton (canvas-drawn rounded buttons), StatusDot. Matplotlib embedded via FigureCanvasTkAgg.
.bbl / .csv parsed
to DataFrame
Normalize, error calc
discrepancy regions
Profile prompt + stats
serialized for AI
On-device GGUF
GPU or CPU
Auto-detects your GPU and selects the fastest available backend. No manual configuration.
| GPU | Detection | Backend | Notes |
|---|---|---|---|
| NVIDIA GTX / RTX | nvidia-smi | CUDA | Best performance. Install with CUDA wheel for llama-cpp-python. |
| AMD Radeon RX | rocm-smi / WMI | ROCm Vulkan | ROCm on Linux, Vulkan on Windows. Vulkan SDK required. |
| Intel Arc / UHD / Iris | WMI | Vulkan | Vulkan SDK required. Arc discrete GPUs recommended. |
| No GPU / Unsupported | — | CPU | Always works. Slower AI inference (~2-5x vs GPU). |
Minimal dependencies. Optional packages unlock AI features.
| Package | Version | Status | Purpose |
|---|---|---|---|
| Python | 3.10+ | Required | Runtime |
| numpy | ≥ 1.24 | Required | Numerical analysis & signal processing |
| pandas | ≥ 2.0 | Required | Data loading, processing & CSV/BBL parsing |
| matplotlib | ≥ 3.7 | Required | Signal plots with TkAgg backend |
| plotly | ≥ 5.15 | Required | Interactive visualizations |
| orangebox | ≥ 0.4.0 | Optional | Betaflight Blackbox .bbl file parsing |
| llama-cpp-python | ≥ 0.2.0 | Optional | On-device AI chat assistant (Phi-3 GGUF) |
Common questions about TuneAI.
.bbl, .bfl) parsed via the orangebox library, and CSV files (.csv) with auto-detection of encoding (UTF-8, Latin-1, CP1252). OBD-II exports from Torque Pro, ScanMaster, and similar tools are supported.DiagnosticProfile abstract base class with four methods: detect() for confidence scoring, compute_channels() for analysis, get_ai_system_prompt() for AI context, and get_summary_text() for display. Register your profile in the PROFILES list.