from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
# Create presentation
prs = Presentation()
prs.slide_width = Inches(10)
prs.slide_height = Inches(5.625)
# Define color scheme
PRIMARY = RGBColor(124, 58, 237) # Purple
SECONDARY = RGBColor(236, 72, 153) # Pink
ACCENT = RGBColor(6, 182, 212) # Cyan
DARK_BG = RGBColor(15, 23, 42) # Dark blue
TEXT_PRIMARY = RGBColor(241, 245, 249) # Light text
TEXT_SECONDARY = RGBColor(203, 213, 225) # Secondary text
TEXT_MUTED = RGBColor(148, 163, 184) # Muted text
def add_title_slide(prs, title, subtitle):
"""Add title slide"""
slide = prs.slides.add_slide(prs.slide_layouts[6]) # Blank layout
background = slide.background
fill = background.fill
fill.solid()
fill.fore_color.rgb = DARK_BG
# Add title
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(9), Inches(1.5))
title_frame = title_box.text_frame
title_frame.text = title
title_frame.paragraphs[0].font.size = Pt(72)
title_frame.paragraphs[0].font.bold = True
title_frame.paragraphs[0].font.color.rgb = PRIMARY
title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# Add subtitle
subtitle_box = slide.shapes.add_textbox(Inches(0.5), Inches(3.2), Inches(9), Inches(1))
subtitle_frame = subtitle_box.text_frame
subtitle_frame.text = subtitle
subtitle_frame.paragraphs[0].font.size = Pt(32)
subtitle_frame.paragraphs[0].font.color.rgb = TEXT_SECONDARY
subtitle_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# Add meta
meta_box = slide.shapes.add_textbox(Inches(0.5), Inches(4.8), Inches(9), Inches(0.5))
meta_frame = meta_box.text_frame
meta_frame.text = "Investment Pitch Deck • March 2026"
meta_frame.paragraphs[0].font.size = Pt(18)
meta_frame.paragraphs[0].font.color.rgb = TEXT_MUTED
meta_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
return slide
def add_content_slide(prs, title, content_dict=None, bullet_points=None, two_column=False):
"""Add content slide with bullets"""
slide = prs.slides.add_slide(prs.slide_layouts[6])
background = slide.background
fill = background.fill
fill.solid()
fill.fore_color.rgb = DARK_BG
# Add title
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(9), Inches(0.8))
title_frame = title_box.text_frame
title_frame.text = title
title_frame.paragraphs[0].font.size = Pt(48)
title_frame.paragraphs[0].font.bold = True
title_frame.paragraphs[0].font.color.rgb = ACCENT
if not two_column:
# Single column layout
content_box = slide.shapes.add_textbox(Inches(0.7), Inches(1.5), Inches(8.6), Inches(3.8))
text_frame = content_box.text_frame
text_frame.word_wrap = True
if bullet_points:
for i, point in enumerate(bullet_points):
if i == 0:
p = text_frame.paragraphs[0]
else:
p = text_frame.add_paragraph()
p.text = point
p.font.size = Pt(20)
p.font.color.rgb = TEXT_SECONDARY
p.level = 0
p.space_before = Pt(8)
p.space_after = Pt(8)
else:
# Two column layout
left_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(4.5), Inches(3.8))
left_frame = left_box.text_frame
left_frame.word_wrap = True
# Left column title
p = left_frame.paragraphs[0]
p.text = content_dict.get('left_title', 'Left')
p.font.size = Pt(26)
p.font.bold = True
p.font.color.rgb = SECONDARY
for point in content_dict.get('left_points', []):
p = left_frame.add_paragraph()
p.text = point
p.font.size = Pt(18)
p.font.color.rgb = TEXT_SECONDARY
p.level = 0
p.space_before = Pt(6)
p.space_after = Pt(6)
# Right column
right_box = slide.shapes.add_textbox(Inches(5.2), Inches(1.5), Inches(4.3), Inches(3.8))
right_frame = right_box.text_frame
right_frame.word_wrap = True
# Right column title
p = right_frame.paragraphs[0]
p.text = content_dict.get('right_title', 'Right')
p.font.size = Pt(26)
p.font.bold = True
p.font.color.rgb = ACCENT
for point in content_dict.get('right_points', []):
p = right_frame.add_paragraph()
p.text = point
p.font.size = Pt(18)
p.font.color.rgb = TEXT_SECONDARY
p.level = 0
p.space_before = Pt(6)
p.space_after = Pt(6)
return slide
# SLIDE 1: TITLE
add_title_slide(prs, "casting.monster", "The Global Casting Agency for AI Generative Models")
# SLIDE 2: THE PROBLEM
add_content_slide(prs, "The Problem", bullet_points=[
"🎯 AI industry's bottleneck: Quality, legally-licensed datasets with real faces are scarce",
"⚖️ Legal & ethical risks: Brands fear deepfakes and unauthorized face usage in generative models",
"💸 Lost opportunity: Regular people don't monetize their appearance—big platforms profit, creators earn zero",
"📊 Market fragmentation: No standardized way for AI companies to acquire legal face licenses"
])
# SLIDE 3: THE SOLUTION
add_content_slide(prs, "The Solution: casting.monster", two_column=True, content_dict={
'left_title': 'For Creators',
'left_points': [
'✓ Upload photos → Get verified → Earn passive income',
'✓ Control permissions (industry, geography, use case)',
'✓ Transparent royalty model: see every license sold'
],
'right_title': 'For AI Companies',
'right_points': [
'✓ Access legally-licensed face datasets',
'✓ Curated collections by style & demographics',
'✓ API integration + white-label options'
]
})
# SLIDE 4: MARKET OPPORTUNITY
add_content_slide(prs, "Market Opportunity", bullet_points=[
"💰 $50B+ Global generative AI market (2026)",
"👥 2.5B+ Potential creator base worldwide",
"📈 10-15% Typical margin on licensing platforms",
"",
"TAM: Any company training or using generative models",
"SAM: Top 500 AI/Gen-AI startups + major brands (~$2-5B annually)",
"SOM (Year 3): 2-3% of SAM = $40-150M revenue potential"
])
# SLIDE 5: BUSINESS MODEL
add_content_slide(prs, "Revenue Streams", bullet_points=[
"💳 Per-Transaction Commission: 30% platform fee (creators get 70% royalty)",
"",
"📱 B2B Subscriptions: $500-5,000/month (unlimited downloads, priority access, API)",
"",
"⭐ Premium Services: Custom dataset curation, white-label, legal support",
"",
"Unit Economics: $5-50 per license | LTV: $36K-180K | CAC payback: 2-4 months"
])
# SLIDE 6: GO-TO-MARKET
add_content_slide(prs, "Go-to-Market Strategy (Year 1-2)", two_column=True, content_dict={
'left_title': 'Phase 1 (Months 1-6)',
'left_points': [
'→ Launch MVP with 1-2K creators',
'→ Partner with 3-5 AI studios',
'→ Build PR around ethical AI faces'
],
'right_title': 'Phase 2 (Months 7-18)',
'right_points': [
'→ Scale to 50K+ creators',
'→ Secure 15-20 enterprise customers',
'→ Launch API & white-label tier'
]
})
# SLIDE 7: COMPETITIVE ADVANTAGES
add_content_slide(prs, "Competitive Advantages", bullet_points=[
"🔐 Legal Clarity: Clear licensing agreements + smart contracts, full compliance",
"",
"🌐 Creator Network Effect: More creators → Better datasets → More buyers → Higher payouts",
"",
"✅ Ethically-Sourced Data: Verified consent, no stolen images, transparent provenance",
"",
"⚡ First-Mover Advantage: Regulated face-licensing space + community-driven dataset"
])
# SLIDE 8: TEAM & FUNDING
add_content_slide(prs, "Team & Funding Ask", two_column=True, content_dict={
'left_title': 'Founding Team',
'left_points': [
'CEO: 10+ years in AI/creatives',
'CTO: Full-stack engineer',
'Head of Legal: AI compliance expert',
'VP Growth: Creator/influencer expert'
],
'right_title': 'Seed Ask: $1.5M',
'right_points': [
'40% Product & Engineering',
'30% Creator Acquisition & Ops',
'20% Legal & Compliance',
'10% Overhead & Runway'
]
})
# SLIDE 9: CTA
slide = prs.slides.add_slide(prs.slide_layouts[6])
background = slide.background
fill = background.fill
fill.solid()
fill.fore_color.rgb = PRIMARY
# Title
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.2), Inches(9), Inches(1.2))
title_frame = title_box.text_frame
title_frame.word_wrap = True
title_frame.text = "Join Us in Shaping the AI Creator Economy"
title_frame.paragraphs[0].font.size = Pt(48)
title_frame.paragraphs[0].font.bold = True
title_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# Subtitle
subtitle_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.5), Inches(9), Inches(1.2))
subtitle_frame = subtitle_box.text_frame
subtitle_frame.word_wrap = True
subtitle_frame.text = "Help creators own their image in the AI era, while giving enterprises legal access to diverse generative datasets."
subtitle_frame.paragraphs[0].font.size = Pt(24)
subtitle_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
subtitle_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# Contact
contact_box = slide.shapes.add_textbox(Inches(0.5), Inches(4.5), Inches(9), Inches(0.8))
contact_frame = contact_box.text_frame
contact_frame.text = "casting.monster.com | hello@casting.monster"
contact_frame.paragraphs[0].font.size = Pt(20)
contact_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
contact_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# Save presentation
output_path = '/tmp/casting_monster_pitch_deck.pptx'
prs.save(output_path)
print("✅ POWERPOINT ПРЕЗЕНТАЦИЯ СОЗДАНА!")
print(f"\n📄 Файл: casting_monster_pitch_deck.pptx")
print(f"📍 Путь: {output_path}")
print("\n📊 Содержание (9 слайдов):")
print(" Слайд 1: Title Slide")
print(" Слайд 2: The Problem")
print(" Слайд 3: The Solution (2-column)")
print(" Слайд 4: Market Opportunity")
print(" Слайд 5: Revenue Streams & Business Model")
print(" Слайд 6: Go-to-Market Strategy (2-column)")
print(" Слайд 7: Competitive Advantages")
print(" Слайд 8: Team & Funding Ask (2-column)")
print(" Слайд 9: Call to Action")
print("\n🎨 Дизайн:")
print(" • Темная тема (DARK_BG: #0F172A)")
print(" • Purple (#7C3AED) primary цвет")
print(" • Pink (#EC4899) secondary цвет")
print(" • Cyan (#06B6D4) accent цвет")
print(" • Профессиональный шрифт")
print("\n✨ Готово к загрузке и использованию!")