MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Browser-based, fully client-side comic and manga viewer for CBZ/ZIP archives, images, and folders
MediaTypeScript · HTMLGitHub @cbcrukOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A browser-based comic / manga viewer, inspired by ComicGlass.
Everything runs client-side — your files never leave the browser.
Try it at.Read the full 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.