MULTI-LANGUAGE VOICE GENERATION - 4 Languages Started
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)
This commit is contained in:
299
scripts/continuous_sprite_generation.py
Normal file
299
scripts/continuous_sprite_generation.py
Normal file
@@ -0,0 +1,299 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user