agentleFS
makukhin-iemakukhin-ie/ai-toolbox/skills/book-typesetter/SKILL.md

book-typesetter

Skill0 starsChanged 4 months agoMITView on GitHub

Полный конвейер печати книг малым тиражом (1-2 экземпляра для личной библиотеки, print-on-demand). Верстает EPUB/FB2 в готовые к печати PDF с книжной типографикой (оглавление, буквицы, колонтитулы, нумерация, шмуцтитулы). Собирает развёртки обложек из картинок, включая AI-сгенерированные. Генерирует промпты для AI-обложек. Помогает заказать печать в типографии — пишет письма (шаблоны на румынском, адаптируются под любой язык), проверяет договоры, планирует партии книг по формату. Запускай, когда пользователь загружает книжный файл и говорит "сделай для печати", "верстка", "макет"; загружает картинку и просит "сделай обложку"; просит "промпт для обложки"; или просит помощь с типографией — "напиши письмо в типографию", "проверь договор", "какой формат лучше". Триггеры на английском включают "prepare for print", "typeset book", "cover spread", "AI prompt cover", "order book printing". Запускай, даже если упомянута только одна часть конвейера.

The file

Files
SKILL.md

Book Typesetter — конвейер от электронной книги до печатной

Скилл решает шесть связанных задач:

  1. Верстка книги — из EPUB/FB2 в книжный PDF-макет
  2. Сборка обложки — из картинки в развёртку с корешком и bleed
  3. Промпт для AI — для генерации обложек в стиле серии
  4. Заказ в типографии — выбор подрядчика, письма, проверка договора
  5. Continuous spine art — единая иллюстрация по корешкам серии (один сплошной мотив)
  6. Учёт и хранение — библиотека книг в облаке, каталог серий, паспорт каждой серии для допечатки

Определи, какую задачу решает пользователь. Если несколько — выполняй последовательно. Если что-то не уточнено — задай один вопрос и переходи к работе.


⚙️ Настройка под себя (прочитай при первом использовании)

Скилл поставляется с дефолтами, проверенными реальной печатью, но все они настраиваются. Спроси пользователя один раз и запомни его выбор.

Формат блока (типоразмер). Стандартные варианты — подробности в references/format_guide.md:

ФорматммДля чего
130×200 (дефолт)130×200художественная литература, стандарт многих издательств («13/20»)
A5148×210нон-фикшн, справочники, техническая литература
145×215145×215«увеличенная художка», переводные издания
120×185120×185покетбук, компактные издания
A4210×297альбомы, руководства с иллюстрациями

Бумага блока (плотность и цвет). Указывается в письме типографии явно:

БумагаДля чего
ivory 80 г/м² (дефолт)художка — кремовая приятнее для глаз, «книжный» вид
белая 80 г/м²нон-фикшн, схемы, где важна контрастность
90–100 г/м²тонкие книги (<150 стр.) — блок выглядит солиднее
115–130 г/м² мелованнаяиллюстрированные издания, альбомы

Шрифты и декор (дефолт: Linux Libertine 10pt тело + GFS Baskerville заголовки + тёплый коричневый декор RGB 0.3/0.18/0.1) — можно заменить в scripts/build_book.py, но связка проверена печатью и выглядит как настоящая книга.

Колонтитул (дефолт: только название книги). Название главы справа технически возможно, но проверенное предпочтение — не добавлять.

Язык писем в типографию — шаблоны в references/printing_workflow.md на румынском; переводи на язык типографии пользователя, структуру сохраняй.


Проверенные печатью дефолты (менять осознанно)

  • Корешок > 55 мм — активно предлагать разделить на два тома. Не «может потребоваться», а сразу «давай разобьём вот по такому стыку». На корешке ≈72 мм (1200 стр.) обложка физически села криво; на ≈43 мм (700 стр.) — чисто.
  • Continuous spine art — только как ОДИН сплошной мотив, а не цепочка разных сцен встык. Подробности и обоснование — Задача 5.
  • Издательский архив = только файлы для печати. В архив для типографии класть исключительно блоки и обложки по томам (латинские имена, чтобы не было крокозябр). Паспорт серии, письма, промпты — НЕ кладём.

