Skip to content
the-databasePublic

About

A lean, high-throughput manga, comic and image reader in Rust, for Windows, Linux and Android

Resources

Stars

16 stars

Watchers

0 watching

Forks

Repository files navigation

yosh

A lean, high-throughput local manga/comic reader in Rust (winit + wgpu + egui). Its defining feature is zero-hitch page turning and continuous scrolling, built on a parallel decode-ahead pipeline: worker threads decode pages full-res, downscale (CPU or GPU), upload to GPU textures, and feed a bounded ring buffer ahead of the read position, so page changes are just texture swaps.

Install (Windows)

Grab the latest release:

  • yosh-setup-x64.exe — installer (per-user, no admin). Adds a Start Menu shortcut and lets you tick which file types open in yosh — comic archives (.cbz .cbr .cb7), images (.png .jpg .jpeg .webp .gif .bmp .avif), or both. For a type another app already owns (e.g. .png → Photos), Windows keeps that default until you confirm yosh once via right-click → Open with → Choose another app (or Settings → Apps → Default apps) — installers can't change it silently.
  • yosh-windows-x64-portable.zip — portable build. Unzip anywhere and run yosh.exe; settings live next to it (yosh-state.json), so it leaves nothing behind and travels on a USB stick. (The bundled yosh-portable.txt marker enables this; delete it to use the normal %APPDATA% location.)
  • yosh-windows-x64.exe — the bare single executable (settings in %APPDATA%).

The installer/exe are unsigned, so SmartScreen may warn on first run — choose More info → Run anyway.

Install (Linux)

Download yosh-linux-x64 from the latest release, make it executable and run it:

chmod +x yosh-linux-x64
./yosh-linux-x64 "<path>"

It's a single binary. It needs a desktop session (X11 or Wayland) and a GPU driver with Vulkan support.

Install (Android)

Download yosh-android.apk from the latest release and install it (allow installs from your browser or file manager when Android asks).

Build & run

cargo run --release -p yosh -- "<path>" [start_page]

<path> is a folder of images, or a .cbz/.zip, .cbr/.rar, or .7z/.cb7 archive. With no argument, yosh opens the library grid (if a library folder was set) or shows the keys overlay.

Default cargo build needs no system libraries (pure-Rust decoders).

Formats

  • Sources: image folders, CBZ/ZIP, CBR/RAR (UnRAR), 7z/CB7.
  • Images: PNG, JPEG, WebP, GIF, BMP, JPEG XL (.jxl), PSD, ICO, TIFF, TGA, DDS, OpenEXR, Radiance HDR, QOI, PNM. AVIF is opt-in (see below).
    • Animated GIF and animated WebP play back, with a mini panel for play/pause and frame stepping.
    • ICO files step through their contained resolutions ("layers") in that same panel.
    • PSD shows the flattened composite (8-bit RGB); it's browsable in folders/archives but is not registered as a default .psd handler (a "View with yosh" right-click entry is offered instead).

AI upscaling (optional)

Pages shown larger than their source can be redrawn by an AI model a moment after they appear: the MangaJaNai models for grayscale pages, IllustrationJaNai for colour. It's an add-on that stays off until you install it from ⚙ Settings → AI upscaling → Install the add-on. yosh downloads MangaJaNaiCLI, which fetches the runtime for your GPU and the models (about 1 GB with an NVIDIA GPU).

  • GPUs: NVIDIA (TensorRT, plus TensorRT-RTX on Windows), and AMD or Intel through DirectML on Windows. On Linux, NVIDIA only. Not on Android.
  • Profiles: Shift+1 2 3 pick the built-in Quality, Balanced (the default) or Performance profiles. Ctrl+1…9 are your own, set up in Settings → AI upscaling → Edit profiles: which model upscales gray or colour pages at which source height and scale. You can also import a MangaJaNai GUI workflow (.mwf). U turns upscaling off or on for the current book.
  • Removing it: Settings → AI upscaling → Remove the add-on (the Windows uninstaller also removes it).

Controls (press F1 in-app for the full list)

Flip ← → (reading-direction aware), ↑ ↓ / Space / PgUp · PgDn; click a left/right edge; wheel
Home / End first / last page
[ / ] previous / next book (folder or archive)
Views 9 fit window · 8 fit width · 0 100% (1:1) · 7 two-page L→R · 6 two-page R→L
S / D / C / O spread ↔ single · direction RTL↔LTR · continuous scroll · shift spread pairing
R rotate 90° clockwise (single-page view; resets on opening a new book)
+ - zoom; drag to pan
Ctrl+wheel zoom at the cursor — the pixel under it stays put, in the same steps as + -
Z stretch small pages (off: a fit never scales past 100% native; zoom still can)
U AI upscaling on/off for this book (needs the optional add-on; see Settings)
Shift+1 2 3 / Ctrl+1…9 AI upscaling profile: built-in Quality / Balanced / Performance, or your own (Settings → AI upscaling → Edit profiles); Shift+0 turns it off
E show in Explorer (opens the folder and selects the file/archive)
I image info overlay
B bottom seekbar (reveals near the bottom edge; click/drag to jump)
T page-turn transition (slide + soft fade on flip)
G show/hide the animation panel (animated GIF / WebP)
double-click fullscreen (middle of the page); F11 also toggles
Esc quit

Reading position (per volume), reading direction, fit, layout, spread offset, scroll, seekbar visibility, the page-turn transition toggle, the stretch-small-pages toggle, and the spine shadow (book-gutter shading on un-joined two-page spreads, in ⚙ Settings) are persisted.

Languages

The UI is available in English, Español, Português, Français, Deutsch, Русский, 日本語, 简体中文, 繁體中文 and 한국어. It follows the system language by default; pick another under ⚙ Settings → Language (desktop) or the options popup (Android).

The non-English translations are first drafts and haven't been reviewed by native speakers yet — corrections are very welcome. Each language is one file in crates/yosh-engine/src/i18n/ (es.rs, pt.rs, fr.rs, de.rs, ru.rs, ja.rs, zh_hans.rs, zh_hant.rs, ko.rs): edit the strings, keep the {…} placeholders, and open a pull request. To add a language, copy en.rs; the compiler will flag any string you missed.

AVIF (optional)

AVIF decode uses the image crate's native (dav1d) backend, gated behind an off-by-default feature so the standard build stays toolchain-free:

cargo build --release -p yosh --features avif   # requires nasm + dav1d (or a vendored build)

Benchmarks

  • cargo run --release -p yosh-engine --example seek_bench -- "<book>" — engine page throughput (read, decode, HQ resize, GPU upload) through the real decode pool.
  • scripts/flipbench.ps1 -Base <ref> -Book "<book>" — UI frame timing (egui pass, submit/present, frame pacing) of a --features flipbench build, base commit vs working tree.

crates/decode_bench and crates/present_bench are the throwaway spikes that validated the throughput ceiling; see SPIKES_RESULTS.md.

Related projects

About

A lean, high-throughput manga, comic and image reader in Rust, for Windows, Linux and Android

Resources

Stars

16 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages