尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A browser-based comic / manga viewer, inspired by ComicGlass.
Everything runs client-side — your files never leave the browser.
Try it at.檢視完整 README ↗A browser-based comic / manga viewer, inspired by ComicGlass. Everything runs client-side — your files never leave the browser.
Try it at https://cbcruk.github.io/comicyuri/.
.cbz / .zip archives, loose image files, or a whole
folder. Drag-and-drop onto the shelf works too.Ctrl+wheel, the View menu, or double-tap; drag to
pan when zoomed in.[ / ], or narrow
the thumbnail grid to the marked pages.| Key | Action |
|---|---|
← / → | Turn page in the visual direction |
↑ / ↓, PageUp / PageDown | Previous / next |
Space | Next |
Shift + Space | Previous |
Shift + turn key | Skip ten pages |
Home / End | First / last page |
d | Toggle reading direction |
v | Toggle one / two pages |
s | Flip how the current spread is paired |
r | Turn the page a quarter clockwise |
+ / - | Zoom in / out |
t | Thumbnail grid |
b | Bookmark current page |
[ / ] | Previous / next bookmark |
p | Start / stop the slideshow |
, | Reading settings |
f | Fullscreen |
h | Hide / show the menubar |
Esc | Close settings, then the grid, the slideshow, fullscreen, the book |
CBZ archives are ZIP files. src/io/zip.ts parses the central directory and
extracts pages lazily, reading only the byte ranges it needs through Blob.slice
rather than loading the whole archive into memory. Deflated entries are inflated
with the platform's native DecompressionStream, so there is no third-party ZIP
dependency.
This project uses Vite+. With the vp CLI:
vp install # install dependencies
vp dev # start the dev server
vp build # production build
vp check # format, lint and type-check
vp test # unit tests, under happy-dom
vp run test:screen # component tests, in a real Chromium
vp run e2e # browser tests, against a production build
There are three rings, and each one covers what the ring inside it cannot.
vp test runs under happy-dom: the reader's update, the pure calculations
around it, and the IO layer against fakes. Nothing is rendered, so nothing here
depends on a layout or a real pointer.
vp run test:screen mounts components in a real Chromium through Vitest's
browser mode. That is where the things a DOM has to answer live — what the
accessibility tree says, how far a page can scroll, whether the stage takes the
height a hidden menubar gave up. It stops short of the whole app: no router, no
IndexedDB, and each screen stands on its own.
vp run e2e is where that last gap is covered. Playwright builds the app, serves
dist with vp preview, and drives the real thing in Chromium: layout and
computed colour, pointer input including two-finger pinches over CDP, the
Fullscreen API, the folder picker, and whether anything survives a reload.
Books are built on the fly — e2e/fixture/archive.ts writes the PNGs and the
ZIP itself, so no binary fixtures live in the repository. Add --ui (or
vp run e2e:ui) to watch them run.
The browsers Playwright drives are not in node_modules. A fresh checkout
installs them once:
vp exec playwright install chromium
SPEC.md is the contract. Every behaviour this viewer has is one numbered item
there, with the tests that hold it down named underneath. When behaviour
changes, that item and the test names it cites change in the same commit — it is
how a bug report can say "R-246 is wrong" and land on the test that was supposed
to prevent it.