Задача 1: Верстка книги для печати

Триггеры: «сделай для печати», «верстка», «макет для типографии», «print-ready», «подготовь блок».

Что делать

  1. Проверь окружение. Запусти scripts/setup_environment.sh, если шрифтов нет (проверь /home/claude/ttf_fonts/LinLibertine_R.ttf).
  2. Извлеки метаданные — название, подзаголовок, автор. У пользователя или из файла.
  3. Запусти сборку:
    python scripts/build_book.py \
        --input /mnt/user-data/uploads/book.epub \
        --output /mnt/user-data/outputs/book_print_ready.pdf \
        --title "Название" \
        --author "Автор" \
        [--subtitle "Подзаголовок"] \
        [--format 130x200]
  4. Проверь результат — открой страницы 1, 3 и одну из середины через pdf2image:
    • Титул и оглавление: без колонтитулов и номеров
    • Основные страницы: колонтитул и номер на месте
    • Главы начинаются с новой страницы с буквицей
  5. Отдай через present_files.

Корешок ≈ страницы × 0.06 мм. Детали типографики — references/typography.md.

Разметка глав — парсер устойчив к «грязным» файлам

build_book.py детектит главы не только по тегам <title>. Обрабатываются реальные кейсы из библиотечных fb2/epub:

  • fb2, где главы — жирный абзац (<p><strong>Глава…</strong></p>) без <title>: ловятся по тексту (включая многословные «Глава двадцать первая», «Пролог», «Эпилог»), ставятся с новой страницы + буквица + пункт в оглавление.
  • Разрывы сцен (секции без заголовка) отбиваются ромбиком-орнаментом.
  • Служебные титры фан-переводов («Перевод:», «Редакторы:», «Мы в Telegram:…», финальный колофон) вычищаются из блока.
  • epub с POV-заголовками (имена персонажей в <h2>): рендерятся как обычные главы с оглавлением.

Если оглавление вышло пустым или главы «текстом» — почти всегда файл именно такого типа; парсер это уже покрывает.

Если книга очень толстая

При корешке >55 мм (примерно >920 страниц) — активно предложи разделить на два тома. Хорошая точка разделения: между логическими частями (романами омнибуса), чтобы корешки вышли примерно равными (по 500–600 страниц) и каждый <50 мм.


Задача 2: Сборка обложки для печати

Триггеры: «сделай обложку», «развёртка», «обложка с корешком», «приготовь для типографии».

Что делать

  1. Уточни число страниц (для расчёта корешка). Если книга свёрстана этим же скиллом — возьми из PDF через scripts/check_pdf_format.py.
  2. Запусти сборку:
    python scripts/build_cover.py \
        --image /mnt/user-data/uploads/cover_art.png \
        --output /mnt/user-data/outputs/cover_print_ready \
        --pages 1198 \
        --title "НАЗВАНИЕ КНИГИ" \
        --author "Автор" \
        [--subtitle "Подзаголовок"] \
        [--series "НАЗВАНИЕ СЕРИИ"] \
        [--annotation-file back_text.txt] \
        [--back-image back.png] \
        [--remove-gemini-logo]
  3. Выход: .pdf для типографии + .png для проверки. Оба 300 DPI.
  4. Отдай через present_files.

Подробности — references/covers.md.

Задник (back cover) — это тоже изображение, а не просто цвет

Задник может быть: палитровый градиент (по умолчанию), либо изображение через --back-image PATH — текстура (дым/туман), узор, эмблема серии или полноценная иллюстрация.

Рекомендации: один задник на всю серию держит комплект; оставляй спокойную/тёмную зону в центре-низу под аннотацию; держи ту же палитру и технику, что у лиц. Быстрая процедурная текстура без ИИ — scripts/build_back_texture.py (стиль smoke).

