Assets (54 PNG files with transparent backgrounds): - npcs/: 13 (Gronk, Kai, Ana, trader, blacksmith, healer, hunter, farmer, etc.) - zivali/: 12 (Susi, husky, cow, pig, sheep, horse, wolf, bear, phoenix, unicorn) - bosses/: 8 (T-Rex, Kraken, Dragon, Zombie King, Golem, Spider Queen, etc.) - mutanti/: 5 (zombies, slimes) - items/: 7 (axe, sword, wands, potions, ana_bracelet, gronk_vape) - environment/: 5 (tree, campfire, chest, rock, bush) Scripts added: - generate_v7_final.py: Google Imagen API generator - generate_comfyui_transparent.py: ComfyUI with auto transparency - generate_local_final.py: ComfyUI + rembg background removal - generate_background.py: Asset registry and queue manager Style: 2D Indie Cartoon Vector with clean lines, full body, tight crop All backgrounds removed with rembg for transparent PNG output
201 lines
9.5 KiB
Python
201 lines
9.5 KiB
Python
#!/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()
|