Files
novafarma/scripts/generate_intro_assets.py
David Kotnik 617f786ead 🎬 Jan 8 Enhanced Prologue - Voice + Asset Integration
 ENHANCED INTRO SYSTEM:

**🎙️ Enhanced Voices (5 MP3):**
- JennyNeural (Kai) - Warm, emotional
- RyanNeural (Narrator) - Deep, British
- Slower pacing, emotional delivery
- Cinematic timing

Generated:
1. 00_kai_breathing.mp3 (35KB)
2. 01_narrator_flyover_enhanced.mp3 (70KB)
3. 02_kai_awakening_enhanced.mp3 (39KB)
4. 03_kai_truth_enhanced.mp3 (84KB)
5. 04_kai_determination_enhanced.mp3 (58KB)

**🎨 Intro Assets (5 PNG):**
1. cellar_ruins.png - Ruined cellar background
2. id_card.png - ID card close-up
3. twin_photo.png - Kai & Ana photo
4. black_screen.png - Opening black screen
5. blur_overlay.png - Blurred vision effect

**🎬 EnhancedPrologueScene.js:**
Complete 5-phase intro:
- Phase 1: Black screen + breathing (0:00-0:10)
- Phase 2: Narrator flyover (0:10-1:00)
- Phase 3: Awakening with blur (1:00-1:30)
- Phase 4: ID card + twin photo cross-fade (1:30-2:30)
- Phase 5: Determination + quest trigger (2:30-3:00)

Features:
 Voice-synced subtitles
 Smooth cross-fade transitions
 Auto quest notification
 ESC to skip
 Blur effect (vision clearing)
 Zoom/scale effects
 Noir ambient music

**📝 Scripts Created:**
1. generate_intro_enhanced.py - Enhanced voices
2. generate_intro_assets.py - Placeholder images

**Status:** Ready for multilingual + SSML upgrade!
2026-01-08 17:41:36 +01:00

105 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Generate Intro Asset Placeholders
Creates placeholder images for intro cutscene
"""
from PIL import Image, ImageDraw, ImageFont
from pathlib import Path
OUTPUT_DIR = Path("/Users/davidkotnik/repos/novafarma/assets/intro_assets")
def create_placeholder(filename, width, height, text, bg_color=(40, 40, 50), text_color=(200, 200, 200)):
"""Create a placeholder image"""
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
img = Image.new('RGB', (width, height), color=bg_color)
draw = ImageDraw.Draw(img)
# Try to use a nice font, fallback to default
try:
font = ImageFont.truetype("/System/Library/Fonts/Helvetica.ttc", 40)
font_small = ImageFont.truetype("/System/Library/Fonts/Helvetica.ttc", 20)
except:
font = ImageFont.load_default()
font_small = font
# Draw text in center
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
position = ((width - text_width) // 2, (height - text_height) // 2)
draw.text(position, text, fill=text_color, font=font)
# Add "PLACEHOLDER" label
label = "PLACEHOLDER - Replace with real asset"
bbox_label = draw.textbbox((0, 0), label, font=font_small)
label_width = bbox_label[2] - bbox_label[0]
label_pos = ((width - label_width) // 2, height - 40)
draw.text(label_pos, label, fill=(150, 150, 150), font=font_small)
output_path = OUTPUT_DIR / filename
img.save(output_path)
print(f"✅ Created: {filename} ({width}x{height})")
return output_path
def main():
"""Generate all intro placeholders"""
print("🎨 GENERATING INTRO ASSET PLACEHOLDERS...")
print("="*60)
# 1. Ruined Cellar Background
create_placeholder(
"cellar_ruins.png",
1024, 768,
"🏚️ RUINED CELLAR",
bg_color=(30, 25, 20)
)
# 2. ID Card (Close-up)
create_placeholder(
"id_card.png",
512, 320,
"🪪 ID CARD\nKai Marković\n14 years",
bg_color=(220, 210, 190)
)
# 3. Twin Photo (Flashback)
create_placeholder(
"twin_photo.png",
400, 300,
"👯 TWIN SISTERS\nKai & Ana",
bg_color=(200, 180, 160)
)
# 4. Black Screen (for breathing scene)
create_placeholder(
"black_screen.png",
1024, 768,
"",
bg_color=(0, 0, 0)
)
# 5. Blurred Vision Overlay
img = Image.new('RGBA', (1024, 768), color=(10, 10, 15, 180))
img.save(OUTPUT_DIR / "blur_overlay.png")
print("✅ Created: blur_overlay.png (1024x768)")
print("\n" + "="*60)
print("✅ ALL PLACEHOLDERS CREATED!")
print("="*60)
print(f"\nOutput: {OUTPUT_DIR}")
print("\nAssets:")
print(" 1. cellar_ruins.png - Ruined cellar background")
print(" 2. id_card.png - ID card close-up")
print(" 3. twin_photo.png - Kai & Ana photo")
print(" 4. black_screen.png - Opening black screen")
print(" 5. blur_overlay.png - Blurred vision effect")
print("\n⚠️ These are PLACEHOLDERS!")
print("Replace with real artwork from your artist.")
if __name__ == "__main__":
main()