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✨ Готово к загрузке и использованию!")