simbiot-harness/scripts/make_pptx_261008.py

133 lines
11 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Генерация PPTX: (1) разговор с Леонидом, (2) питч Simbiot (Seedance)."""
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
BG = RGBColor(0x0A, 0x0C, 0x12)
ACCENT = RGBColor(0x8B, 0x5C, 0xF6)
ACCENT2 = RGBColor(0x7C, 0x6C, 0xF5)
TEXT = RGBColor(0xF0, 0xEE, 0xFF)
MUT = RGBColor(0x9A, 0x97, 0xB8)
def add_slide(prs, title, bullets, kicker=None):
s = prs.slides.add_slide(prs.slide_layouts[6])
s.background.fill.solid(); s.background.fill.fore_color.rgb = BG
w, h = prs.slide_width, prs.slide_height
# accent bar
bar = s.shapes.add_shape(1, Emu(0), Emu(0), Emu(w), Inches(0.09))
bar.fill.solid(); bar.fill.fore_color.rgb = ACCENT; bar.line.fill.background()
if kicker:
tb = s.shapes.add_textbox(Inches(0.7), Inches(0.45), Inches(11.8), Inches(0.4))
tf = tb.text_frame; p = tf.paragraphs[0]; r = p.add_run(); r.text = kicker.upper()
r.font.size = Pt(12); r.font.color.rgb = ACCENT2; r.font.bold = True
tb = s.shapes.add_textbox(Inches(0.7), Inches(0.85), Inches(12.0), Inches(1.0))
tf = tb.text_frame; p = tf.paragraphs[0]; r = p.add_run(); r.text = title
r.font.size = Pt(30); r.font.color.rgb = TEXT; r.font.bold = True
tb = s.shapes.add_textbox(Inches(0.75), Inches(1.85), Inches(11.9), Inches(4.9))
tf = tb.text_frame; tf.word_wrap = True
first = True
for b in bullets:
lvl = 0
if isinstance(b, tuple): b, lvl = b
p = tf.paragraphs[0] if first else tf.add_paragraph(); first = False
r = p.add_run(); r.text = ("• " if lvl == 0 else "– ") + b
r.font.size = Pt(16 if lvl == 0 else 14); r.font.color.rgb = TEXT if lvl == 0 else MUT
p.space_after = Pt(8)
return s
prs = Presentation(); prs.slide_width = Inches(13.333); prs.slide_height = Inches(7.5)
K = "Встреча 143 · 2026-10-08"
add_slide(prs, "Разговор Алекса с Леонидом", [
"Выжимка разговора и договорённости · ~2.5 часа",
"Jitsi + агент-визуализатор Simbiot (слайды рисуются в реальном времени)",
"Кооператив 42 / студия Simbiot",
], kicker=K)
add_slide(prs, "Кто есть кто", [
"Леонид — давний знакомый студии, писатель, инвестор в deep-tech (Anti-Aging Hero с физиком Петром Федичевым)",
"DGX Spark 128GB (€5000) — дома гоняет CUDA-моделирование графов надёжности",
"Алекс — инфраструктура студии: агент-визуализатор, собственный роутер LM, RAG по знаниям кооператива",
("«1-й раз такое в моей практике… польза очевидна» — Леонид о демо", 1),
], kicker=K)
add_slide(prs, "Демо инфраструктуры студии", [
"Агент подключается к любому звонку и рисует слайды по ходу разговора (~45 сек на слайд)",
"Роутер сам выбирает LM под контекст (визуализация — GLM 5.3 Flash)",
"RAG: «он знает всё, что мы делаем» — общая база знаний кооператива",
("Инсайт Леонида: домашняя коробочка → быстрая генерация музыки/картинок/мини-видео", 1),
], kicker=K)
add_slide(prs, "Пилот: мультик по рассказу Леонида", [
"Мульт-адаптация рассказов (10–15 мин); Леонид готов финансово поддержать пилот",
"Ориентир бюджета — «в пределах 1000» на эксперимент (токены — точно, труд — обсудить)",
"Вход от студии: рассказ + свобода интерпретации, без пожеланий-ограничений",
"Партнёр уже строит harness генерации мультиков — матч идеальный; видео-часть ведёт Влад",
("Первый шаг — аудиоспектакль (дешевле и предсказуемее), затем видео", 1),
], kicker=K)
add_slide(prs, "Творческий метод Леонида", [
"Хакатон ~2018: нейросеть на сольных песнях Леннона/Маккартни классифицировала битловские",
"Пишет с ИИ (~80% своё / ~20% ИИ), честно маркирует «made with AI» на after.today",
("«Литературные негры» и мастерская Микеланджело — ИИ-ассистированное творчество не ново, нова честность", 1),
], kicker=K)
add_slide(prs, "Экономика локального инференса", [
"Леонид: DGX Spark — нормальная цена за «домашний интеллект»; коробки станут достоянием домов",
"Алекс: облачный always-on — ок для большинства; топ-модели для разработки всё равно выигрывают",
("Сошлись на гибриде: локально — быстрая генерация, облако — тяжёлые продуктовые задачи", 1),
("У студии в планах свой inference-сервер (в ~6 раз быстрее)", 1),
], kicker=K)
add_slide(prs, "Как строить AI-компанию", [
"Леонид: «Vision — говно, execution — всё». Из короткого промпта не вырастет сложная система",
"Алекс: ядро студии — AI-ядро, перестраивающее паттерны (64) при смене контекста — главный долгосрочный актив",
"Стратегия: бизнес на нейро-инфраструктуре с начала → перевод на автопилот; незаменим только «CEO-решатель»",
("«Изюминка студии — в AI-ядре» — Леонид", 1),
("Методология deep-tech: продавать ценность сразу, не влюбляясь в R&D", 1),
], kicker=K)
add_slide(prs, "Договорённости", [
"1. Пилот анимации по рассказу Леонида: токены покрывает Леонид (до ~1000), ведёт Влад; Alex вернётся с конкретным предложением",
"2. Формат разговора продолжается — Леонид открыт к следующим сессиям",
"3. Голоса/доли за прошлые инвестиции — Леонид отказался: «инвестирую из философских соображений, не создавайте ожиданий»",
"4. Леонид посмотрит 35-минутную презентацию студии и вернётся с фидбэком",
], kicker=K)
add_slide(prs, "Что делать студии дальше", [
"Подготовить оффер по мульт-пилоту: объём, этап аудиоспектакля, смета токенов",
"Подключить партнёрский harness генерации мультиков — Леонид как первый клиентский кейс",
"Зафиксировать кейс «агент-визуализатор на внешнем звонке» — первое живое демо, положительный фидбэк",
], kicker=K)
prs.save("out/leonid_meeting143.pptx")
# --- Pitch deck: Simbiot / Seedance ---
prs2 = Presentation(); prs2.slide_width = Inches(13.333); prs2.slide_height = Inches(7.5)
K2 = "Simbiot · питч"
add_slide(prs2, "Simbiot — общий харнес организации", [
"Стартап за неделю получает не одного ассистента, а команду ИИ-агентов:",
"один отвечает клиентам, второй пишет код, третий следит за деньгами и метриками",
"Слой поверх Hermes, Claude Code и других — вместо зоопарка агентов и харнесов",
], kicker=K2)
add_slide(prs2, "Проблема", [
"Фаундер собирает зоопарк из агентов и харнесов вручную",
"Ушёл разработчик — ушла вся магия: знания и автоматизации не переживают людей",
"Каждый новый инструмент — ещё один остров, не связанный с остальными",
], kicker=K2)
add_slide(prs2, "Решение", [
"Simbiot координирует флот агентов и фиксирует решения компании",
"Удачные приёмы копятся как «гены» — остаются только те, что приносят прибыль",
"Компания превращается в самообучающуюся нейро-инфраструктуру",
], kicker=K2)
add_slide(prs2, "Тракшен", [
"Уже гоняется на семи собственных продуктах студии",
"AI-ядро: 64 паттерна, перестраивающихся при смене контекста",
"Агент-визуализатор, RAG по знаниям, собственный LM-роутер — в продакшене",
], kicker=K2)
add_slide(prs2, "Видео (Seedance), 3 шота", [
"Shot 1 «зоопарк в хаосе»: тёмная серверная, хаотичные голограммы и глитчи (0–10 сек)",
"Shot 2 «orchestration»: хаос сходится в фиолетовую сферу, панели выстраиваются в сетку (10–20 сек)",
"Shot 3 «финал»: фаундер у стены дашбордов с растущими revenue-графиками, отъезд в город (20–30 сек)",
("Стиль: dark cinematic, #0a0c12 + violet #7c6cf5, film grain, 4k, 16:9", 1),
], kicker=K2)
add_slide(prs2, "Строй компанию — а не зоопарк ботов", [
"Simbiot · Кооператив 42 · simbiot",
"Хронометраж питча: ~35 сек (15 сек — первый и последний абзац)",
], kicker=K2)
prs2.save("out/simbiot_pitch.pptx")
print("OK")