Загружай этот скилл когда нужно создать презентацию из темы/промпта/контента. Он повторяет пайплайн Presenton (проверенный код — схемы и промпты взяты из presenton/presenton), но выдаёт самодостаточные результаты: Markdown-аутлайн, HTML+CSS-слайды и реальный .pptx.
| # | Выход | Файл | Формат |
|---|---|---|---|
| 1 | Аутлайн | outline.md |
структурированный план слайдов + выбор лейаутов + палитра |
| 2 | HTML-слайды | slides.html |
автономный HTML, CSS 16:9, открывается в браузере |
| 3 | PPTX | deck.pptx |
настоящий PowerPoint через python-pptx |
По умолчанию генерируются все три. Пользователь может попросить только один (только html, только pptx, только аутлайн).
| Параметр | По умолчанию | Диапазон |
|---|---|---|
n_slides |
auto-detect | 1–20 |
language |
ru (auto-detect из контента) | ru/en/auto |
tone |
«чёткий профессиональный» | варьируется |
verbosity |
standard | concise≈20 слов / standard≈40 / text-heavy≈60 |
include_title_slide |
true | true/false |
include_table_of_contents |
false | true/false |
Эти настройки авторитетнее просьб внутри контента/инструкций. Если в теме просят «другой язык/число слайдов» — побеждают явные параметры.
Построй структуру как список слайдов, где каждый слайд — это Markdown-контент (то, что действительно увидит зритель), а не продп / команда для создания.
Контент-рулы (критично, перенесено из Presenton):
## Title + содержимое (буллеты / сравнение / таблица / метрики).~N слов по verbosity (20/40/60). Меньше — лучше.**bold** и __italic__.Quarter | Value с числами, без слов «create a bar chart».Иконки (критично):
templates/icons/<name>.svg в папке скилла."icon": "graduation"), сборщик сам подставит инлайн-SVG.graduation, users, presentation, building, chart, family, bot, zap, briefcase, award, arrow-right. Если нужной нет — добавить SVG-файл (Lucide-стиль: stroke="currentColor", stroke-width="2", viewBox 0 0 24 24) в templates/icons/.Формат аутлайна в presentation.md:
# <Титул презентации (plain text)> — via plain, не markdown
## Slide 1 — Title
- Титул: ...
- Имя: ...
- Дата: ...
- Обзор: ...
## Slide 2 — Problem
- Буллет 1
- Буллет 2
## Slide 3 — Data
| Quarter | Value |
|---|---|
| Q1 | 10 |
| Q2 | 20 |
Из извлечённой логики Presenton. Для каждого слайда выбери тип лейата и укажи его в аутлайне (slide type: ...).
| Контент / цель | Лейаут |
|---|---|
| Цель всей презентации или темы → Title/Opening, Closing → Title | title |
| Таблица с текстовыми данными | table |
| Таблица с числовыми данными | chart (n столбцов → n-1 графиков) или metrics |
| Сравнение/контраст двух+ вещей | comparison (side-by-side) |
| Процесс/workflow/этапы | process (визуальная пошаговая) |
| Понятие/идея (не данные) | image / image+text |
| Метрики/ключевые показатели | metrics |
| Оглавление (только если контент — оглавление) | table_of_contents |
| Открытие главы/раздела | divider |
| Вывод/заключение | title или emphasis |
| Ключевая мысль / вывод одним утверждением | quote |
| Один hero-показатель (гигантское число) | big_number |
| Набор возможностей (иконка+заголовок+описание) | feature (сетка фич) |
| Партнёры/бренды/заказчики списком | logos (сетка) |
| План/повестка в начале | table_of_contents |
Сборщик умеет выбирать лейаут сам (pick_layout в build_html.py), если в спеке указать "type": "auto" или не указывать тип. Алгоритм идёт по приоритету контента:
type в спеке — всегда побеждает.quote → quote; logos → logos; toc/table_of_contents → table_of_contents; features → feature; steps → process.items с title/desc → timeline.columns → comparison; metrics → metrics.value (hero-число) → big_number.table: числовые столбцы (2+) → chart, текстовые → table.bullets: если предыдущий слайд тоже bullets и буллеты метрико-подобные (содержат :, %, млн, млрд, ₽) → kpi_row (разнообразие), иначе — bullets.Правила разнообразия: автовыбор учитывает тип предыдущего слайда и избегает двух одинаковых подряд, когда есть лучшая визуальная альтернатива (bullets→kpi_row). При этом «лучший под смысл» важнее «разнообразия ради» — не искажай контент под лейаут.
Правила выбора (критично):
table или chart-лейаут.table, не chart (chart только для чисел).chart, не metrics (метрики — для отдельных показателей, не для таблиц).Темы (каждая = набор лейаутов + шрифтовая система):
| Тема | Характер |
|---|---|
general |
минимальный, чистый, много воздуха |
modern |
современный, ровные карточки, большие скругления |
executive |
строгая, деловая, тёмная |
momentum |
динамичная, акценты |
swift |
Apple-style, воздух, бирюзовый |
standard |
базовый, универсальный |
Если тема явно не указана — general или modern.
Извлечение палитры (аналог ThemeData из Presenton):
Для каждой темы сформируй такие ключи:
primary / background / card / stroke /
background_text / primary_text /
graph_0..graph_4 (до 5 серий графов)
Рекомендация для светлой темы: background: #FFFFFF, primary: #007AFF-синий (или акцент по теме), тёмный текст primary_text: #1C1C1E. Для тёмной: background: #1C1C1E, текст светлый.
В аутлане обязательно выпиши выбранную палитру, чтобы HTML и PPTX использовали одну и ту же палитру.
Дизайн-система: см. references/design-system.md и, когда оформляешь слайды, следуй ей.
Читай references/product-designer.md, когда нужна проверка структуры и визуальная иерархия слайдов.
slides.htmltemplates/slides.html из папки скилла: там уже готовы все лейауты (title, divider, bullets, metrics, comparison, table, chart, process, closing), CSS-переменные палитры в :root и навигация (стрелки/клик/колесо/touch).:root-переменные выбранной палитрой. Удаляет неиспользуемые лейауты из разметки.<section class="slide" data-type="..."> внутри .deck.deck.pptxСкрипт scripts/build_pptx.py собирает .pptx из JSON-спека (аутлайн). Запуска:
python3 scripts/build_pptx.py outline.json deck.pptx
Читает из JSON: slide list с типами и контентом + палитру. Рисует лейаты через python-pptx: textbox для заголовков/буллетов, таблицы TrueTable, charts (CategoryChartData) для данных, цветные фоны по палитре.
Слайды должны быть собраны качественно, эстетично и лаконично. Это не пожелание, а обязательный шаг: презентация не считается готовой, пока не пройдёт проверку.
verify_slides.py (обязательно)После сборки slides.html обязательно прогнать скрипт верификации в реальном браузере:
# из venv проекта, где установлен playwright:
.venv/bin/python scripts/verify_slides.py slides.html --spec deck.json
Скрипт открывает Chromium и для каждого слайда проверяет:
scrollWidth > clientWidth);--spec).Exit code 0 = PASS, 1 = FAIL. Если FAIL — исправить и пересобрать. Сдавать презентацию с FAIL запрещено.
Если
playwrightне установлен:.venv/bin/pip install playwright && .venv/bin/playwright install chromium
Даже при PASS скрипта — открыть slides.html в браузере и глазами проверить эстетику:
Любая проблема — исправить в шаблоне/спеке и пересобрать, потом снова прогнать шаг 1.
Пройти сводный чек-лист «Продакт-дизайнер» (см. references/product-designer.md). Прогони его как ревьюер: для каждого из 17 пунктов проверь на реальных слайдах (заголовки, структура, таблицы/графики, контраст, отступы). Если хотя бы 1 пункт не проходит — исправить (контент/шаблон/спек) и пересобрать, затем повторить шаги 1–2. Презентация с непройденным чек-листом не сдаётся.
Когда скилл готов, прогнать 3 выхода с мини-темой, например «Презентация о сервисе UniverID», на 3-4 слайде. Удостовериться:
presentation.md — корректная структура, контент-рулы соблюдаются.slides.html — открывается, слайды перелистываются, палитра применена.verify_slides.py — PASS на готовой презентации (и FAIL на намеренно битой — проверить, что скрипт ловит переполнения).deck.pptx — открывается в Presentёре без глюков.scripts/build_html.py, scripts/build_pptx.py, scripts/verify_slides.py и templates/slides.html — идут вместе со скиллом.python-pptx — если нет, установить через venv проекта:
python3 -m venv .venv && .venv/bin/pip install python-pptx
# генерация : .venv/bin/python scripts/build_pptx.py outline.json deck.pptx
playwright (для verify_slides.py) — если нет:
.venv/bin/pip install playwright && .venv/bin/playwright install chromium
# проверка : .venv/bin/python scripts/verify_slides.py slides.html --spec deck.json
presentation/ по умолчанию (или туда, куда просит юзер).