Загрузка данных


from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE

prs = Presentation()
prs.slide_width = Inches(16)   # 16:9 формат
prs.slide_height = Inches(9)

# Цвета в стиле твоих примеров
BLACK = RGBColor(0, 0, 0)
WHITE = RGBColor(255, 255, 255)
GRAY = RGBColor(40, 40, 40)

def title_slide(title, subtitle=""):
    slide = prs.slides.add_slide(prs.slide_layouts[0])
    title_shape = slide.shapes.title
    subtitle_shape = slide.placeholders[1]
    
    title_shape.text = title
    p = title_shape.text_frame.paragraphs[0]
    p.font.size = Pt(60)
    p.font.bold = True
    p.font.color.rgb = WHITE
    p.alignment = PP_ALIGN.CENTER
    
    if subtitle:
        subtitle_shape.text = subtitle
        p2 = subtitle_shape.text_frame.paragraphs[0]
        p2.font.size = Pt(28)
        p2.font.color.rgb = WHITE
    return slide

def content_slide(title, bullets, image_notes=""):
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    title_shape = slide.shapes.title
    title_shape.text = title
    title_shape.text_frame.paragraphs[0].font.size = Pt(44)
    title_shape.text_frame.paragraphs[0].font.bold = True
    
    body_shape = slide.placeholders[1]
    tf = body_shape.text_frame
    tf.clear()
    
    for bullet in bullets:
        p = tf.add_paragraph()
        p.text = bullet
        p.font.size = Pt(26)
        p.space_after = Pt(14)
        p.level = 0
    
    # Примечание для тебя (куда вставлять фото)
    if image_notes:
        print(f"→ {title}: {image_notes}")
    return slide

# ====================== НАЧИНАЕМ СОЗДАВАТЬ СЛАЙДЫ ======================

# 1. Титульный
title_slide(
    "КАК ПОБОРОТЬ СИНДРОМ\nСАМОЗВАНЦА",
    "и выйти на чек 300–400 €"
)

# 2. Что будет на эфире
content_slide(
    "ЧТО БУДЕТ НА ЭФИРЕ",
    [
        "• Путь от флориста к фэшн-фотографу",
        "• Разбор слабого фотографа",
        "• Как поднять чек до 300–400 €",
        "• Типы клиентов и как с ними работать",
        "• Разбор ваших работ (если пришлёте)"
    ],
    "Большое фото тебя или динамичная фэшн-съёмка справа"
)

# 3. Кто я
title_slide("КТО Я", "Путь от флориста до фэшн-фотографа")

content_slide(
    "МОЙ ПУТЬ",
    [
        "• Работал флористом — мало зарабатывал",
        "• Купил камеру в рассрочку",
        "• 3 месяца боялся к ней прикоснуться",
        "• Первая съёмка — 5 000 ₽"
    ],
    "Фото: ты как флорист или первая камера"
)

content_slide(
    "ПЕРЕХОД В ВИДЕО",
    [
        "• Стал популярным фэшн-видеографом",
        "• Работал с брендами (Iconic Bell You и др.)",
        "• Вернулся в фото с новым уровнем"
    ],
    "3–4 фото: ранние работы + текущие"
)

# 4. Два пути
content_slide(
    "ЕСТЬ ДВА ПУТИ: ТЕОРИЯ И ПРАКТИКА",
    [
        "• ПРАКТИКА — фундамент, без которого ничего не выйдет",
        "• ТЕОРИЯ — тонкости, которые выводят на новый уровень"
    ],
    "Три динамичных чёрно-белых фото моделей (как в твоём примере)"
)

# 5. Разбор слабого фотографа
content_slide(
    "ПОЧЕМУ ВОВА ВСЕГДА ОСТАНЕТСЯ СЛАБЫМ",
    [
        "• 10 лет опыта",
        "• Ведёт соцсети",
        "• Собирал команду",
        "",
        "Но результат слабый"
    ],
    "Фото «Вовы» (можно стоковое)"
)

content_slide(
    "ПОЧЕМУ ВОВА СЛАБЫЙ",
    [
        "• Нет сильного УТП",
        "• Не умеет продавать",
        "• Нет индивидуального стиля"
    ]
)

content_slide(
    "САША VS ВОВА",
    [
        "Саша (3 года):",
        "• Востребованный",
        "• Сильное УТП",
        "• Индивидуальный стиль",
        "• Умеет работать с брендами",
        "",
        "→ В ассистенты я возьму Сашу"
    ],
    "Сравнительные фото"
)

# 6. Стиль
content_slide(
    "СТИЛЬ — ОСНОВА, КОТОРОЙ НЕ ОБУЧАЮТ",
    ["Есть стиль → Есть работа", "Нет стиля → Всегда среднячок"],
    "Два больших фото рядом: с стилем и без"
)

# 7. Как выйти на чек 300-400€
content_slide(
    "КАК ВЫЙТИ НА ЧЕК 300–400 €",
    ["ЧЕК — ЭТО ПОЗИЦИОНИРОВАНИЕ"],
    "Большое фото успешной съёмки"
)

content_slide(
    "5 ШАГОВ К НОВОМУ ЧЕКУ",
    [
        "1. Анализ: сколько клиентов, какая ниша, какой средний чек",
        "2. Выбор стратегии: быть среднячком или профи в одном",
        "3. Люди покупают не фотографа, а ЛИЧНОСТЬ",
        "4. Усиление слабых сторон",
        "5. Выход на рынок (соцсети + бренды)"
    ]
)

content_slide(
    "СОЦСЕТИ — ЗОЛОТАЯ ЖИЛА",
    [
        "Зрители = потенциальные клиенты",
        "Лента Instagram = современные журналы",
        "Реальные деньги приносят бренды и звёзды"
    ]
)

# 8. Типы клиентов
content_slide(
    "ТИПЫ КЛИЕНТОВ",
    [
        "С кем НЕ работаем (красные флаги)",
        "С кем работаем (высокий чек)"
    ],
    "Два столбца или два фото"
)

# 9. Результаты и мотивация
content_slide(
    "РЕЗУЛЬТАТ, КОТОРЫЙ ВОЗМОЖЕН",
    [
        "• +30 000 подписчиков за 150 дней",
        "• Стабильный рост",
        "• Выход на бренды"
    ],
    "График роста (вставь свой или сделай в Canva и вставь)"
)

title_slide(
    "НЕ НУЖНО УХОДИТЬ В КРАЙНОСТИ",
    "Можно выбрать свою середину и свои правила"
)

# 10. Призыв
content_slide(
    "ЗАПИСАТЬСЯ НА ОБУЧЕНИЕ",
    [
        "Промокод: fash@ont# (действует 24 часа)",
        "Анкетирование в закрепе",
        "Скидывайте свои работы — разберём лично"
    ],
    "Твоё фото + контакт"
)

# Финальный слайд
title_slide(
    "ДАВАЙТЕ ПОГОВОРИМ",
    "Жду твою заявку → Переходи к новому уровню"
)

# Сохранение
prs.save("Как_побороть_синдром_самозванца_и_выйти_на_чек_300-400.pptx")
print("\n✅ Презентация успешно создана!")
print("Файл: Как_побороть_синдром_самозванца_и_выйти_на_чек_300-400.pptx")
print("\nТеперь открой файл и вставь свои фото в указанные места.")