Native Haiku app to review your Tesla Sentry / Dashcam recordings: 4-camera synchronized playback, event list with thumbnails, GPS map with OpenStreetMap tiles, alarm timeline markers, snapshots and 4-up MP4 export.
Drop in the contents of a TeslaCam/SentryClips (or SavedClips) folder from a Tesla USB drive and you're ready to go. No conversion, no transcoding, no internet (except for map tiles).
If TeslaViewer for Haiku saves you time, consider supporting development:
- Native Haiku GUI built on BMediaKit, no transcoding required
- Synchronized 2×2 grid of Front / Back / Left repeater / Right repeater
- Global timeline that auto-concatenates the 1-minute clips of an event
- Red tick on the slider marking the exact alarm instant from
event.json - "Go to alarm" jumps all 4 cameras to that instant in one click
- Click any camera to maximize it; click again to return to the grid
- Highlight ring on the camera that triggered the alarm
- Wall-clock time shown alongside elapsed/total (e.g.
00:23 / 02:00 [14:24:51]) - Playback speed: 0.25× / 0.5× / 1× / 2× / 4×
- Event list with thumbnails, text search and date-range filter
- GPS map with OSM tiles, panning, zooming, clickable event pins
- Click the GPS coordinates in the info bar to open the map centered on the event
- Snapshot the current camera frame as PNG
- Export the 4 cameras of a clip into a single 2×2 MP4 via
ffmpeg - Camera id remapping dialog (Tesla camera ids vary per firmware)
- Persisted preferences: last folder, window frame, default speed, camera map
- No external dependencies beyond Haiku system libraries,
curlandffmpeg
make
./TeslaViewer
The window opens on the last folder you used (default: /boot/home/Desktop/Tesla). Use File → Open folder... (Alt+O) to pick another SentryClips or SavedClips directory from a Tesla USB drive.
- Select an event on the left → the 4 cameras load
- Space plays/pauses, A jumps to the alarm
- Click a camera tile to maximize, click again to restore
- S saves a snapshot of the active camera
- Alt+M opens the map of events; click a pin to select that event
- Click on the GPS coordinates in the info bar → opens the map centered there
| Key | Action |
|---|---|
Space |
Play / pause |
A / ↑ |
Go to the alarm instant |
F |
Toggle fullscreen on focused camera |
1 – 4 |
Set the active camera (highlight) |
← / → |
Seek 5 seconds back / forward |
S |
Snapshot the active camera as PNG |
Alt+O |
Open folder... |
Alt+R |
Rescan the current folder |
Alt+M |
Open the event map |
Alt+Q |
Quit |
Requires Haiku with GCC (C++17) and the following packages:
ffmpeg6for the 4-up MP4 export (from HaikuDepot)curlfor downloading OSM tiles (already in Haiku base)- Standard system libraries (
libbe,libmedia,libtracker,libtranslation)
make # builds the TeslaViewer binary
make run # build + run
make clean # remove all build artifacts
The Makefile tracks header dependencies (-MMD -MP), so changing a .h triggers a proper rebuild of the .cpp files that include it.
Each event is a directory containing the 4 MP4 streams for every recorded minute plus event.json and thumb.png:
<root>/
├── 2026-03-25_14-20-38/
│ ├── 2026-03-25_14-19-26-front.mp4
│ ├── 2026-03-25_14-19-26-back.mp4
│ ├── 2026-03-25_14-19-26-left_repeater.mp4
│ ├── 2026-03-25_14-19-26-right_repeater.mp4
│ ├── 2026-03-25_14-20-26-front.mp4
│ ├── ...
│ ├── event.json
│ └── thumb.png
└── ...
Sample event.json:
{
"timestamp": "2026-03-25T14:19:52",
"city": "Chirignago",
"street": "Via Miranese",
"est_lat": "45.4853",
"est_lon": "12.2004",
"reason": "sentry_aware_object_detection",
"camera": "0"
}| Path | Contents |
|---|---|
~/config/settings/TeslaViewer |
preferences (flat BMessage) |
~/config/cache/TeslaViewer/tiles/Z/X/Y.png |
OSM tile cache |
<event>/snapshot_<cam>_<HH-MM-SS>.png |
snapshots taken from the playback |
<event>/4up_<timestamp>.mp4 |
4-up exports |
<event>/4up_<timestamp>.log |
ffmpeg log for that export |
- Tesla Sentry videos have no audio track by design, the app does not play audio.
- The
camerafield inevent.jsonis a numeric id whose mapping changes per firmware. UseFile → Camera mapping...to assign each id you see in your events to the right physical camera; the mapping is saved. - Export uses MPEG-4 because
libx264is not bundled with Haiku'sffmpeg6. The output plays everywhere; file size is roughly 2× compared to x264. - OSM tile traffic is rate-limited by their Tile Usage Policy. The app caches every tile to disk and identifies itself with a proper
User-Agent.
Developer's Note: This software may contain traces of peanuts and LLM. It has been developed with passion for the Haiku platform.
