Epub translate
Skill eugenepyvovarov/mcpbundler-agent-skills-marketplace/epub-translate
Translate EPUB (.epub) ebooks to another language by unpacking the EPUB container, extracting XHTML block-level fragments into JSONL translation units, translating them via the OpenAI Responses API (e.g. gpt-5.1 / gpt-5-mini) while preserving markup, updating language metadata, and repackaging a valid EPUB (mimetype-first and uncompressed). Use when Codex needs to translate and rebuild EPUB files.From its SKILL.md
npx -y skills add eugenepyvovarov/mcpbundler-agent-skills-marketplace --skill epub-translateAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
4 things to look at
- reads credentialsReads from 2 credential sources: `OPENAI_API_KEY` and 1 more.
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 5 commands, including `scripts/epub-translate setup` and 4 more.
- fetches URLsInstructs the agent to fetch 1 URL, including https://api.openai.com/v1/responses.
SKILL.md
4.4 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
EPUB Translate
Workflow
- One-time setup (writes
.skills-data/epub-translate/.env):scripts/epub-translate setup - Extract translation units:
scripts/epub-translate extract --epub /path/book.epub - Translate via OpenAI API:
scripts/epub-translate translate --job-dir <job-dir> --target-lang <bcp47> [--fraction 0.1] - Apply + repack:
scripts/epub-translate apply --job-dir <job-dir> --translations <job-dir>/translations.jsonl --target-lang <bcp47> --out-epub /path/book.<bcp47>.epub - Optional: validate output:
scripts/epub-translate validate --epub /path/book.<bcp47>.epub
Commands
scripts/epub-translate setup:- Prompts for
OPENAI_API_KEY(saved to.skills-data/epub-translate/.env). - Prompts for default
OPENAI_MODEL(e.g.gpt-5.1,gpt-5-mini).
- Prompts for
scripts/epub-translate extract ...:- Unzips the EPUB into a per-run job dir under
.skills-data/epub-translate/tmp/. - Parses
META-INF/container.xml→ package document (.opf) → manifest/spine. - Extracts XHTML
<head><title>and leaf block-level XHTML fragments (inner HTML) in reading order intounits.jsonl. - Optional: include OPF
dc:titlevia--include-opf-title.
- Unzips the EPUB into a per-run job dir under
scripts/epub-translate translate ...:- Reads
<job-dir>/units.jsonland writes<job-dir>/translations.jsonl. - Uses the OpenAI Responses API (
https://api.openai.com/v1/responses). - Resume-safe by default: if
translations.jsonlalready contains some ids, they are skipped.
- Reads
scripts/epub-translate apply ...:- Applies translated fragments back into the unpacked XHTML files.
- Updates
dc:languagein the OPF andxml:langin the XHTML. - Repackages as a valid EPUB (writes
mimetypefirst, stored/uncompressed).
scripts/epub-translate validate ...: checks basic EPUB container invariants.
JSONL formats
units.jsonl (input to translation) has one JSON object per line, e.g.:
{"id":1,"kind":"xhtml-fragment","doc_path":"EPUB/chapter1.xhtml","xpath":"/html[1]/body[1]/p[3]","tag":"p","source_inner_html":"Hello <em>world</em>!","source_markup_hash":"..."}
translations.jsonl (output from translation) must contain:
{"id":1,"translated_inner_html":"Hola <em>mundo</em>!"}
Translation rules (markup-safe)
- Translate only human-readable text, not markup.
- Do not change any tags, nesting, attribute names, attribute values, URLs, IDs, or filenames.
- Keep entities/character references as-is (e.g.
&, ). - If a fragment contains non-translatable text (code, formulas, URLs), leave it unchanged.
Local data and env
- Store all mutable state under <project_root>/.skills-data/<skill-name>/.
- Keep config and registries in .skills-data/<skill-name>/ (for example: config.json, <feature>.json).
- Use .skills-data/<skill-name>/.env for SKILL_ROOT, SKILL_DATA_DIR, and any per-skill env keys.
- Install local tools into .skills-data/<skill-name>/bin and prepend it to PATH when needed.
- Install dependencies under .skills-data/<skill-name>/venv:
- Python: .skills-data/<skill-name>/venv/python
- Node: .skills-data/<skill-name>/venv/node_modules
- Go: .skills-data/<skill-name>/venv/go (modcache, gocache)
- PHP: .skills-data/<skill-name>/venv/php (cache, vendor)
- Write logs/cache/tmp under .skills-data/<skill-name>/logs, .skills-data/<skill-name>/cache, .skills-data/<skill-name>/tmp.
- Keep automation in <skill-root>/scripts and read SKILL_DATA_DIR (default to <project_root>/.skills-data/<skill-name>/).
- Do not write outside <skill-root> and <project_root>/.skills-data/<skill-name>/ unless the user requests it.
OpenAI config keys
Stored in .skills-data/epub-translate/.env (created by scripts/epub-translate setup):
OPENAI_API_KEYOPENAI_MODEL(default:gpt-5-mini; change viasetup --model ..., editing.env, ortranslate --model ...)OPENAI_BASE_URL(default:https://api.openai.com/v1)OPENAI_REASONING_EFFORT(default:low; change viasetup --reasoning-effort ...or editing.env)
What ships with it: 5 files
48.0 KB alongside SKILL.md, 2 of them executable
scripts/
- epub-translateruns561 B
- epub_translate.pyruns44.2 KB
- .gitignore57 B
- LICENSE1.0 KB
- README.md2.2 KB