✅ 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!
105 lines
3.2 KiB
Python
Executable File
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()
|