EPUB/PDF AI Translate
Переводит предоставленные пользователем EPUB или PDF на русский через полноценную AI-модель. Поддерживает общий глоссарий, контекстные XHTML/semantic chunks, checkpoints/resume, иллюстрации, книжную перевёрстку и финальный vision layout-QA.
Единый запуск
Из каталога skill:
cd /d %USERPROFILE%\.pi\agent\skills\epub-ai-translate
uv run --python 3.13 --with beautifulsoup4 --with lxml --with pypdf --with pymupdf python scripts\translate_book.py "C:\path\book.epub-or-pdf" --model openai-codex/gpt-5.4 --workers 3 --glossary "C:\path\glossary.txt"
Unix:
cd ~/.pi/agent/skills/epub-ai-translate
uv run --python 3.13 --with beautifulsoup4 --with lxml --with pypdf --with pymupdf python scripts/translate_book.py "/path/book.epub-or-pdf" --model openai-codex/gpt-5.4 --workers 3 --glossary "/path/glossary.txt"
Dispatcher выбирает pipeline по расширению:
- EPUB input → отдельные русские EPUB + PDF, исходные XHTML/CSS/изображения сохраняются.
- PDF input с text layer → semantic extraction, удаление повторных headers/footers/page numbers, перевод контекстными chunks, reflow в новый русский PDF.
- Scanned/image-only PDF → остановка без повреждений; сначала нужен OCR/vision extraction.
Format-specific help:
python scripts\translate_epub.py --help
python scripts\translate_pdf.py --help
Python всегда запускать через uv run --python 3.13, не напрямую.
Основные параметры
--output-pdf PATH, для EPUB также --output-epub PATH.
--workers N — безопасный default 3.
--model PROVIDER/MODEL — default openai-codex/gpt-5.4; не переходить на mini, если качество важнее скорости.
--glossary PATH — общий UTF-8 словарь имён и терминов.
--style TEXT — возраст, жанр, тон и стилистические правила.
--work-dir PATH — каталог checkpoints.
--restart — удалить checkpoints и начать заново.
--force — разрешить перезапись output.
- EPUB only:
--epub-only.
Обязательный workflow
- Проверить input (
.epub/.pdf) и целевой формат. По умолчанию — русский PDF; для EPUB также сохранить русский EPUB.
- Для PDF проверить text layer. Если pipeline сообщает об отсутствии надёжного текста, не имитировать перевод: согласовать OCR/vision pass.
- Подготовить glossary с каноническими именами, местами, фракциями, техникой и официальной терминологией франшизы.
- Для художественной книги использовать полную модель и
--style, соответствующий возрасту, жанру и тону.
- Запускать как длительную фоновую задачу: pipeline порождает Pi agents, поэтому
bg_run должен иметь isAgent: true.
- Следить за
bg_status/bg_logs; повторный запуск с тем же work-dir продолжает по checkpoints.
- Проверить translation pairs/checkpoint JSON и межглавную согласованность имён/терминов.
- Обязательно выполнить layout-QA:
uv run --python 3.13 --with pymupdf --with pillow python scripts\layout_qa.py "C:\path\translated.pdf"
Передать layout-report.json и все contact sheets отдельной полной vision-модели по layout-qa prompt. Долгий Pi-review запускать через bg_run, isAgent: true.
- Для точечных исправлений:
uv run --python 3.13 --with pymupdf python scripts\polish_pdf.py input.pdf output.pdf [--drop-page N]
Скрипт центрирует только страницы, уже ставшие image-only. Не выносить все картинки на отдельные страницы глобальным CSS.
- Повторять vision-QA до
pass: 0 severe, 0 moderate либо moderate явно приняты как намеренная книжная композиция.
- Проверить PDF magic/размер/число страниц, долю кириллицы и визуально первые + аномальные страницы. Затем сообщить полные пути.
Правила качества
- Литературный AI-перевод, не посегментный машинный перевод.
- EPUB переводится целыми XHTML-разделами; PDF — semantic chunks с несколькими страницами и общей терминологией.
- Не суммировать, не сокращать, не цензурировать и не добавлять текст.
- Сохранять диалоги, регистр, эмоциональные оттенки, звукоподражания и авторский темп.
- Не переводить ISBN, URL и товарные знаки вне обычной прозы.
- Не менять source-файл; output всегда отдельный.
- Нормальный пробел в конце главы допустим; глава начинается с новой страницы.
- Текст внутри изображений/обложки не переводится без отдельного OCR/image-editing этапа.
EPUB technical rules
- XHTML парсить как XML; не считать
Doctype, declaration, comments или CDATA переводимым NavigableString.
- Модель переводит только временные
<t id="...">; каждый id должен вернуться ровно один раз.
mimetype при упаковке EPUB должен идти первым без сжатия.
- Каждый spine-XHTML печатать отдельно и затем объединять PDF: глобальное объединение CSS вызывает конфликты.
- Ограничивать image-only cover областью A4, чтобы она не разрывалась.
PDF input rules
- Использовать PyMuPDF
Page.get_text("dict", sort=True) и координаты blocks/spans для reading order и семантики.
- Удалять только статистически повторяющиеся marginal headers/footers и page numbers; не удалять редкий авторский текст.
- Heading определять по размеру/жирности и словам
Chapter/Part/Book; обычный body reflow в <p>.
- Изображения сохранять по позиции чтения; мелкие повторные декорации можно дедуплицировать.
- PDF reflow не обещает пиксельное совпадение с исходником: русский текст имеет другую длину, поэтому приоритет — читаемая книжная композиция.
- Частичный model response никогда не принимать: retry до трёх раз, затем fail без перезаписи source.
Lessons learned
- Не навязывать
page-break всем иллюстрациям и не повышать глобально widows/orphans: это создаёт лишние страницы.
- Vision-QA должен отличать намеренный chapter-end whitespace от ошибки.
- Windows CMD портит Unicode paths; для путей с кириллицей передавать их через Python wrapper, а не CMD arguments.
Подробнее: workflow, PDF input, vision QA.
1---2name: epub-ai-translate3description: Translate user-provided EPUB or PDF books into Russian with a full AI model, chapter/chunk context, a shared glossary, resumable checkpoints, preserved images, book-quality PDF output, and a final vision layout QA. Use when the user asks to translate an EPUB, PDF, e-book, or book into Russian or create a Russian PDF.4---56# EPUB/PDF AI Translate78Переводит предоставленные пользователем EPUB **или PDF** на русский через полноценную AI-модель. Поддерживает общий глоссарий, контекстные XHTML/semantic chunks, checkpoints/resume, иллюстрации, книжную перевёрстку и финальный vision layout-QA.910## Единый запуск1112Из каталога skill:1314```bat15cd /d %USERPROFILE%\.pi\agent\skills\epub-ai-translate16uv run --python 3.13 --with beautifulsoup4 --with lxml --with pypdf --with pymupdf python scripts\translate_book.py "C:\path\book.epub-or-pdf" --model openai-codex/gpt-5.4 --workers 3 --glossary "C:\path\glossary.txt"17```1819Unix:2021```bash22cd ~/.pi/agent/skills/epub-ai-translate23uv run --python 3.13 --with beautifulsoup4 --with lxml --with pypdf --with pymupdf python scripts/translate_book.py "/path/book.epub-or-pdf" --model openai-codex/gpt-5.4 --workers 3 --glossary "/path/glossary.txt"24```2526Dispatcher выбирает pipeline по расширению:2728- EPUB input → отдельные русские EPUB + PDF, исходные XHTML/CSS/изображения сохраняются.29- PDF input с text layer → semantic extraction, удаление повторных headers/footers/page numbers, перевод контекстными chunks, reflow в новый русский PDF.30- Scanned/image-only PDF → остановка без повреждений; сначала нужен OCR/vision extraction.3132Format-specific help:3334```bat35python scripts\translate_epub.py --help36python scripts\translate_pdf.py --help37```3839Python всегда запускать через `uv run --python 3.13`, не напрямую.4041## Основные параметры4243- `--output-pdf PATH`, для EPUB также `--output-epub PATH`.44- `--workers N` — безопасный default `3`.45- `--model PROVIDER/MODEL` — default `openai-codex/gpt-5.4`; не переходить на mini, если качество важнее скорости.46- `--glossary PATH` — общий UTF-8 словарь имён и терминов.47- `--style TEXT` — возраст, жанр, тон и стилистические правила.48- `--work-dir PATH` — каталог checkpoints.49- `--restart` — удалить checkpoints и начать заново.50- `--force` — разрешить перезапись output.51- EPUB only: `--epub-only`.5253## Обязательный workflow54551. Проверить input (`.epub`/`.pdf`) и целевой формат. По умолчанию — русский PDF; для EPUB также сохранить русский EPUB.562. Для PDF проверить text layer. Если pipeline сообщает об отсутствии надёжного текста, не имитировать перевод: согласовать OCR/vision pass.573. Подготовить glossary с каноническими именами, местами, фракциями, техникой и официальной терминологией франшизы.584. Для художественной книги использовать полную модель и `--style`, соответствующий возрасту, жанру и тону.595. Запускать как длительную фоновую задачу: pipeline порождает Pi agents, поэтому `bg_run` должен иметь `isAgent: true`.606. Следить за `bg_status`/`bg_logs`; повторный запуск с тем же work-dir продолжает по checkpoints.617. Проверить translation pairs/checkpoint JSON и межглавную согласованность имён/терминов.628. Обязательно выполнить layout-QA:63 ```bat64 uv run --python 3.13 --with pymupdf --with pillow python scripts\layout_qa.py "C:\path\translated.pdf"65 ```66 Передать `layout-report.json` и **все** contact sheets отдельной полной vision-модели по [layout-qa prompt](references/layout-qa-prompt.md). Долгий Pi-review запускать через `bg_run`, `isAgent: true`.679. Для точечных исправлений:68 ```bat69 uv run --python 3.13 --with pymupdf python scripts\polish_pdf.py input.pdf output.pdf [--drop-page N]70 ```71 Скрипт центрирует только страницы, уже ставшие image-only. Не выносить все картинки на отдельные страницы глобальным CSS.7210. Повторять vision-QA до `pass`: 0 severe, 0 moderate либо moderate явно приняты как намеренная книжная композиция.7311. Проверить PDF magic/размер/число страниц, долю кириллицы и визуально первые + аномальные страницы. Затем сообщить полные пути.7475## Правила качества7677- Литературный AI-перевод, не посегментный машинный перевод.78- EPUB переводится целыми XHTML-разделами; PDF — semantic chunks с несколькими страницами и общей терминологией.79- Не суммировать, не сокращать, не цензурировать и не добавлять текст.80- Сохранять диалоги, регистр, эмоциональные оттенки, звукоподражания и авторский темп.81- Не переводить ISBN, URL и товарные знаки вне обычной прозы.82- Не менять source-файл; output всегда отдельный.83- Нормальный пробел в конце главы допустим; глава начинается с новой страницы.84- Текст внутри изображений/обложки не переводится без отдельного OCR/image-editing этапа.8586## EPUB technical rules8788- XHTML парсить как XML; не считать `Doctype`, declaration, comments или CDATA переводимым `NavigableString`.89- Модель переводит только временные `<t id="...">`; каждый id должен вернуться ровно один раз.90- `mimetype` при упаковке EPUB должен идти первым без сжатия.91- Каждый spine-XHTML печатать отдельно и затем объединять PDF: глобальное объединение CSS вызывает конфликты.92- Ограничивать image-only cover областью A4, чтобы она не разрывалась.9394## PDF input rules9596- Использовать PyMuPDF `Page.get_text("dict", sort=True)` и координаты blocks/spans для reading order и семантики.97- Удалять только статистически повторяющиеся marginal headers/footers и page numbers; не удалять редкий авторский текст.98- Heading определять по размеру/жирности и словам `Chapter/Part/Book`; обычный body reflow в `<p>`.99- Изображения сохранять по позиции чтения; мелкие повторные декорации можно дедуплицировать.100- PDF reflow не обещает пиксельное совпадение с исходником: русский текст имеет другую длину, поэтому приоритет — читаемая книжная композиция.101- Частичный model response никогда не принимать: retry до трёх раз, затем fail без перезаписи source.102103## Lessons learned104105- Не навязывать `page-break` всем иллюстрациям и не повышать глобально `widows/orphans`: это создаёт лишние страницы.106- Vision-QA должен отличать намеренный chapter-end whitespace от ошибки.107- Windows CMD портит Unicode paths; для путей с кириллицей передавать их через Python wrapper, а не CMD arguments.108109Подробнее: [workflow](references/workflow.md), [PDF input](references/pdf-input.md), [vision QA](references/layout-qa-prompt.md).