elit turns any English EPUB into a custom graded bilingual edition. I built it because I wanted to read certain books for fun while increasing my casual exposure to French.
As a pre-intermediate learner, reading a whole novel in French is mentally exhausting, and it takes away much of my enjoyment of the book. elit tries to create a middle ground: books I already want to read, written partly in the language I want to learn.
elit takes an English EPUB, segments the text, scores those segments by difficulty according to configurable parameters, translates the ones below some difficulty threshold into the target language, and produces a bilingual edition where the target language is woven into the original book.
- elit supports translations into French, Spanish, Brazilian Portuguese, Italian, German, and Dutch.
- By default, elit uses the Opus-MT family of models, which are free, fast, and good enough for this purpose. For better translations, elit can also connect to OpenAI SDK-compatible LLM providers, allowing you to use either local or hosted models. Setting up a local model is especially useful if you want better translations without usage costs, and without running into the copyright automations of commercial models. I am currently using
mistralai/ministral-3-14b-reasoninglocally through LM Studio, with great results. - elit generates the final bilingual EPUB with footnotes for every translated sequence, containing the original English text. These are compatible with Kindle, at least on my device, so it is easy to check the original text while reading.
In my experience, the output works very well. I can read without getting overwhelmed, and still enjoy the book for its own sake. The language exposure feels useful, and the translation footnotes on Kindle are very helpful.
The main pain point is that processing a full book can take hours. This is mitigated by the UI, which lets you tune parameters before committing to the full process, and by the fact that processing a given book is usually a one-time operation.
uv sync
uv pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whlThe spaCy model is distributed outside PyPI and must be installed separately.
Start the web app by passing an EPUB file and a target language. By default, it runs at http://localhost:8642 (use --port <port> if needed).
# General syntax
uv run elit <path-to-epub> --l2 <target-lang>
# Example: Translate a book to French
uv run elit book.epub --l2 fr
# Supported --l2 values: [fr, pt, it, es, de, nl]Use the ? button in the top-left corner to start a guided tour of the UI:
Page of book processed by elit, with footnote in display:


