chimimouryou
A Japanese e-book reader built for learners, in your browser or on your own
server. It is a fork of ッツ Ebook Reader:
lookups with Yomitan or a built-in dictionary, furigana, difficulty estimates,
reading statistics and Anki mining. The reader itself, and its Yomitan support,
are upstream's.
Try it in your browser
Open chimireader.github.io and add an EPUB.
Nothing to install and no account:
books stay in your browser, or sync through your Google Drive or a folder.
Settings → Dictionary installs JMdict in one tap, and desktop browsers can
download the furigana and difficulty tools. Coming from ッツ Reader? Export a
Zip File there and use Import Backup here. Phones and Yomitan:
docs/LEARNING.md.
On Android there is also an APK of it on each
release
(apps/android).
Or host it for your Calibre library
Point it at a Calibre library and everyone in the house reads from it, with
accounts, synced progress and highlights, Anki mining and server-side
difficulty estimates.

Books, manga and ONScripter visual novels from one library; highlights, search,
audiobooks, AI helpers and Anki mining in the reader; difficulty estimates and
reading statistics for learners. See Features.
On an e-reader, the KOReader plugin browses the
library and keeps your place and reading time in step with the server.
Screenshots show books from the maintainer's own library; the titles belong to their publishers.
Setup
You need Docker with the Compose plugin
(Docker Desktop on Windows and macOS). Prebuilt images exist for amd64 and arm64.
1. Get it
git clone https://github.com/blankiekun/chimimouryou && cd chimimouryou
cp .env.example .env
In .env, set:
IMAGE_PREFIX=ghcr.io/blankiekun/chimimouryou # prebuilt images, nothing to compile
IMAGE_TAG=latest
COMPOSE_PROFILES=import # add books from the app
PUID=1000 # your `id -u` and `id -g` (Linux)
PGID=1000
For learners, COMPOSE_PROFILES=import,difficulty,mokuro also runs the
difficulty estimates and
manga text (see
server size).
2. Choose a library
-
An existing Calibre library: point at the folder that holds metadata.db
(quote paths with spaces):
LIBRARY_PATH="/home/you/Calibre Library"
The server adds a cover.jpg to book folders without one, and books you add
in the app go into Calibre. Back the library up first, and close Calibre
while you add books from the app.
-
A new, empty library: set LIBRARY_PATH=./library and create the empty
folder (mkdir library). With the import profile on, the import service makes
a Calibre library there on its first start (only in a completely empty folder
you own; its log says so). After you sign in, add books with Import in the library or by dropping files
on it. The library is a normal Calibre library, so Calibre can open it later.
3. Choose how you reach it
-
Just this computer (a laptop or desktop): sign in over plain HTTP. The
port is only open to this machine, so passwords never cross a network.
HTTP_PORT=127.0.0.1:8080
ALLOW_HTTP_ACCOUNTS=1
Open http://localhost:8080.
-
A server (home server, VPS) for several people or devices: keep
ALLOW_HTTP_ACCOUNTS=0 and put HTTPS in front. With
Caddy on the same machine (it gets the certificate
itself), set
HTTP_PORT=127.0.0.1:8080
REAL_IP_FROM=172.16.0.0/12 # Docker's network: Caddy's requests come from there
and add this to the Caddyfile:
books.example.com {
reverse_proxy 127.0.0.1:8080
}
Open https://books.example.com. No domain? tailscale serve --bg 8080
gives an HTTPS address inside your tailnet. Other proxies:
docs/INSTALL.md.
4. Start it and sign in
docker compose up -d
docker compose exec account ebook-account initial-admin
The second command shows the password of the first account, admin. Sign in
(person icon at the top right), and change the password in Settings → Account.
There is no sign-up: add the other readers in Settings → Account → Admin panel.
The library fills in about a minute after the first start (longer for a big
library, while covers are extracted).
Update with git pull && docker compose pull && docker compose up -d. The
install guide has the rest: trusted networks (reading without
signing in), permissions, backups, difficulty estimates and building the images
yourself.
Documentation
- docs/INSTALL.md: installing, HTTPS, accounts, who may do what
- docs/CONFIGURATION.md: every setting
- docs/LEARNING.md: for readers: Yomitan, Anki cards, furigana, manga text, difficulty
- Phones: Firefox for Android runs Yomitan; on iPhone, add the site to the Home Screen (docs/LEARNING.md → Phones and tablets)
- ARCHITECTURE.md: how it works; CONTRIBUTING.md: changing it
- docs/READINGS.md: how word lists read ambiguous words, and the "Known" furigana style
- Privacy policy and Terms of service: the social hub, Community and Discord status
- docs/QA.md: test plan; CHANGELOG.md; themes.md: writing themes
- Prebuilt images:
ghcr.io/blankiekun/chimimouryou-{web,services,import,difficulty,mokuro} (see INSTALL.md, "Updating")
How you read with it
- Look words up with Yomitan (or another
dictionary extension) while you read: in books, in manga with mokuro text
laid over the pages, and in visual novels with the game's text laid over
the screen.
- Make Anki cards with Yomitan as usual. With Settings → Anki on, the
reader fills the new card's empty audio and picture fields: the sentence's
audio from the audiobook (or the AI voice) in books, and a screenshot and the
line's voice in visual novels.
- Pick the next book by difficulty. Every book can have a difficulty
estimate and the share of its kanji you have already met; the Store filters
and sorts by difficulty and length, so the next book can be just a little
harder than the last.
Features
For learners
- Difficulty estimates with Jiten's
features and a model trained on jiten.moe's scores, computed on your server:
a score with its likely range, the vocabulary needed for 95% coverage, and how
many of the book's kanji you have already met.
- Statistics: characters, time and speed per day and per book, streaks,
reading goals (upstream's, synced per account) and an estimate of the words known
over time.
- Anki mining: cards made with Yomitan get the sentence's audio from the
audiobook (or the AI voice) and, in visual novels, a screenshot and the
line's voice.
- Manga text: page text from mokuro,
made on the server or uploaded, laid over the pages for Yomitan. Without a
server,
.mokuro files work too, or a desktop browser makes the text itself.
Library
The Calibre library is the bookshelf. Home has your reading at a glance:
characters read today and this week, reading streaks, speed and the number of
words met and known, then "Continue reading" and "My books". Store is the
whole library, as books or as series, with filters (type, reading status, last
read, difficulty, length, tags) and sorting.

| Store |
Series |
 |
 |
- Covers are extracted from EPUBs that have none in Calibre; series come from
Calibre or are guessed from volume numbers in titles, and readers with the
series permission can group books into series themselves.
- Adding a file (Import, or dropping it on the library) puts it into Calibre.
- Books open straight from the server and stay cached in the browser. Books on
Home are downloaded in the background, so they can be read offline; progress
made offline uploads when the server is back.
Clicking a cover opens the book's page: length in characters and the reading
time at your speed, progress, the difficulty estimate, Calibre's metadata and
the rest of the series. "Find details" fills in a description, genres and a
cover from AniList, VNDB or Jiten.

Reading
The reader is upstream's: EPUB, HTMLZ and plain text, continuous or paginated,
vertical or horizontal, made for Yomitan and other dictionary extensions.
Progress, statistics and settings sync across devices with your account, with
separate reader styles for phones and larger screens.
- Highlights and notes in four colours: select text and pick a colour. The
reader panel's Highlights tab lists them by chapter, to jump to, edit, copy or
download as Markdown.
- Search the book (Ctrl+F), ignoring furigana, with
optional kana-insensitive and regular-expression matching.
- Listen: an audiobook with SRT/VTT subtitles follows the text and
highlights the line being read. No subtitles? Whisper can make them in the
browser. Audiobooks can also come from an
Audiobookshelf server (plugin).
| Search |
Highlights |
 |
 |
Desktop keys (physical positions, the same on any layout): PageDown/PageUp
pages, n/m chapters, b/r bookmark and return,
Space auto-scroll (a/d faster/slower), p the reading
tracker. Upstream's README covers every
control, the tracker and import/export.
Manga and visual novels
- Manga (CBZ, or ZIPs of images) open in a page-turning reader: right to
left, left to right or a vertical strip.
- Visual novels for ONScripter run in the browser on
CONscripter, with the text laid
over the game for Yomitan (backlogs and choices too), an optional backlog
beside it, and the text counted in progress, statistics and kanji met. Games
are ZIPs or unpacked folders on the server (
VN_PATH); saves sync across
devices and big games can be kept offline. Games for other engines can often
be converted with
conscripter-convert.

AI helpers (plugin)
Off until you turn on Settings → General → Plugins → AI tools, and they use your
own keys (OpenRouter for text,
ElevenLabs for the voice), called straight from the
browser:
- Ask AI about a selection: explain, translate, nuance, or your own presets,
with follow-up questions, in English or Japanese.
- Story so far: a spoiler-free recap of everything before your position, for
coming back to a book after a break.
- Lorebook: characters, places and terms collected as you read, exportable
as SillyTavern World Info and handed on to the next book of a series.
- AI voice: reads aloud from your position, highlighting each phrase.

Accounts, themes and the admin panel
- Accounts with per-account permissions (
import, series, difficulty);
there is no sign-up, admins add readers.
- Themes colour the whole app, follow the system's light and dark mode, and
can be written or imported (themes.md).
- Admin panel: accounts and permissions, updates to the latest release or
main (on servers set up with scripts/deploy.sh), the visual novel engine,
catalog and series tools, and difficulty jobs.
Good to know
- EPUBs that render wrongly (e.g. unclosed links swallowing the text) may import
correctly with Settings → Data → "Epub Import Fixes" set to standard or extended.
- Progress counts Japanese characters only, without Latin letters or punctuation.
- Books from the Calibre library come back from the server, but other browser
data (settings without an account, books imported only into the browser)
lives in the browser's storage, which the browser may clear when the disk fills
up. Settings → Data shows whether storage is persistent.
License
chimimouryou is licensed under the GNU General Public License v3.0 or later.
Files whose header says @license BSD-3-Clause (upstream's, and this fork's from before the
switch) are also available under the BSD 3-Clause terms in LICENSE-BSD; the work as a
whole is GPL-3.0-or-later.
Credits
ッツ Ebook Reader by ッツ Reader
Authors (BSD 3-Clause, see LICENSE-BSD), from which this fork derives;
Jiten for the difficulty features and
deconjugation rules (Apache-2.0, see NOTICE). The level check's and word test's words and ranks
(apps/web/src/lib/data/difficulty/placement-items.json) are sampled from Jiten's frequency list (CC BY-SA 4.0); its made-up words were checked against JMdict, JMnedict, Japanese Wiktionary and further dictionaries. The hard word test's meanings (apps/web/src/lib/data/difficulty/placement-hard-items.json) are short excerpts from Japanese Wiktionary by its contributors (CC BY-SA 4.0), via wiktionary-to-yomitan; its wrong readings use KANJIDIC2 (EDRDG, CC BY-SA 4.0) through yurigana. Readings in context and the "Known"
furigana style come from yurigana, whose reading model is
trained on public-domain works from Aozora Bunko and on
sentences with reviewed readings from Tatoeba (CC BY 2.0 FR, by
Tatoeba's contributors); neither is redistributed here. The built-in dictionary runs
Yomitan's lookup engine by the Yomitan Authors
(GPL-3.0-or-later, see its LICENSE), with kanji
variants from kanji-processor (MIT). Its
one-tap dictionary is JMdict
by the Electronic Dictionary Research and Development Group (CC BY-SA 4.0), packed for Yomitan
by jmdict-yomitan and downloaded when the site is
built (it isn't in the repository). Manga text made in the browser downloads, from Hugging Face,
ogkalu's comic text detector
and manga-ocr by kha-white (in
onnx-community's ONNX export), all Apache-2.0;
audiobook subtitles download OpenAI's Whisper (MIT, ONNX
exports by onnx-community); none is redistributed here.
chimimouryou is not affiliated with or endorsed by any of these projects.