Bandeo

Self-Hosted · Browser-Based · Go + SvelteKit

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.

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.