Files
novafarma/scripts/continuous_sprite_generation.py
David Kotnik 965aea943c 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)
2026-01-04 14:32:12 +01:00

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()