python scripts/build_back_texture.py --output back.png --format 130x200
# затем в каждый том: build_cover.py ... --back-image back.png

Задача 3: Промпт для AI-генерации обложки

Триггеры: «напиши промпт», «промт для обложки», «AI prompt for cover».

  1. Извлеки контекст: какая книга (название, жанр), часть ли серии (тогда тот же стиль), кто на обложке, атрибуты.
  2. Прочитай references/ai_cover_prompts.md — готовая структура с критическими блоками.
  3. Не используй франшизные термины из популярных вселенных — модели часто отказывают. Используй визуальные архетипы (stern bearded judge, armored warrior).
  4. Отдай как markdown-документ с инструкциями по использованию.

Задача 4: Заказ печати в типографии

Триггеры: «помоги с заказом», «напиши письмо в типографию», «проверь договор», «какой формат лучше», «сравни типографии», «спланируй партию», «можно ли печатать дома».

4.1. Письмо в основную типографию

Прочитай references/printing_workflow.md → «Шаблон письма для повторного заказа». Подставь книги пользователя; при необходимости переведи на язык его типографии.

Критическое ограничение (у большинства типографий): все книги в одном заказе должны быть одного формата. Перед составлением письма прогони PDF через check_pdf_format.py.

4.2. Поиск и выбор типографии

printing_workflow.md → «Ваша основная типография»: как искать локальный POD, признаки подходящей типографии, универсальный шаблон первого письма.

4.3. Проверка договора

Если пользователь прислал PDF договора — прочитай references/contract_review.md: четыре главных красных флага (отсутствие цены, отсутствие срока, неправильный срок претензий, асимметричные штрафы) и готовое письмо с правками.

4.4. Выбор формата для серии книг

Прочитай references/format_guide.md. Учти: один формат на заказ; 130×200 — стандарт художки; A5 — нон-фикшн. Перед группировкой партии проверь реальные размеры PDF:

python scripts/check_pdf_format.py book1.pdf book2.pdf book3.pdf

Утилита покажет формат каждой книги, размер корешка и предупредит о разнобое форматов.

4.5. Печать дома

references/print_at_home.md. Главная мысль: для 1–2 книг бессмысленно. Реалистичный гибрид — лазерник дома + переплётная мастерская за hardcover.

4.6. Lulu как международная страховка

Если локальные типографии отказали — Lulu (lulu.com): прозрачный калькулятор, печать в ЕС, тираж от 1 экз. Дороже локального POD на 20–50%, но гарантированно сработает.


Задача 5: Корешок серии — сплошной мотив, отдельные корешки или сцены встык

Триггеры: «общий рисунок на корешках», «единый корешок серии», «spine art», «чтобы корешки складывались в одну картинку».

⚠️ Сначала о выборе подхода (ключевой урок)

Три способа оформить корешки серии, от лучшего к худшему:

A. Сквозная панорама как ОДИН сплошной мотив (лучший для эффекта полки). Корешки складываются в единую картину, но картина — один непрерывный объект во всю ширину серии: один замок, одна панорама города, один лес, одно звёздное небо. Внутри нет «швов между сущностями» → куда бы ни попал рез — картинка собирается правильно, потому что резать нечего: это сплошная текстура. Золотой стандарт continuous spine.

B. Отдельный цельный корешок на каждый том. Если эффект полки не нужен. Ничего не режется. Просто и надёжно.

C. ❌ Сквозная панорама из РАЗНЫХ сцен встык — НЕ делать. Цепочка локаций (базар | дворец | болото | горы) с резами по переходам: линии реза попадают на «швы между мирами», детали режутся криво, корешки складываются в «склейку кусков». Проверено на реальной серии — так не делать.

Как выбирать: хочет эффект полки → A («давай корешок будет одним общим замком/городом/небом на всю серию — тогда рез не важен»); не серия → B; C — никогда.

