Как я сделал SlideCraft: от одного промпта до презентации для топ-менеджеров

Один и тот же заголовок помещался в HTML, а в PowerPoint переносился на другую строку. Я рассчитывал, что для генератора презентаций хватит размеров текстового блока и метрик шрифта. Пришлось измерять поведение самого PowerPoint: как он округляет ширину символов, рисует глифы и выбирает место переноса.
Это оказалось одной из самых сложных частей SlideCraft — инструмента, который я сделал для подготовки управленческих презентаций с помощью ИИ. Пользователь описывает задачу агенту, согласует структуру и получает редактируемый .pptx. За этим стоят правила построения аргумента, макеты с ограничениями на текст и проверки результата.
Расскажу, какие правила удалось превратить в код, где генерация сломалась на реальных проверках и как агенты помогли подготовить ролик для первого запуска.
Почему я взялся за презентации
Меня зовут Денис Ермилов. Двадцать лет я работаю в B2B-финтехе и корпоративных IT-системах. Участвовал в создании платёжных платформ национального масштаба, трансграничного платёжного хаба с интеграциями для Китая, Индии и Юго-Восточной Азии, работал с ISO 20022 для операций с Alipay. Для Volkswagen Group мы вместе с берлинской командой разрабатывали платформу дилерской сети.
В этих проектах приходилось взаимодействовать с McKinsey, Accenture и IBM. Одну из практик я вырастил с 9 до более чем 150 человек. Предложения клиентам, защита бюджетов, материалы для советов директоров, отчёты управляющим комитетам — всё это требовало презентаций.
За годы сложился набор требований, которые я проверял снова и снова. Заголовок должен содержать вывод. На слайде должно быть понятно, чем этот вывод обоснован. Число без источника нельзя отдавать клиенту. Если текст не помещается, его нужно сокращать.
Когда я начал поручать презентации ИИ, эти требования никуда не исчезли. Модель писала «Рынок Германии» там, где нужен был вывод — например, в условном кейсе: «Выход в Германию сейчас даёт 40 млн евро до 2028 года». Второй заголовок заставляет показать расчёт. Первый позволяет обойтись общими словами.
Другая частая проблема — девять тезисов на одном слайде. Чтобы они влезли, модель уменьшает шрифт. Или выдаёт красивую картинку, которую потом приходится собирать в PowerPoint заново: поменять число в диаграмме уже нельзя.
Мне нужен был обычный .pptx, в котором можно переписать текст, дополнить таблицу и поправить диаграмму. Большую часть повторяющихся требований я решил записать как правила для агента и проверки в коде.
Сначала согласовать аргумент
SlideCraft начинает с вопроса: кто увидит презентацию и какое решение должен принять?
Затем агент предлагает последовательность заголовков-выводов. Если прочитать только их, должен получиться связный аргумент. На этом этапе я могу увидеть, что презентация отвечает не на тот вопрос, — до сборки диаграмм и выбора оформления.
Для каждого числового показателя нужен источник. Иллюстративные данные помечаются как иллюстративные. Если текст не помещается в выбранный макет, система сообщает, насколько его сократить; уменьшение кегля не служит способом обойти ограничение.
В процессе предусмотрены четыре контрольные точки. Пользователь согласует задачу и направление работы, выбирает оформление, проверяет структуру и принимает результат. Среди вариантов оформления агент показывает две-три обложки. Эти согласования остаются частью работы даже при запуске через один промпт.
Вот запрос, с которого можно начать:
Открой репозиторий:
https://github.com/eiler2005/slidecraft
Сначала ознакомься с AGENTS.md.
Подготовь через SlideCraft презентацию PowerPoint
с редактируемыми текстом, таблицами и диаграммами.
Тема: [о чём презентация]
Аудитория и цель: [кто увидит материал и какое
решение должен принять]
Размер: 15–20 слайдов
Язык: русский
Исходные материалы: [заметки, ссылки, файлы,
тезисы, показатели и их источники]
Оформление: [консалтинговый стиль либо палитра
сайта https://…]
Работай по процессу SlideCraft:
сначала согласуй со мной заголовки-выводы,
покажи 2–3 варианта обложки,
проверь источники всех числовых показателей,
после сборки предоставь .pptx и PDF.
Для этого сценария нужен ассистент, который умеет запускать код. Он сам выполняет npx @eiler2005/slidecraft в своей среде. Обычный текстовый чат может подготовить содержание, но собрать файл без выполнения кода не сможет.
Что находится внутри
Презентация описывается обычными файлами. В брифе хранятся задача, аудитория и ожидаемое решение. В deck.yaml — заголовки, содержание и данные слайдов. Исходные документы лежат отдельно.
Структура аргумента и оформление выбираются независимо: есть 14 вариантов построения презентации и 7 тем. В версии 0.8.0 библиотека содержит 73 макета — от таблиц и водопадов до матриц 2×2 и диаграмм Ганта. У каждого макета свой контракт: какие данные он принимает и сколько текста вмещает. Описание структуры.
Макеты создают промежуточное описание сцены, из которого движки собирают PPTX, векторный PDF и HTML. На той же основе можно получить одностраничное резюме или записку в Word.
Сам файл PowerPoint создаёт PptxGenJS. Моя работа сосредоточена на том, что происходит вокруг генерации файла: постановке задачи, структуре аргумента, ограничениях макетов и проверке того, что увидит читатель.
Модели тоже работают по ролям. Сильной я поручаю построение аргумента и итоговое ревью. Более быстрые модели параллельно готовят отдельные слайды и сокращают текст до нужного объёма. В Claude Code для этого используются Opus, Sonnet и Haiku.
Почему метрик шрифта оказалось мало
Вернусь к заголовку, который по-разному переносился в браузере и PowerPoint. Несколько таких сдвигов меняют весь слайд: подпись заходит на диаграмму, таблица становится выше, последняя строка вылезает из блока.
Для калибровки я использовал PowerPoint для Mac. В сохранённом отчёте указана версия 16.113.4. Измерения показали несколько правил, которые пришлось воспроизвести в движках.
Продвижение каждого символа округляется с шагом 1/576 дюйма. Кернинг учитывается отдельно. Без этого положения слов в HTML расходились с PowerPoint до 1,4 pt. После калибровки среднее расхождение позиций составило 0,09 pt на 8 300 словах.
Глифы рисуются с округлением размера до целого пункта. Первоначально в HTML они получались на 1–4 % крупнее. После воспроизведения этого правила проверка на 2 196 строках не нашла расхождений именно в размере отрисованных глифов. Это отдельный замер, а не обещание совпадения всей вёрстки.
Базовые линии также оказались привязаны к целым пунктам. Ещё пришлось учесть перенос после дефиса между буквами: этот случай обнаружился при визуальной проверке заголовка.
Измеренные правила теперь хранятся как общие данные для HTML и PPTX. Подробности и условия замеров есть в Office rendering rules.
Одной калибровкой работа не закончилась. В отчёте о точности экспорта остаются различия на краях глифов, в подписях диаграмм и в некоторых интервалах импортированных презентаций. Поэтому я проверяю результат, отрисованный офисной программой: правильного расчёта в своём движке недостаточно.
Что проверять после сборки
SlideCraft проверяет, помещается ли текст, есть ли ссылки у числовых данных, хватает ли контраста и согласуются ли показатели на разных слайдах.
В демонстрационном бюджете я намеренно оставил ошибку в сумме. Проверка сообщает:
«итог 69 тыс. долларов, слагаемые дают 67».
Затем модель-ревьюер смотрит на изображения слайдов после отрисовки PowerPoint и браузером и составляет отчёт. Так можно заметить то, что не видно из корректного YAML: подпись перекрыла график, заголовок перенёсся неудачно, на тёмном фоне потерялся источник.
У этих проверок есть граница. Ссылка рядом с числом ещё не делает число верным. Сошедшаяся сумма не доказывает, что бюджет реалистичен. Проверить исходные данные и выводы всё равно должен человек, который понесёт презентацию на встречу.
Ошибки, которые нашли тестовые запуски
ChatGPT в агентском режиме собрал презентацию из пяти слайдов по сокращённому запросу. По дороге выяснилось, что проверка источников считает подписи «Шаг 2» и «Неделя 4» числовыми фактами и требует для них подтверждения. В Linux-контейнере возникла ещё и проблема с запуском Chrome. Оба случая разобраны в изменениях версии 0.7.5.
Другой дефект обнаружился внутри PPTX. Библиотека pptxgenjs версии 4.0.1 объявляла в [Content_Types].xml мастер-слайд для каждого слайда, а записывала только первый файл. У презентации из 12 слайдов оказалось 11 объявлений отсутствующих частей.
PowerPoint открывал такой файл. Это скрывало проблему, пока результат не попадал в другую программу. В SlideCraft появилась дополнительная обработка: удалить именно эти лишние объявления и проверить, что остальные заявленные части документа существуют. Исправление записано в том же changelog для версии 0.7.7.
Как агенты подготовили запуск и видео
Первый запуск на Product Hunt состоялся 18 октября. Я готовил его без отдельной команды и маркетингового бюджета, с помощью ИИ-агентов: хотел проверить, сколько работы вокруг продукта удастся выполнить таким способом.
Даже день запуска выбирал после просмотра данных через API Product Hunt. Сравнил дни недели и остановился на воскресенье, 00:01 по тихоокеанскому времени. По небольшой выборке чужих запусков нельзя предсказать результат собственного.
Для страницы продукта я собрал ролик продолжительностью около минуты — кодом, без ручного монтажа в видеоредакторе и записи диктора.
Сценарий хранится в YAML, числовые показатели берутся из отдельного файла фактов. Для озвучки использовал Kokoro-82M, модель с лицензией Apache-2.0. Она работала локально на ноутбуке; временные отметки слов позволили связать речь с субтитрами и анимацией.
Сцены отрисовывает headless Chrome кадр за кадром. Музыку и звуковые эффекты тоже создаёт код. В конце Whisper распознаёт готовую звуковую дорожку, а полученный текст сравнивается со сценарием.
Так обнаружилась ошибка: вместо «editable» синтезатор произносил «edible». Редактируемый PowerPoint в озвучке стал съедобным.
Сценарий и раскадровку готовила сильная модель, сцены по готовому плану — модель попроще, механические проверки — самая быстрая. Запись о производстве ролика теперь хранится в Storygro, куда переехали инструменты для видео.
Ниже — исходный ролик первого запуска. В нём показана версия с 46 макетами.
Как попробовать
Для Claude Code есть плагин, для Codex — скиллы. В Claude Desktop, Cursor и VS Code можно подключить MCP-сервер. В репозитории лежат примеры на русском и английском:
Из терминала инструмент запускается командой:
npx @eiler2005/slidecraft
Код доступен по модели source-available, под лицензией PolyForm Shield. Делать презентации для себя, компании и клиентов можно бесплатно. У лицензии есть ограничение на использование кода в конкурирующем продукте.
Эталонной средой остаётся PowerPoint. В Keynote и Google Slides отдельные элементы могут выглядеть иначе. И даже после технических проверок в презентации может оказаться слабый аргумент: выбор задачи и ответственность за выводы остаются у автора.
О том, как при таком разделении работы меняется ценность специалиста и устройство компаний, я пишу в трилогии «Когда интеллект стал дешёвым»: «Человек», «Бизнес в эпоху ИИ-агентов» и «Доверие».
Если попробуете SlideCraft на своей презентации, напишите, что пришлось исправлять руками. Особенно интересны случаи, когда не подошёл ни один макет или проверка пропустила ошибку: по ним понятно, что именно дорабатывать.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.