COMPLETED: - English (12 files) - en-US voices - German (in progress) - de-DE voices - Italian (in progress) - it-IT voices - Chinese (in progress) - zh-CN voices VOICES USED: EN: Christopher (narrator), Guy (Kai), Jenny (Ana) DE: Killian (narrator), Conrad (Kai), Katja (Ana) IT: Giuseppe (narrator), Diego (Kai), Elsa (Ana) ZH: Yunjian (narrator), Yunxi (Kai), Xiaoxiao (Ana) SCRIPTS CREATED: - generate_prologue_english.sh - generate_prologue_german.sh - generate_prologue_italian.sh - generate_prologue_chinese.sh JSON LOCALIZATION: - sl-SI.json (Slovenian source) - en-US.json, de-DE.json, it-IT.json, zh-CN.json Total when complete: 60 voice files (12 × 5 languages)
300 lines
13 KiB
Python
300 lines
13 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
CONTINUOUS SPRITE GENERATION - Auto Queue System
|
|
Generates sprites until API quota exhausted, waits for reset, continues
|
|
|
|
Usage:
|
|
python3 continuous_sprite_generation.py
|
|
"""
|
|
|
|
import time
|
|
import json
|
|
import os
|
|
from datetime import datetime, timedelta
|
|
from pathlib import Path
|
|
|
|
# Configuration
|
|
OUTPUT_DIR = Path("assets/images/STYLE_32_SESSION_JAN_04")
|
|
QUEUE_FILE = Path("sprite_generation_queue.json")
|
|
LOG_FILE = Path("generation_log.txt")
|
|
|
|
# API Limits (Google Gemini Pro Image)
|
|
API_QUOTA_LIMIT = 60 # Images per reset period
|
|
API_RESET_INTERVAL_MINUTES = 60 # Resets every hour
|
|
|
|
# Generation queue (priority ordered)
|
|
SPRITE_QUEUE = [
|
|
# ========================================
|
|
# BATCH 1: HIGH PRIORITY (15 sprites) - 14:19-14:25
|
|
# ========================================
|
|
{
|
|
"name": "interior_bed_kingsize",
|
|
"prompt": "128x96px ornate kingsize bed, dark wood Gothic headboard with skull carvings, purple silk sheets, two skull pillows, candelabra on nightstand, ultra-thick 5px black outlines, flat cel-shaded colors, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior",
|
|
"size": "128x96"
|
|
},
|
|
{
|
|
"name": "interior_chest_locked",
|
|
"prompt": "48x48px wooden treasure chest, large skull-shaped lock, metal bands, purple glow emanating from keyhole, mystery box, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_bookshelf",
|
|
"prompt": "64x96px tall Gothic bookcase, filled with dark leather books, some books glowing purple light, skull bookends on shelves, candles on top shelf creating atmosphere, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_kitchen_fridge",
|
|
"prompt": "64x96px tall refrigerator, black metal construction, skull-shaped door handle, purple magical glow from crack in door (cold magic), ultra-thick 5px black outlines, flat colors, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_kitchen_sink",
|
|
"prompt": "48x48px stone sink basin, Gothic ornate faucet, skull-shaped drain, water dripping, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_recipe_shelf",
|
|
"prompt": "64x64px cookbook shelf, recipe books organized neatly, some books glowing purple (magical recipes), skull bookends holding them, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_secret_passage",
|
|
"prompt": "64x96px hidden door in stone wall, slightly ajar revealing purple light from inside, skull-shaped door handle, secret passage to underground bunker, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_ritual_circle",
|
|
"prompt": "96x96px dark magic circle on floor (floor decal), purple glowing occult runes in circle pattern, skull symbols at cardinal points, pentagram in center, can place ritual items on it, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_memory_vault",
|
|
"prompt": "64x64px special ornate locked chest, intricate skull and rose carvings, Ana's belongings inside glowing purple, mystical emotional aura around it, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_piercing_tools",
|
|
"prompt": "48x48px medical tray with sterile piercing needles, piercing guns, variety of ear gauges displayed, sterilization purple UV light glowing, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "interior_scissors_rack",
|
|
"prompt": "32x64px professional barber scissors hanging on wall rack, straight razors, various combs, all with skull-shaped handles, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
{
|
|
"name": "mine_ore_vein_copper",
|
|
"prompt": "48x48px exposed copper ore vein in dark stone wall, orange metallic shine, can be mined with pickaxe, resource node, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "mine"
|
|
},
|
|
{
|
|
"name": "mine_ore_vein_gold",
|
|
"prompt": "48x48px gold ore vein in stone, yellow golden glitter and shine, very valuable resource, can be mined, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "mine"
|
|
},
|
|
{
|
|
"name": "mine_crystal_purple",
|
|
"prompt": "32x48px glowing purple crystal growing from dark cave floor, LIGHT SOURCE emitting bright purple glow in darkness, mystical energy, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 1,
|
|
"category": "mine"
|
|
},
|
|
{
|
|
"name": "interior_zombie_brain_jar",
|
|
"prompt": "32x48px glass jar containing preserved zombie brain, purple preservative liquid, glowing eerily, for zombie worker home decoration, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 1,
|
|
"category": "interior"
|
|
},
|
|
|
|
# ========================================
|
|
# BATCH 2: MEDIUM PRIORITY - Living Room (15 sprites) - 14:25-14:35
|
|
# ========================================
|
|
{
|
|
"name": "interior_sofa_gothic",
|
|
"prompt": "96x64px large Gothic sofa, purple velvet cushions, skull decorations on armrests, dark wood frame, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_armchair_skull",
|
|
"prompt": "64x64px ornate armchair, skull-shaped backrest, purple cushion, dark wood, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_coffee_table",
|
|
"prompt": "64x48px dark wood coffee table, skull centerpiece, magazines scattered, purple glass top, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_fireplace_gothic",
|
|
"prompt": "96x128px large stone fireplace, purple magical flames burning inside, skull mantelpiece, Gothic carvings, LIGHT SOURCE, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_tv_modern",
|
|
"prompt": "64x48px flat screen TV showing static with purple glow, mounted on wall, skull logo on frame, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_painting_portrait",
|
|
"prompt": "48x64px framed dark portrait painting, mysterious figure with purple glow, skull in corner, ornate Gothic frame, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_rug_persian",
|
|
"prompt": "96x128px ornate Persian rug, dark purple and black patterns, skull motifs woven in, floor decal, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_curtains_velvet",
|
|
"prompt": "32x96px heavy purple velvet curtains, skull-shaped tiebacks, draped dramatically, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_grandfather_clock",
|
|
"prompt": "48x128px tall Gothic grandfather clock, skull on pendulum, purple glowing clock face, Roman numerals, ticking ominously, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_chandelier_crystal",
|
|
"prompt": "64x64px ornate crystal chandelier, purple crystals, skull decorations, LIGHT SOURCE emitting purple glow, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_plant_dead",
|
|
"prompt": "32x48px dead decorative plant in Gothic pot, withered purple leaves, skull planter, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_candelabra_five",
|
|
"prompt": "48x64px five-candle candelabra, purple magical flames, ornate black metal, skull base, LIGHT SOURCE, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_mirror_ornate",
|
|
"prompt": "64x96px large ornate mirror, Gothic skull frame, purple reflection glow, slightly cracked glass, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_side_table",
|
|
"prompt": "48x48px small side table, dark wood, skull drawer knob, purple lamp on top, ultra-thick 5px black outlines, Dark-Chibi Noir style, chroma green #00FF00 background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
{
|
|
"name": "interior_trophy_skull",
|
|
"prompt": "32x48px mounted trophy skull on wooden plaque, purple glowing eyes, hunter achievement, ultra-thick 5px black outlines, Dark-Chibi Noir, chroma green background",
|
|
"priority": 2,
|
|
"category": "living_room"
|
|
},
|
|
|
|
# Continue with more batches...
|
|
# BATCH 3: Bedroom Extended (12 sprites) - After reset
|
|
# BATCH 4: Kitchen/Dining (18 sprites)
|
|
# BATCH 5: Outdoors (20 sprites)
|
|
# etc.
|
|
]
|
|
|
|
def log_message(message):
|
|
"""Log to file and print"""
|
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
log_entry = f"[{timestamp}] {message}"
|
|
print(log_entry)
|
|
|
|
with open(LOG_FILE, 'a') as f:
|
|
f.write(log_entry + "\n")
|
|
|
|
def check_api_quota():
|
|
"""Check if we have API quota remaining"""
|
|
# This would check actual API usage
|
|
# For now, return True (implement actual check)
|
|
return True
|
|
|
|
def wait_for_api_reset():
|
|
"""Wait until next API quota reset"""
|
|
next_reset = datetime.now().replace(minute=19, second=0, microsecond=0)
|
|
if datetime.now() > next_reset:
|
|
next_reset += timedelta(hours=1)
|
|
|
|
wait_seconds = (next_reset - datetime.now()).total_seconds()
|
|
log_message(f"⏰ Waiting {wait_seconds/60:.1f} minutes for API reset at {next_reset.strftime('%H:%M')}")
|
|
|
|
time.sleep(wait_seconds)
|
|
|
|
def generate_sprite(sprite_data):
|
|
"""Generate a single sprite (placeholder)"""
|
|
log_message(f"🎨 Generating: {sprite_data['name']} ({sprite_data['category']})")
|
|
|
|
# This would call actual generation API
|
|
# For now, simulate
|
|
time.sleep(2) # Simulate generation time
|
|
|
|
output_file = OUTPUT_DIR / f"{sprite_data['name']}.png"
|
|
log_message(f"✅ Saved: {output_file}")
|
|
|
|
return True
|
|
|
|
def main():
|
|
"""Main generation loop"""
|
|
log_message("=" * 60)
|
|
log_message("🚀 CONTINUOUS SPRITE GENERATION - STARTING")
|
|
log_message("=" * 60)
|
|
|
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
total_generated = 0
|
|
batch_number = 1
|
|
|
|
for i, sprite in enumerate(SPRITE_QUEUE):
|
|
# Check quota before generation
|
|
if not check_api_quota():
|
|
log_message("⚠️ API quota exhausted!")
|
|
wait_for_api_reset()
|
|
batch_number += 1
|
|
log_message(f"🔄 Batch {batch_number} starting after reset")
|
|
|
|
# Generate sprite
|
|
success = generate_sprite(sprite)
|
|
|
|
if success:
|
|
total_generated += 1
|
|
log_message(f"📊 Progress: {total_generated}/{len(SPRITE_QUEUE)} ({total_generated/len(SPRITE_QUEUE)*100:.1f}%)")
|
|
|
|
# Batch completion notifications
|
|
if total_generated % 15 == 0:
|
|
log_message("=" * 60)
|
|
log_message(f"🎉 BATCH {batch_number} COMPLETE: {total_generated} sprites generated!")
|
|
log_message("=" * 60)
|
|
|
|
log_message("=" * 60)
|
|
log_message(f"✅ ALL SPRITES GENERATED: {total_generated} total")
|
|
log_message("=" * 60)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|