133 lines
11 KiB
Python
133 lines
11 KiB
Python
#!/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")
|