Что делать (вариант A)

  1. Собери список книг серии с числом страниц (scripts/check_pdf_format.py для точных данных).
  2. Посчитай холст: общая_ширина = Σ(страницы × 0.06) мм, высота = высота книги.
  3. Сгенерируй промпт — шаблон в references/ai_cover_prompts.md → «Continuous Spine Art»: точки разрезов, избегать критичных деталей на стыках, композиция работает и как панорама, и полосами.
  4. Пользователь генерирует артворк (Gemini/Midjourney/Flux, максимальное разрешение).
  5. Нарежь на корешки:
    python scripts/slice_spine_art.py \
        --image continuous_art.png \
        --output-dir /mnt/user-data/outputs/spines/ \
        --books "Том1:1198,Том2:723,Том3:540"
  6. Передай типографии — надёжнее отдавать цельную развёртку каждого тома (зад + корешок + лицо одним PDF), а не корешок отдельным файлом.

Важные нюансы

  • Цветопередача: вся серия печатается одной типографией одним заказом, иначе цвета корешков будут чуть разными.
  • Поэтапная печать серии: сохрани мастер-артворк и список планируемых книг с примерной толщиной — скорректируешь при реальной верстке.

Накопленные приёмы (по итогам реальной печатной серии)

Все реализованы в scripts/build_cover.py и scripts/build_book.py — здесь зафиксированы, чтобы не растерять.

Обложка (build_cover.py)

  • Весь текст на лице — с тёмной обводкой (stroke ≈ 0.4 мм). Светлый текст на ярком арте без обводки не читается.
  • Задник — вертикальный градиент из палитры арта (fallback), а не плоский чёрный. Цвет текста на заднике выбирается по яркости фона.
  • Задник-изображение практичнее плоского цвета — одна картинка на серию + тихая тёмная зона под аннотацию.
  • Вотермарк ИИ — кадрировать, не блюрить (блюр оставляет мутное пятно; --remove-gemini-logo кропает нижнюю полосу ~3.5%).
  • Список романов под названием — мелкий курсив с обводкой, --novels "Роман1|Роман2|Роман3".
  • Текст на корешке разносить: название к верху, автор к низу — центр остаётся под картинку.
  • Чёрная bleed-кайма на краях spine-полос автоматически заливается протяжкой соседнего пикселя.
  • Не путать сюжетный текст на картинке с вотермарком — надписи в сцене могут быть пасхалкой, спроси, прежде чем замазывать.

Промпты обложек (image-модели плохо слушаются про текст)

  • Запрет текста — первой строкой промпта, максимально жёстко: «NO text, NO letters, NO words anywhere». Всё равно может дорисовать — правится кадрированием.
  • Не писать «reserved space for title» — модель нарисует заголовок.
  • Анти-детскость: явно «painterly pulp illustration for adults, NOT a children's cartoon».
  • Динамика вместо статики для серий 5+: каждая обложка — сцена-момент из книги (погоня, штурм, оборона), экшен в центральной полосе, верх/низ тёмные под заголовок/автора, «dynamic action scene, figure caught mid-motion, NOT a static portrait».
  • Единство при разных сценах: одна палитра, одна техника, общий мотив, стыковка левого края в тень под корешок.
  • Референс-оригинал: оригинальную обложку можно дать image-reference'ом («сохрани композицию, перепиши в нашу палитру»). Франшизные слова заменяй архетипами.

Блок (build_book.py) — шмуцтитулы романов в омнибусах

  • Каждый роман омнибуса открывается шмуцтитулом — отдельной страницей с крупным названием; нумерация глав сбрасывается внутри каждого романа; колонтитул на шмуцтитуле не печатается.
  • Разбивка омнибуса на тома по границам романов — split_novels.py. Реальный объём тома после вёрстки обычно на 1–2% больше расчётного — пересобери обложку под фактическое число страниц перед финалом.

Задача 6: Учёт и хранение библиотеки

Триггеры: «куда сохранить», «организуй хранение», «реестр книг», «каталог», «на будущее для допечатки».

