Skip to content

Releases: Sherin-SEF-AI/CanLab

CanLab v2.0.0: new interface, NMEA 2000, MCP and hardware adapters

Choose a tag to compare

@Sherin-SEF-AI Sherin-SEF-AI released this 15 Sep 16:34
00995a4

A new interface, marine bus support, assistants over MCP, hardware adapters, and a test suite that grew from 154 to 540. The version number moves to 2.0 because the interface was rebuilt: tabs, sidebars and navigation all work differently from 1.3.

The interface

  • Five workspaces replace the row of sixteen tabs. CAPTURE, EXPLORE, DETECT, DEFINE and BUS. The bar follows Alt+1..9, Ctrl+Tab and anything that selects a tab directly.
  • Command palette on Ctrl+Shift+P or F3, searching 105 commands: every pane by path and every menu action with its shortcut.
  • Sidebars you can actually resize. They sat in a plain layout before, so the advertised resizing never worked. They now drag, collapse to zero with T and N, and remember their width.
  • One design scale in canlab/ui/tokens.py, with a Blender-style palette. Green, amber and red are kept only where they mean connected, pending and armed.
  • Reduce Motion in the View menu. Animation also stands down during live capture, except the armed and connected indicators.
  • The CAN ID list shows whole identifiers. It was cutting 29-bit IDs down to their first few characters.
  • Minimum window size is 1124 x 851.

New

  • NMEA 2000. Marine buses use the same 29-bit frames as J1939, and were being read with J1939 tables. The decoder now works the protocol out from the identifier. It decodes single-frame messages such as heading, rate of turn, position, course and speed, wind and temperature. Multi-frame messages are named but not decoded.
  • MCP server for Claude, ChatGPT and Codex, in the window or headless, over Streamable HTTP or stdio. None of its 25 tools can transmit.
  • Hardware CAN adapters from Settings: every python-can backend with detection and a listen-only test, plus GVRET for the boards SavvyCAN supports.
  • SNIFFER tab with notch, capture trimming, and an OpenAI provider for the AI tab.
  • canlab-cli, the analysis without the window.
  • Annotated capture. Mark when you did something and every byte and bit is ranked by how well it followed.
  • Bit-level flag and value-table detection, opendbc apply, replay with signal override, CAN FD end to end, and undo for signal edits.
  • The inject page previews the exact bytes it would send before anything is armed, and logs every send.

Fixed

  • The app could crash with no error message. Animations were freed twice. A background analysis thread could also be discarded while still running, for example by loading a second capture during classification.
  • The value slider on the inject page was capped at plus or minus 100, so a 1450 rpm value snapped back to 100.
  • The checksum sweep missed every algorithm real vehicles use.
  • The openpilot DBC exporter wrote 29-bit frame IDs a DBC reader refuses.
  • The sniffer expired every row of a loaded capture the moment it opened.
  • The PGN scan crashed on the first frame shorter than eight bytes.
  • Startup dropped from 1069 ms to 702 ms.

Validated on real recordings

Besides the unit suite, the whole application runs over other people's recordings. The SavvyCAN examples and five CANedge MDF4 logs pass 90 checks: a 145,534-frame J1939 log, a 22.8-minute two-channel car log, and a marine NMEA 2000 bus. The python-can BLF and ASC format files are also covered.

Videos

Attached below, all 1080p and recorded from this build:

  • canlab-tour.mp4: the guided tour. It zooms in on each control as it is described. Start here.
  • canlab-demo-part1 to part4: every tab, in four parts.
  • canlab-realdata-validation.mp4: the application run over the real recordings.

Install

tar -xzf CanLab-2.0.0-linux-x86_64.tar.gz
cd CanLab/
./CanLab

No Python needed. The binary is Linux x86_64 only and unsigned; on macOS and Windows, run from source (pip install -e ., then canlab).

Status

Beta. The analysis suggests candidates rather than identifying signals, and a confidence figure is a match fraction over the frames loaded, not a proof. Only use transmit features on an isolated bench. 540 tests pass.