尚未检测到更新。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.