{"id":50614306,"url":"https://github.com/the-database/yosh","last_synced_at":"2026-06-06T07:01:05.171Z","repository":{"id":362407605,"uuid":"1255698108","full_name":"the-database/yosh","owner":"the-database","description":"A lean, high-throughput local manga/comic reader in Rust","archived":false,"fork":false,"pushed_at":"2026-06-04T05:02:42.000Z","size":452,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T05:23:49.263Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/the-database.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-01T05:04:20.000Z","updated_at":"2026-06-04T05:09:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/the-database/yosh","commit_stats":null,"previous_names":["the-database/yosh-rust"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/the-database/yosh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-database%2Fyosh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-database%2Fyosh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-database%2Fyosh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-database%2Fyosh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/the-database","download_url":"https://codeload.github.com/the-database/yosh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-database%2Fyosh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33972398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-06T07:01:04.297Z","updated_at":"2026-06-06T07:01:05.162Z","avatar_url":"https://github.com/the-database.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yosh\n\nA lean, high-throughput local manga/comic reader in Rust (`winit` + `wgpu` + `egui`). Its defining\nfeature is zero-hitch page turning and continuous scrolling, built on a parallel decode-ahead pipeline:\nworker threads decode pages full-res, downscale (CPU or GPU), upload to GPU textures, and feed a bounded\nring buffer ahead of the read position, so page changes are just texture swaps.\n\n## Install (Windows)\nGrab the latest [release](https://github.com/the-database/yosh/releases):\n- **`yosh-setup-x64.exe`** — installer (per-user, **no admin**). Adds a Start Menu shortcut and lets\n  you tick which file types open in yosh — **comic archives** (`.cbz .cbr .cb7`), **images**\n  (`.png .jpg .jpeg .webp .gif .bmp .avif`), or both. For a type another app already owns (e.g. `.png`\n  → Photos), Windows keeps that default until you confirm yosh once via right-click → *Open with* →\n  *Choose another app* (or Settings → Apps → Default apps) — installers can't change it silently.\n- **`yosh-windows-x64-portable.zip`** — portable build. Unzip anywhere and run `yosh.exe`; settings\n  live next to it (`yosh-state.json`), so it leaves nothing behind and travels on a USB stick. (The\n  bundled `yosh-portable.txt` marker enables this; delete it to use the normal `%APPDATA%` location.)\n- **`yosh-windows-x64.exe`** — the bare single executable (settings in `%APPDATA%`).\n\nThe installer/exe are unsigned, so SmartScreen may warn on first run — choose *More info → Run anyway*.\n\n## Build \u0026 run\n\n```sh\ncargo run --release -p yosh -- \"\u003cpath\u003e\" [start_page]\n```\n\n`\u003cpath\u003e` is a folder of images, or a `.cbz/.zip`, `.cbr/.rar`, or `.7z/.cb7` archive. With no argument,\nyosh opens the library grid (if a library folder was set) or shows the keys overlay.\n\nDefault `cargo build` needs no system libraries (pure-Rust decoders).\n\n## Formats\n- Sources: image folders, CBZ/ZIP, CBR/RAR (UnRAR), 7z/CB7.\n- Images: PNG, JPEG, WebP, GIF, BMP, JPEG XL (.jxl), PSD, ICO, TIFF, TGA, DDS, OpenEXR, Radiance\n  HDR, QOI, PNM. AVIF is **opt-in** (see below).\n  - Animated GIF and animated WebP play back, with a mini panel for play/pause and frame stepping.\n  - ICO files step through their contained resolutions (\"layers\") in that same panel.\n  - PSD shows the flattened composite (8-bit RGB); it's browsable in folders/archives but is **not**\n    registered as a default `.psd` handler (a \"View with yosh\" right-click entry is offered instead).\n\n## Controls (press \u003ckbd\u003eF1\u003c/kbd\u003e in-app for the full list)\n| | |\n|---|---|\n| Flip | ← → (reading-direction aware), ↑ ↓ / Space / PgUp · PgDn; click a left/right **edge**; wheel |\n| `Home` / `End` | first / last page |\n| `[` / `]` | previous / next book (folder or archive) |\n| Views | `9` fit window · `8` fit width · `0` 100% (1:1) · `7` two-page L→R · `6` two-page R→L |\n| `S` / `D` / `C` / `O` | spread ↔ single · direction RTL↔LTR · continuous scroll · shift spread pairing |\n| `J` | seek mode: **step** (see every page) ↔ **jump** (skip ahead) |\n| `+` `-` | zoom; drag to pan |\n| `I` | image info overlay |\n| `B` | bottom seekbar (reveals near the bottom edge; click/drag to jump) |\n| `G` | show/hide the animation panel (animated GIF / WebP) |\n| double-click | fullscreen (middle of the page); `F11` also toggles |\n| `Esc` | quit |\n\nReading position (per volume), reading direction, fit, layout, spread offset, scroll, seek mode,\nand seekbar visibility are persisted.\n\n## AVIF (optional)\nAVIF decode uses the `image` crate's native (dav1d) backend, gated behind an off-by-default feature so\nthe standard build stays toolchain-free:\n\n```sh\ncargo build --release -p yosh --features avif   # requires nasm + dav1d (or a vendored build)\n```\n\n## Benchmarks\n`crates/decode_bench` and `crates/present_bench` are the throwaway spikes that validated the throughput\nceiling; see `SPIKES_RESULTS.md`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-database%2Fyosh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthe-database%2Fyosh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-database%2Fyosh/lists"}