TranslateBooksWithLLMs — official skill
This is the official skill for TranslateBooksWithLLMs (TBL), created and maintained by @hydropix and licensed under AGPL-3.0.
Source: https://github.com/hydropix/TranslateBooksWithLLMs
Unlike a "proxy" skill that re-describes the workflow in prose, this skill runs
the project's real engine (translate.py). You therefore get the actual
chunking, HTML/XML tag and placeholder preservation, glossary consistency, and
optional refinement pass — the same quality as the desktop app, driven from the
command line.
When to use this skill
Use it when the user provides an EPUB, DOCX, SRT, or TXT file and a target language and wants the entire file translated, with formatting preserved.
Do not use it for translating a single short passage that fits in a chat reply, or for editing the upstream Python project itself.
1. Set up the tool (once per environment)
Requires Python 3.8+ and Git. Clone the repository and install dependencies:
git clone https://github.com/hydropix/TranslateBooksWithLLMs.git
cd TranslateBooksWithLLMs
python -m venv venv
# Linux/macOS:
source venv/bin/activate
# Windows:
# venv\Scripts\activate
pip install -r requirements.txt
All commands below are run from the repository root, inside this virtualenv.
2. Gather the inputs you need from the user
- Source file — path to the EPUB / DOCX / SRT / TXT to translate.
- Languages — source and target (e.g. English to French). Defaults are
source
English, targetChinese; always confirm the target. - Provider — pick based on the user's hardware and privacy needs:
- Cloud (no local hardware needed): OpenRouter, OpenAI, Gemini, Mistral, DeepSeek, Poe, or NVIDIA NIM. Best quality and works on any machine. Several offer a free tier (e.g. Gemini, some OpenRouter models, Poe), so even a user without a GPU can translate at no cost. Requires the user's own API key, configured securely (see step 3 — never pasted into chat).
- Local / private / offline: Ollama, runs on the machine, no API key, no
data leaves the host. Needs capable hardware; prefer a solid model
(e.g.
qwen3:14b) for accurate tag preservation. Smaller models likegemma3/translategemma:4bwork but are lighter and may need the engine's placeholder-repair fallback.
- Optional — a glossary file (
.json/.csv) for consistent entity translations, a literary refinement pass, OCR/typographic cleanup, or text-to-speech audio of the result.
3. Prepare the chosen provider
Ollama (local): confirm Ollama is installed and running, pull a model if needed, and verify it is present.
ollama pull qwen3:14b ollama listCloud provider: the API key must reach the tool without ever passing through the conversation. The tool reads keys from the environment / a local
.envautomatically, so the agent does not need the key on the command line.- Local runtime (Claude Code, Goose, OpenClaw on the user's machine): the
user sets the key once, out of band, as an environment variable or in a
.envfile (e.g.OPENROUTER_API_KEY=...). Then run the tool with no--*_api_keyflag — it picks the key up on its own. - Hosted runtime (a skill platform): use that platform's "bring your own key" / secret store, which injects the key as an environment variable into the sandbox. Never the chat.
- Do not ask the user to type or paste an API key into the conversation, and never echo or log it.
- Local runtime (Claude Code, Goose, OpenClaw on the user's machine): the
user sets the key once, out of band, as an environment variable or in a
4. Run the translation
The output file is auto-named {name} ({target_lang}).{ext} next to the input
unless you pass -o.
Local with Ollama:
python translate.py -i "book.epub" -sl English -tl French \
--provider ollama -m qwen3:14b
Cloud (OpenRouter shown; swap provider/model as needed). The key comes from
the environment / .env, so it is not on the command line:
# OPENROUTER_API_KEY is set in the environment or .env beforehand
python translate.py -i "book.epub" -sl English -tl French \
--provider openrouter -m anthropic/claude-sonnet-4
Recognized environment variables: OPENROUTER_API_KEY, GEMINI_API_KEY,
OPENAI_API_KEY, MISTRAL_API_KEY, DEEPSEEK_API_KEY, POE_API_KEY,
NIM_API_KEY. (The CLI also accepts matching --*_api_key flags, but avoid
them: a key on the command line leaks into the process list and shell history.)
For a local OpenAI-compatible server (llama.cpp, LM Studio, vLLM), use
--provider openai --api_endpoint http://localhost:8080/v1/chat/completions.
Useful options
| Option | Effect |
|---|---|
-o, --output |
Explicit output path (default: auto-named beside input) |
--refine |
Second pass that polishes literary style |
--refine-only |
Polish an already-translated file (no translation pass) |
--text-cleanup |
Fix OCR/typographic defects (broken lines, spacing) |
--glossary PATH |
Inject a .json/.csv glossary per chunk for consistency |
--tts |
Generate audio of the translation via Edge-TTS |
See docs/CLI.md for the full reference and docs/GLOSSARY.md for the glossary
format.
5. Return the result
Give the user the path to the translated file. It is the same format as the input, with chapter structure, inline formatting, and SRT timecodes preserved.
Guardrails
- The engine preserves SRT indices/timecodes and inline tags automatically — do not hand-edit them in the output.
- Do not claim local-only privacy when a cloud provider/API key is being used.
- Long books are checkpointed automatically. If a run is interrupted, re-run the same command to resume where it stopped.
- Do not omit, summarize, merge chapters, or rewrite the author's voice; the tool already handles faithful, formatting-preserving translation.
- Never ask for, store, echo, or log a user's API key, and never put it on the
command line. Keys reach the tool only via the environment /
.env(local) or the platform's secret store (hosted).
Attribution and license
TranslateBooksWithLLMs is authored and maintained by @hydropix and licensed under AGPL-3.0. If you run this skill (or the underlying tool) as a network service, AGPL-3.0 §13 requires that you offer your users the corresponding source of the version you are running, and that you preserve this attribution and license.