Install
openclaw skills install @iirtegova/pdf-perevodПеревод PDF на русский с сохранением исходной вёрстки, графиков и оформления: английский текст заменяется русским прямо на странице. Читает и сканы (встроенный OCR без сети) — на них перевод рисуется поверх картинки.
openclaw skills install @iirtegova/pdf-perevodНавык отдаёт тот же PDF, где английский текст заменён русским прямо на странице: графики, фон и
расположение блоков остаются исходными. Сканы и растровые графики читаются встроенным OCR
(pdf.py ocr, без сети) — там перевод рисуется поверх картинки.
Переводишь ты; скрипты хранят блоки вне твоего контекста, считают, сколько влезает, сверяют числа и термины и собирают страницу. Не пропускай шаги и не переводи «из головы» в обход скриптов.
Если скрипты не запускаются (навык выключен, не прошёл ревью, нет зависимостей, неисправимая
ошибка) — не переводи документ сам (ни в чат, ни HTML/Word/PDF другим инструментом): скажи, что
навык не работает, и приведи ошибку. Фрагмент в чате — только если пользователь сам попросит, с
оговоркой, что это перевод без вёрстки и проверки чисел. Резюме делает навык pdf-rezume.
skill_exec(skill="pdf-perevod", script="pdf.py", args=["open", "/путь/к/файлу.pdf"])
args — список строк; JSON — одной строкой после --json (--file — только файл внутри папки
состояния навыка, путь есть в job_dir).ok: true — лишь «отработал»: смотри warnings,
left_untranslated, tight_units, unresolved_warnings и подсказку next. При ok: false —
error и hint.complete: false / done: false — повтори вызов.extract = один put. extract без
--pages сам подбирает порции; не дроби документ на мелкие куски — раунды задачи ограничены.job — из ответа pdf.py open; повторный open того же файла продолжает то же задание.Справка по командам (<job> — из ответа pdf.py open):
pdf.py open <путь> | ocr <job> [--pages 1-8] | pages <job> [--pages 1-8]
| render <job> --pages 3 [--translated] [--dpi 110] | jobs
translate.py extract <job> [--pages 1-10] [--all] | put <job> --json '{"id": "перевод"}'
| glossary <job> [--json '{"термин": "перевод"}'] | status <job>
| build <job> [--paper a4|source] [--allow-missing]
guide.py translate
Вне Ouroboros / ГигаАгента (OpenClaw и другие агенты без skill_exec): запускай скрипты
командой из папки навыка ({baseDir}), папку состояния задай переменной PDF_SKILL_STATE_DIR
(любая рабочая папка; без неё скрипты ничего не запишут):
PDF_SKILL_STATE_DIR="$HOME/pdf-skill-state" python3 {baseDir}/scripts/pdf.py open /путь/к/файлу.pdf
Зависимости один раз: pip install "pymupdf>=1.24.2" "rapidocr>=3.9,<4" "onnxruntime>=1.17,<2".
Результат — в <PDF_SKILL_STATE_DIR>/jobs/<job>/out/. В Ouroboros и ГигаАгенте — только skill_exec.
pdf.py open <путь>; при needs_ocr — pdf.py ocr <job> до complete: true; затем
guide.py translate.translate.py extract <job> --pages 1-5, реши названия и термины и заведи словарь:
translate.py glossary <job> --json '{"AI agents": "ИИ-агенты", "EBIT": "операционная прибыль (EBIT)"}'.
В скобках — краткие формы (расшифровка только при первом упоминании). Терминам из узких подписей
графиков сразу дай краткую форму ("data centre": "ЦОД (центр обработки данных)") — put сам
подставит влезающую (glossary_applied). Своих сокращений не выдумывай. Принятые термины: ЦОД,
ВИЭ, ИИ; без калек («программирование», не «кодинг»; «ПО», не «софт»).extract → переводишь → translate.py put <job> --json '{"p3u2": "…"}', пока
left_untranslated не станет 0. Подсказки в блоках: fit — сколько знаков влезает (для
заголовков и подписей строго); w — знаков в строке узкой рамки; note: наклонная подпись —
предельно коротко; ocr: true — распознано с картинки, сомнительное число сверь по pdf.py pages
или оставь блок без перевода; строчная буква в начале — продолжение соседнего блока;
<sup>…</sup> оставь на месте. Исходник переведённых блоков — extract <job> --pages N --all
(в файлы состояния сам не заглядывай). warnings из put исправляй повторным put с тем же id.
Если раунды задачи кончаются — не собирай частичный файл: сдай переведённое, вызови
translate.py status <job> и напиши «переведено N из M, напишите „продолжи"».translate.py build <job> → <название>_перевод.pdf (путь — pdf, имя — file_name).
Разбери unresolved_warnings; tight_units — сократи до target_chars и собери снова
(scale < 0,65 — исправь обязательно). Есть paper_note и важнее вид, чем печать, —
--paper source.pdf.py render <job> --pages 1-3 --translated (сначала
страницы из pages_ocr).file_name — не текст, не HTML, не другой файл; неполный
перевод (--allow-missing) — только по прямой просьбе и с оговоркой. Скажи, какие страницы
без перевода (pages_without_text), какие поверх картинки (pages_ocr) и сколько блоков ужато.Как отправлять файл. Новые версии платформы (Ouroboros / ГигаАгент 6.7+) не прикладывают файлы
из папки навыка («Не удалось безопасно подготовить вложение»). Скопируй PDF без изменений в папку
файлов пользователя — в ГигаАгенте /data/user/Deliverables/ (создай при необходимости) — и
отправляй копию (send_file). Если скопировать нельзя — отправляй напрямую.
| Ответ | Что делать |
|---|---|
Не установлена библиотека pymupdf | Зависимости ставятся после ревью: перезапусти ревью, включи навык |
Модуль распознавания недоступен | rapidocr/onnxruntime не встали — сканы не прочитать, скажи; обычные страницы работают |
| OCR: «модели кириллицы нет» | Русские сканы не читаются без пакета модели кириллицы (cyrillic_model в ответе ocr) |
Задание … не найдено | Сначала pdf.py open; список — pdf.py jobs |
PDF защищён паролем | Попроси версию без пароля |
Не переведено блоков: N | Доперевести через extract; «кончились раунды» — не повод для --allow-missing |
resegmented в status | Блоки перерезаны точнее, совпавшие переводы перенесены — допереведи остаток |
eval/exec, динамических импортов и ключей
(env_from_settings пуст). Читается только OUROBOROS_SKILL_STATE_DIR (без неё скрипты
завершаются с ошибкой; вне Ouroboros — PDF_SKILL_STATE_DIR, если нет OUROBOROS_SKILL_NAME).
Устанавливается одна переменная — ORT_DISABLE_TELEMETRY=1 до импорта onnxruntime (иначе он
пишет и отправляет телеметрию); проверено strace: сети и записи вне папки состояния нет.fs: вне папок навыка читается только PDF по пути пользователя — после проверки (обычный файл,
≤ 300 МБ, %PDF, без пароля) он копируется в jobs/<job>/, оригинал не меняется.jobs/<job>/ папки состояния (<job> проверяется regex и resolve());
в папку навыка ничего не пишется (sys.dont_write_bytecode), из неё читается только
references/translation_rules.md. --file — только JSON ≤ 5 МБ внутри папки состояния.<b>, <i>).pymupdf ≥ 1.24.2, rapidocr (модели PP-OCRv6 внутри пакета, ничего не скачивается),
onnxruntime. Модель кириллицы берётся только из пакета pdf_rezume_ocr_cyrillic или
<папка состояния>/models/ и только со встроенным словарём. Шрифты — встроенные в PyMuPDF.SKILL.md; scripts/ — pdf.py, translate.py, guide.py, модули _core.py, _ocr.py;
references/translation_rules.md (печатается через guide.py).