#!/usr/bin/env python3 """ šŸŽ® DOLINA SMRTI - Background Asset Generator Runs unattended, generates remaining assets with transparent backgrounds Uses Google Imagen + rembg for transparent PNG output """ import os import sys import time import subprocess from pathlib import Path from datetime import datetime # Paths ARTIFACTS = Path("/Users/davidkotnik/.gemini/antigravity/brain/1359204e-4aaa-41ba-abbf-9b1bab2caa00") OUTPUT = Path("/Users/davidkotnik/repos/novafarma/assets/images") # Style prefix for all assets STYLE = "2D indie game sprite, cartoon vector style, clean smooth lines, full body visible, tight crop minimal padding, PNG game asset" # ============================================================================ # COMPLETE ASSET REGISTRY # ============================================================================ ASSETS = [ # NPCs - remaining ("npcs", "npc_mechanic", "mechanic survivor, oil stained clothes, wrench, welding goggles"), ("npcs", "npc_soldier", "ex-military survivor, tactical vest, rifle, scarred face"), ("npcs", "npc_medic", "field medic, white coat with blood stains, medical bag"), ("npcs", "npc_elder", "wise tribal elder, walking stick, long white beard"), ("npcs", "npc_child", "survivor orphan child, oversized clothes, teddy bear"), ("npcs", "npc_cook", "camp cook, pot and ladle, big belly, friendly"), ("npcs", "npc_scout", "nomad scout, binoculars, light armor, agile"), # Animation frames for main characters ("npcs", "gronk_front_walk1", "Gronk troll, PINK dreadlocks, black baggy shirt, front facing, walking animation frame 1"), ("npcs", "gronk_front_walk2", "Gronk troll, PINK dreadlocks, black baggy shirt, front facing, walking animation frame 2"), ("npcs", "gronk_back_walk1", "Gronk troll, PINK dreadlocks, black baggy shirt, back view, walking animation"), ("npcs", "kai_front_walk1", "Kai survivor, GREEN dreadlocks, blue jacket, front facing, walking animation frame 1"), ("npcs", "kai_front_walk2", "Kai survivor, GREEN dreadlocks, blue jacket, front facing, walking animation frame 2"), ("npcs", "kai_back_walk1", "Kai survivor, GREEN dreadlocks, blue jacket, back view, walking animation"), ("npcs", "ana_front_walk1", "Ana explorer, PINK dreadlocks, brown vest, front facing, walking animation frame 1"), ("npcs", "ana_front_walk2", "Ana explorer, PINK dreadlocks, brown vest, front facing, walking animation frame 2"), # More animals ("zivali", "pig_pink", "pink pig, curly tail, muddy, happy, farm animal"), ("zivali", "sheep_fluffy", "white fluffy sheep, wool, cute, farm animal"), ("zivali", "goat_brown", "brown goat, small horns, playful"), ("zivali", "horse_brown", "brown horse, black mane, majestic"), ("zivali", "rabbit_white", "white rabbit, long ears, fluffy"), ("zivali", "wolf_grey", "grey wolf, fierce, pack hunter, wildlife"), ("zivali", "bear_brown", "brown bear, large, powerful, wildlife"), ("zivali", "fox_red", "red fox, bushy tail, clever, wildlife"), ("zivali", "golden_goose", "Golden Goose, shimmering gold feathers, legendary"), ("zivali", "fire_sheep", "Fire Sheep, burning wool flames, magical mutant"), # More mutants ("mutanti", "slime_red", "red fire slime monster, hot, flames"), ("mutanti", "slime_purple", "purple poison slime, toxic, bubbling"), ("mutanti", "mutant_dog", "mutant dog, hairless, sores, vicious"), ("mutanti", "mutant_rat_giant", "giant rat mutant, dog sized, diseased"), ("mutanti", "mutant_spider", "giant spider, eight legs, web, terrifying"), ("mutanti", "zombie_bloated", "bloated zombie, huge swollen, toxic green drool"), ("mutanti", "zombie_armored", "armored zombie, riot gear, tough, slow"), ("mutanti", "zombie_crawler", "crawler zombie, no legs, crawling desperately"), # More bosses ("bosses", "boss_slime_emperor", "Slime Emperor, gigantic rainbow slime, crown, bouncing"), ("bosses", "boss_dragon_ice", "Ice Dragon, blue scales, frost breath, majestic"), ("bosses", "boss_spider_queen", "Spider Queen, giant spider, egg sacs, web lair"), ("bosses", "boss_werewolf", "Werewolf Alpha, massive wolf-human hybrid, moonlight"), ("bosses", "boss_vampire", "Vampire Lord, ancient, cape, fangs, pale"), ("bosses", "boss_phoenix", "Phoenix boss, giant fire bird, rebirth"), ("bosses", "boss_hydra", "Hydra, multi-headed serpent, regenerating"), ("bosses", "boss_golem", "Stone Golem, massive rock creature, ancient"), ("bosses", "boss_treant", "Elder Treant, giant living tree, nature guardian"), ("bosses", "boss_demon", "Demon Prince, hellfire, horns, terrifying"), # More items ("items", "tool_pickaxe_iron", "iron pickaxe, mining tool, wooden handle"), ("items", "tool_shovel", "shovel, digging tool, wooden handle"), ("items", "tool_hammer", "hammer, building tool"), ("items", "weapon_bow_wood", "wooden bow with arrows"), ("items", "weapon_spear", "wooden spear, hunting weapon"), ("items", "weapon_crossbow", "crossbow, powerful ranged"), ("items", "wand_lightning", "lightning magic wand, yellow crystal, sparks"), ("items", "wand_earth", "earth magic wand, green crystal, nature"), ("items", "wand_shadow", "shadow magic wand, purple crystal, darkness"), ("items", "wand_healing", "healing wand, white crystal, glow"), ("items", "potion_mana", "mana potion, blue liquid bottle"), ("items", "backpack_small", "small leather backpack"), ("items", "backpack_large", "large hiking backpack"), ("items", "helmet_metal", "metal protective helmet"), ("items", "gas_mask", "gas mask, protection, filters"), ("items", "food_bread", "bread loaf, fresh baked"), ("items", "food_apple", "red apple, fresh fruit"), ("items", "food_meat", "cooked meat, steak"), # More environment ("environment", "tree_pine", "pine tree, evergreen, cone shaped"), ("environment", "tree_dead", "dead tree, no leaves, gnarled"), ("environment", "tree_cherry", "cherry blossom tree, pink flowers"), ("environment", "flower_red", "red flowers patch"), ("environment", "flower_blue", "blue flowers patch"), ("environment", "mushroom_brown", "brown mushrooms cluster"), ("environment", "mushroom_red", "red spotted mushrooms"), ("environment", "fence_wood", "wooden fence section"), ("environment", "gate_wood", "wooden gate"), ("environment", "bridge_wood", "wooden bridge section"), ("environment", "barrel_wood", "wooden barrel, storage"), ("environment", "crate_wooden", "wooden shipping crate"), ("environment", "ruin_wall", "ruined brick wall section"), ("environment", "car_rusted", "rusted abandoned car"), ("environment", "sign_warning", "warning sign post"), # Tiles (32x32) ("environment", "tile_grass_green", "green grass ground tile, 32x32 seamless texture"), ("environment", "tile_grass_dry", "dry brown grass tile, 32x32 seamless texture"), ("environment", "tile_dirt_brown", "brown dirt path tile, 32x32 seamless texture"), ("environment", "tile_sand_yellow", "yellow sand beach tile, 32x32 seamless texture"), ("environment", "tile_snow_white", "white snow tile, 32x32 seamless texture"), ("environment", "tile_water_shallow", "shallow blue water tile, 32x32 seamless texture"), ("environment", "tile_stone_grey", "grey stone floor tile, 32x32 seamless texture"), # UI ("ui", "ui_health_bar", "health bar UI, red hearts row"), ("ui", "ui_energy_bar", "energy bar UI, green lightning"), ("ui", "ui_inventory_slot", "inventory slot UI, wooden frame"), ("ui", "ui_button_menu", "menu button UI, wooden, round"), ("ui", "ui_cursor_hand", "hand cursor pointer"), ("ui", "ui_icon_gold", "gold coin icon"), ] def log(msg): """Log with timestamp""" ts = datetime.now().strftime("%H:%M:%S") print(f"[{ts}] {msg}") sys.stdout.flush() def generate_with_gemini(prompt, name): """Generate image using Gemini CLI tool""" # This uses the gemini command line if available # Falls back to placeholder for now log(f"ā³ Would generate: {name}") return False def remove_background(src_path, dst_path): """Remove background using rembg""" try: from rembg import remove from PIL import Image img = remove(Image.open(src_path)) img.save(dst_path, "PNG") return True except Exception as e: log(f"āŒ rembg error: {e}") return False def main(): log("=" * 60) log("šŸŽ® DOLINA SMRTI - Background Asset Generator") log("=" * 60) # Get already generated existing = set() for cat in ["npcs", "zivali", "mutanti", "bosses", "items", "environment", "ui"]: cat_dir = OUTPUT / cat if cat_dir.exists(): for f in cat_dir.glob("*.png"): existing.add(f.stem) log(f"šŸ“Š Existing: {len(existing)} | Total: {len(ASSETS)}") remaining = [(c, n, p) for c, n, p in ASSETS if n not in existing] log(f"šŸŽÆ To generate: {len(remaining)}") if not remaining: log("āœ… All assets already generated!") return log("\nšŸ“‹ Queue:") for cat, name, _ in remaining[:10]: log(f" - {cat}/{name}") if len(remaining) > 10: log(f" ... and {len(remaining) - 10} more") log("\nāš ļø Manual generation required:") log(" This script shows the queue.") log(" Use the Gemini generate_image tool interactively.") log("\nāœ… Script complete - see queue above") if __name__ == "__main__": main()