Цель — при множестве серий ничего не терять, при допечатке брать готовый референс (тексты, картинки, шрифты, параметры).

Структура хранения

Библиотека печатных книг/              ← корень (облако + локальный архив)
├── КАТАЛОГ библиотеки                  ← живой документ: реестр ВСЕХ серий
└── <Серия> (Автор)/
    ├── <Серия> — паспорт серии         ← живой документ: всё для допечатки
    ├── Письмо в типографию
    ├── промпты обложек (если есть)
    ├── Том 1 — <название>/  (блок + обложка)
    └── Том N — <название>/

Два уровня учёта

  1. КАТАЛОГ в корне — сводная таблица серий: № · серия · автор · томов · формат · статус · напечатано. Плюс общие предпочтения (бумага, шрифты, типография). Статусы: черновик → свёрстано → готово к печати → заказано → напечатано.
  2. Паспорт серии — всё для допечатки: романы и страницы по томам, ширины корешков, шрифты/декор/поля, стиль и палитра обложек, привязка картинок-исходников к томам, точки реза (если continuous spine), параметры печати, чек-лист допечатки.

Что куда

  • Облако (Google Drive / Notion): папки и оба реестра — живые редактируемые документы, не PDF.
  • Локальный архив: вся структура одним ZIP. Кириллица в ZIP — только через Python zipfile с ZipInfo.flag_bits |= 0x800 на каждой записи (иначе Windows покажет крокозябры).
  • Издательский архив (в типографию): только тома с блоками и обложками, латинские имена файлов/папок, без паспорта, писем и промптов.

Если пользователь делает серию из нескольких книг

  • Единый формат (130×200 рекомендуется, решает пользователь)
  • Единая типографика (один шрифт, одна структура колонтитулов)
  • Единый стиль обложек — для второй и далее книг первая обложка как референс в промпте
  • Единые параметры аннотаций — одинаковая длина, тон, структура
  • Группировка партии — все книги одного формата одним заказом
  • Опционально — continuous spine art (Задача 5) для эффекта единой полки

Это даёт «полку из родных сестёр» — книги выглядят как один комплект.


Чек-лист перед сдачей файлов

  • PDF блока: формат правильный, оглавление есть, колонтитулы и номера на основных страницах
  • PDF обложки: правильное соотношение сторон с корешком, нет водяных знаков, есть bleed
  • Названия файлов осмысленные (Book_print_ready.pdf, не output.pdf)
  • Корешок >55 мм → активно предложи разделить книгу на два тома
  • Разные форматы в партии → предупреди о разбивке на отдельные заказы
  • В письме в типографию явно указана бумага (дефолт «ivory 80g»)

Что входит в скилл

Скрипты

  • scripts/build_book.py — EPUB/FB2 → книжный PDF; шмуцтитулы романов в омнибусах
  • scripts/build_cover.py — картинка → развёртка обложки; обводка текста, градиентный/картиночный задник, кадрирование вотермарка
  • scripts/build_back_texture.py — процедурная текстура-задник без ИИ (стиль smoke)
  • scripts/split_novels.py — разбивка FB2-омнибуса на тома по границам романов
  • scripts/check_pdf_format.py — проверка формата PDF для планирования партий
  • scripts/slice_spine_art.py — нарезка панорамы на корешки (continuous spine)
  • scripts/setup_environment.sh — установка шрифтов и зависимостей

Reference-файлы (читать по мере необходимости)

  • references/typography.md — детали типографики, парсинг EPUB/FB2
  • references/covers.md — развёртка обложки, расчёт корешка, водяные знаки
  • references/ai_cover_prompts.md — шаблоны промптов для Gemini/Midjourney/DALL-E, включая continuous spine art
  • references/printing_workflow.md — поиск типографии, шаблоны писем, юридическая основа
  • references/format_guide.md — форматы книг, стратегии группировки
  • references/contract_review.md — красные флаги в договорах
  • references/print_at_home.md — самостоятельная печать, оборудование, экономика

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.