Read manga the way you read webtoons. tate (縦, "vertical") turns a chapter into one vertical strip of panels, in reading order, sized for a phone screen, and reads it in an installable web app that works offline.
Library · a page as it fits on a phone · the same page in tate
It has two parts:
- Processor (
processor/): a command-line tool for a normal PC, CPU only. It reads a CBZ/ZIP, a PDF, a folder of images, or one image. It detects panels and speech balloons, orders panels right to left and top to bottom (--direction ltrreads left to right), never cuts through a balloon, keeps spreads and wide panels whole, and writes a.tatefile. - Reader (
web/): a mobile-first web app at https://heroesofcode.github.io/tate/. It keeps a library on the device (IndexedDB), works offline once loaded, remembers where you stopped in each chapter, and only keeps nearby panels decoded so long chapters scroll smoothly.
The file shared between them is specified in docs/format.md.
You need uv (on Arch-based systems: sudo pacman -S uv). Python 3.11 or newer is fetched by uv if needed.
uv tool install "git+https://github.com/heroesofcode/tate#subdirectory=processor"pipx works with the same URL. To update later, run uv tool upgrade tate.
tate process chapter.cbz
tate process volume.pdf --pages 5-40 --title "Chapter 1"This writes chapter.tate next to where you run it and prints the number of pages and panels. The first run downloads the panel detector (10 MB) into your user cache. Add --preview strip.png to look at the whole strip on the PC first. All options are in processor/README.md.
- Open https://heroesofcode.github.io/tate/ on the phone.
- Install it:
- Android (Chrome): tap Install app in tate, or browser menu → Install app / Add to Home screen.
- iPhone (Safari): Share → Add to Home Screen.
- Move the
.tatefile to the phone (USB, LocalSend, a chat app, cloud storage, anything that gives you a file). - In tate, tap + and pick the file. On Android, once tate is installed, you can also use Share → tate from a file manager or chat app.
Chapters stay on the phone and open without a connection. Tap the page to show or hide the controls. Tap Keep on device in the library to ask the browser not to clear storage when space runs low.
A plain .cbz or .zip of page images can also be imported directly. It is shown page by page, without panel splitting.
# processor
cd processor && uv sync && uv run pytest
# reader
cd web && pnpm install && pnpm devCI runs lint, format, type checks, unit tests and builds for both parts, an end-to-end test that processes a synthetic chapter and reads it in the built app, and a dependency audit. Every push to main deploys the reader to GitHub Pages. Details are in each part's README.
- The
cvfallback detector does not protect speech balloons, so a balloon can be cut where it crosses a panel border. The defaultyolodetector does protect them. - Panels much narrower than the strip are scaled up at most 1.6× and centered, which leaves white margins.
- A chapter takes about 1 MB per page.
- iOS has no Share → tate entry, so import from the + button there.
- No colorization or translation.
tate is released under the MIT license.
The yolo detector downloads third-party weights at runtime. They are not part of this repository: leoxs22/manga-panel-detector-yolo26n, trained on Manga109-s and licensed AGPL-3.0, in the ONNX export by mednasserallah. The cv and page detectors do not use them. See processor/README.md.
The screenshots show "Give My Regards to Black Jack" (ブラックジャックによろしく) by SHUHO SATO, which the author makes available for free secondary use through densho810. The manga itself is not included in this repository.


