Bandeo
Point Bandeo at a folder of comic archives and it indexes the lot: series, albums, covers, metadata, and reading progress. Open any browser on your network — phone, tablet, laptop — and keep reading where you left off. Everything is served from one small binary you control, on hardware you already have.
- Scans CBR and CBZ archives from any folder tree
- Series and album view with covers and metadata
- Browser-based reader — no app install
- Reading progress and history per device (SQLite)
- File watcher: auto-rescan when you drop in new files
- Guided panel-by-panel reading mode
- ML-based panel, balloon, and arrow detection
- Auto reading-order from detected panels and bubbles
- Single static Go binary, embedded frontend
- Runs on Raspberry Pi, Linux, Windows, macOS
- Phone-, tablet-, and desktop-friendly UI
- No Docker required — launch and go
How it's built
The server is a single Go binary with the SvelteKit frontend embedded via
go:embed. It serves the web app, a REST API for library and reading state,
and the comic content itself — all from one port. Metadata and reading history live
in a local SQLite file next to the library; nothing leaves the machine.
Panel detection runs as an offline pipeline. A YOLO-family model trained on comic pages locates panels, a second pass finds speech balloons, and a third identifies reading-order arrows. The results are stored alongside the album so the reader can zoom into each panel in the right order and display bubbles on demand.
Panel-detection pipeline
INGEST
Extract pages from CBR/CBZ archives, normalise resolution.
PANELS
YOLO model detects panel bounding boxes per page.
BUBBLES
Second pass locates speech balloons within panels.
ARROWS
Reading-order arrows stitched across panel clusters.
SORT
Panels and bubbles ordered into a guided reading script.
SERVE
Results cached per album, streamed by the Go server.