A portable, zero-install Windows tool for loading Vector BLF measurement files, decoding CAN signals with DBC databases, and plotting them interactively.
- Load Vector
.blffiles — via the open-sourcepython-canlibrary - Decode signals using
.dbcfiles — full physical value conversion including factor, offset, and unit - Multi-signal plot — zoom, pan, and interactive cursor with per-signal value readout
- Multi-axis mode — each signal gets its own independent Y axis (overlaid)
- Stacked mode — INCA/CANdb-style layout with one lane per signal, shared X axis
- Show Data Points — toggle sample markers for all plotted signals
- Export to CSV — export selected signals with timestamps
- Raw CAN frame viewer — inspect decoded and undecoded frames
- Save / Load configuration — persist your BLF path, DBC path, signals, and colors
- Portable
.exe— single folder, no Python installation required on target machine
Requirements: Python 3.11 or later
git clone https://github.com/dinacaran/blfviewer.git
cd blf-viewer
pip install -r requirements.txt
python app.pyGo to the Releases page
and download the latest BLFViewer_vX.X.X_Windows.zip.
Unzip anywhere and run BLFViewer.exe — no installation needed.
| Step | Action |
|---|---|
| 1 | Click Open BLF → select your .blf measurement file |
| 2 | Click Open DBC → select the matching .dbc database |
| 3 | Click Load + Decode → decodes all signals in the background |
| 4 | In the left panel, double-click a signal (or drag it) to plot it |
| 5 | Move the cursor over the plot to read time and value |
| 6 | Use Multi-Axis or Stacked for different layout modes |
| 7 | Click Export Selected CSV to save signal data |
| Key | Action |
|---|---|
Space |
Plot selected signal(s) from the tree |
F |
Fit all plots to window |
Delete |
Remove selected signal from plot |
Ctrl+Up / Down |
Reorder selected signal in the plot list |
Ctrl+S |
Save current configuration |
pip install pyinstaller
pyinstaller BLFViewerPortable.specOutput is in dist/BLFViewer/ — zip that folder and distribute.
The GitHub Actions workflow (.github/workflows/build.yml) builds and
uploads the .exe automatically on every tagged release.
blf-viewer/
├── app.py # Entry point
├── core/
│ ├── blf_reader.py # python-can BLF reader
│ ├── dbc_decoder.py # cantools DBC decoder
│ ├── signal_store.py # In-memory signal series store
│ ├── load_worker.py # Background QThread worker
│ └── export.py # CSV export
├── gui/
│ ├── main_window.py # Main Qt window
│ ├── plot_widget.py # Interactive plot panel
│ ├── signal_tree.py # Left-panel signal tree
│ └── raw_frame_dialog.py # Raw CAN frame viewer
├── requirements.txt
├── BLFViewerPortable.spec # PyInstaller spec
└── .github/workflows/build.yml # Auto-build on release tag
| Package | Version | License |
|---|---|---|
| python-can | ≥ 4.3 | LGPL v3 |
| cantools | ≥ 39.0 | MIT |
| PySide6 | ≥ 6.6 | LGPL v3 |
| pyqtgraph | ≥ 0.13 | MIT |
| numpy | ≥ 1.26 | BSD |
All dependencies are compatible with MIT distribution.
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.
Found a bug? Open an issue with:
- Your OS and Python version
- A minimal description of the BLF / DBC setup (no proprietary data needed)
- The full error message or unexpected behaviour
See DISCLAIMER.md. This tool is for offline analysis only and must not be used in any safety-critical or real-time context.
Vector Informatik GmbH is not affiliated with this project.
MIT — see LICENSE.


