🌙 OVERNIGHT AUTOMATION READY

Progress: 254/14,000 assets (1.81%)

Dino Valley Status: 91/109 complete
-  Vegetation: 15/15
-  Dinosaurs: 12/12
-  Items: 12/12
-  Food: 16/16
-  Clothing: 8/8
-  Tools: 10/10
-  Props: 8/8
-  Buildings: 4/4
-  Terrain: 4/4
- 🔄 Special Creatures: 2/10 (quota hit)

New Files:
- scripts/auto_generate_overnight.py
- OVERNIGHT_AUTO_NAVODILA.md
- ASSET_STATUS_03_01_2026.md

Quota exhausted at 00:22
Reset at: 01:40 CET
Ready for overnight automation!
This commit is contained in:
2026-01-03 00:25:44 +01:00
parent c7c10d5a5c
commit b0c598d7f0
40 changed files with 700 additions and 15 deletions

373
ASSET_STATUS_03_01_2026.md Normal file
View File

@@ -0,0 +1,373 @@
# 🎨 ASSET PRODUCTION STATUS - 03.01.2026
**Datum:** 03. januar 2026, 00:08 CET
**Total Progress:** 218/~14,000 (1.56%)
---
## ✅ CATEGORY 0: FARM CROPS - COMPLETE (103/103)
### **Sadje (36/36)** ✅
- apple_red, apple_green, apple_yellow
- pear, plum, cherry, peach, apricot
- orange, lemon, lime, grapefruit
- banana, kiwi, mango, papaya, pineapple
- strawberry, raspberry, blueberry, blackberry, cranberry
- grape_red, grape_green
- watermelon, melon, cantaloupe
- pomegranate, fig, date
- passion_fruit, dragon_fruit, star_fruit
- coconut, avocado, olive
### **Zelenjava (25/25)** ✅
- carrot, potato, tomato, cucumber, lettuce
- cabbage, broccoli, cauliflower, brussels_sprouts
- onion, garlic, leek, shallot
- pepper_red, pepper_green, pepper_yellow
- eggplant, zucchini, pumpkin, squash
- corn, peas, beans, radish, beet
### **Ganja (12/12)** ✅
- sativa, indica, hybrid, ruderalis
- purple_kush, og_kush, white_widow, northern_lights
- amnesia_haze, super_lemon_haze, blue_dream, girl_scout_cookies
### **Drevesa (30/30)** ✅
- oak, pine, maple, birch, willow
- apple_tree, pear_tree, cherry_tree, plum_tree, peach_tree
- orange_tree, lemon_tree
- palm, cactus, bamboo
- rose, tulip, sunflower, lavender, daisy
- lily, orchid, carnation, daffodil, iris
- poppy, violet, marigold, petunia, zinnia
- lily_of_the_valley
---
## ✅ CATEGORY 1: FARM BUILDINGS & ANIMALS - COMPLETE (55/55)
### **Farm Buildings (20/20)** ✅
- farmhouse, barn, silo, greenhouse
- chicken_coop, pigpen, stable
- tool_shed, windmill, well
- fence_wood, fence_stone, gate
- compost, beehive, trough
- lamp_post, sign, mailbox, rain_barrel
### **Farm Animals (15/15)** ✅
- chicken, rooster, duck, turkey
- cow, pig, sheep, goat
- horse, donkey, llama
- rabbit, cat, dog, bee
### **Farm Tools (20/20)** ✅
- hoe, shovel, rake, watering_can
- axe, pickaxe, scythe, sickle
- pitchfork, wheelbarrow, bucket
- shears, pruners, trowel, gloves
- hammer, saw, pliers, wrench, screwdriver
---
## ✅ CATEGORY 2: ITEMS & EQUIPMENT - COMPLETE (105/105)
### **Weapons (30/30)** ✅
- sword_basic, greatsword, katana, rapier
- axe, battle_axe, club, mace, flail
- sledgehammer, baseball_bat, crowbar, frying_pan, golf_club
- spear, staff, whip
- dagger, throwing_knife
- bow, crossbow
- pistol, revolver, rifle, shotgun
- chainsaw, machete, nailbat, pipe
- grenade, molotov
### **Armor (20/20)** ✅
- helmet_leather, helmet_iron, helmet_steel, helmet_gold
- chestplate_leather, chestplate_iron, chestplate_steel, chestplate_gold
- leggings_leather, leggings_iron, leggings_steel, leggings_gold
- boots_leather, boots_iron, boots_steel, boots_gold
- shield_wood, shield_iron, shield_steel, shield_gold
### **Consumables (25/25)** ✅
- health_potion, mana_potion, stamina_potion
- water_bottle, milk, coffee, soda_can, energy_drink
- bread, cheese, egg, cooked_meat
- apple, berries, mushroom
- sandwich, burger, pizza_slice, soup
- cake_slice, candy, chocolate_bar, honey
### **Crafting Materials (30/30)** ✅
- wood_log, wood_plank, stone, iron_ore, iron_bar
- coal, cloth, leather, rope
- nails, screws, wire, circuit_board, battery
- duct_tape, glue, spring, gear, chain
- pipe, glass_shards, rubber, plastic
- bone, feather, gunpowder, sulfur, crystal
- herbs, scrap_metal
---
## 🔄 CATEGORY 3: DINO VALLEY BIOME - IN PROGRESS (58/109)
### **Vegetation (15/15)** ✅ STYLE 30
- fern_large, fern_small
- mushroom_red_giant, mushroom_brown
- cycad_palm, cycad_tree
- moss_green, moss_glow
- horsetail, ginkgo_leaves
- cattail_giant, grass_prehistoric
- tree_fern, dead_tree
- volcanic_rock_plant
### **Dinosaurs (12/12)** ✅ STYLE 33
- trex, raptor, triceratops
- stegosaurus, brontosaurus, ankylosaurus
- pterodactyl, spinosaurus, dilophosaurus
- pachycephalosaurus, parasaurolophus, compsognathus
### **Items (12/12)** ✅ STYLE 33
- bone_small, bone_large
- hide, scales, tooth, claw, feather
- amber, volcanic_rock, tar, fossil, egg
### **Food (16/16)** ✅ STYLE 33
*Raw (7):*
- raw_trex_meat, raw_raptor_meat, raw_trike_meat
- raw_stego_meat, raw_bronto_meat, raw_ptero_meat
- dino_eggs_raw
*Cooked (6):*
- cooked_trex_steak, cooked_raptor_fillet, cooked_trike_roast
- cooked_stego_ribs, cooked_bronto_meat, cooked_ptero_wings
*Crafted (3):*
- dino_jerky, bone_broth, giant_berries
### **Clothing/Armor (3/8)** 🔄 IN PROGRESS
✅ tribal_loincloth, tooth_necklace, feather_cape
❌ dino_hide_chest, dino_hide_legs, bone_helmet, scale_boots, leather_bracers
### **Tools & Weapons (0/10)** ❌ PENDING
- bone_axe, stone_spear, dino_tooth_knife
- flint_pickaxe, bone_club, stone_hammer
- primitive_bow, obsidian_blade, bone_shovel, javelin
### **Props (0/8)** ❌ PENDING
- skull_trex, skull_trike, ribcage
- nest_empty, nest_eggs, tar_pit
- volcanic_rocks, bones_scattered
### **Buildings (0/4)** ❌ PENDING
- cave_entrance, primitive_hut, bone_fence, stone_altar
### **Terrain (0/4)** ❌ PENDING
- dirt_volcanic, grass_prehistoric, rock_lava, mud
### **Special Creatures (0/10)** ❌ PENDING
- baby_trex (baby)
- alpha_trex, thunder_raptor (bosses)
- dino_nest_eggs (special)
- zombie_prehistoric, zombie_dino_raptor, zombie_bone, zombie_tar (zombies)
- npc_tribal_hunter, npc_shaman (NPCs)
---
## ❌ CATEGORY 4: BIOMES - NOT STARTED (0/~1,700)
### **Mythical Highlands (~95 assets)**
- Vegetation, Creatures, Items, Food, Clothing, Tools, Props, Buildings, Terrain
### **Atlantis Ruins (~75 assets)**
- Underwater vegetation, Sea creatures, Nautical items, Buildings
### **Egyptian Desert (~70 assets)**
- Desert vegetation, Egyptian creatures, Artifacts, Pyramids
### **Chernobyl Zone (~65 assets)**
- Mutated plants, Radiation creatures, Soviet items, Ruins
### **Mushroom Forest (~60 assets)**
- Giant mushrooms, Fungal creatures, Spores, Structures
### **Arctic Zone (~55 assets)**
- Snow plants, Arctic animals, Ice structures, Igloos
### **Endless Forest (~85 assets)**
- Ancient trees, Forest creatures, Druidic items, Tree villages
### **+ 11 more biomes** (~1,200 assets)
- Volcanic Island, Haunted Swamp, Crystal Caves, etc.
---
## ❌ CATEGORY 5: ENEMIES & CREATURES (0/~500)
### **Zombies (0/50+)**
- Basic zombies, Runners, Tanks, Special variants
### **Wild Animals (0/50+)**
- Bears, wolves, boars, snakes, spiders
### **Magical Beings (0/50+)**
- Elementals, spirits, demons, angels
### **Bosses (0/20+)**
- Biome bosses, World bosses, Secret bosses
### **Biome-specific Creatures (0/330+)**
- Unique creatures per biome
---
## ❌ CATEGORY 6: NPCS & CHARACTERS (0/~150)
### **Main Characters (0/4)**
- Kai, Ana, Gronk, Susi (full sprite sets)
### **Merchants (0/30)**
- Blacksmith, Shopkeeper, Trader, etc.
### **Services (0/30)**
- Doctor, Mechanic, Farmer, Builder, etc.
### **Mentors (0/30)**
- Combat trainer, Magic teacher, Craftsman, etc.
### **Romance Options (0/20)**
- Various NPCs with relationship mechanics
### **Quest Givers (0/20)**
- Story NPCs, side quest givers
### **Background NPCs (0/16)**
- Townspeople, travelers, guards
---
## ❌ CATEGORY 7: BUILDINGS & STRUCTURES (0/~500)
### **Town Buildings (0/100)**
- Shops, houses, town hall, etc.
### **Special Buildings (0/100)**
- Churches, hospitals, schools, factories
### **Biome Structures (0/300)**
- Ruins, temples, caves, dungeons per biome
---
## ❌ CATEGORY 8: UI & EFFECTS (0/~300)
### **UI Icons (0/150)**
- Inventory slots, status icons, skill icons
### **Particles (0/100)**
- Dust, sparkles, smoke, fire, water splashes
### **VFX (0/50)**
- Magic effects, explosions, impacts, auras
---
## ❌ CATEGORY 9: ANIMATIONS & SPRITESHEETS (0/~8,000)
### **Character Animations (0/~2,000)**
- Walk cycles (4-8 frames × 150 characters)
- Run cycles
- Attack animations
- Idle animations
### **Enemy Animations (0/~2,000)**
- Movement
- Attacks
- Death animations
### **Effect Animations (0/~4,000)**
- Spell effects
- Environmental effects
- Combat effects
---
## ❌ CATEGORY 10: VARIATIONS & UPGRADES (0/~2,000)
### **Tool Upgrades (0/60)**
- Copper, Iron, Gold, Diamond versions of tools
### **Building Levels (0/100)**
- Level 1, 2, 3 variants
### **Seasonal Variants (0/400)**
- Spring, Summer, Fall, Winter versions of crops
### **Item Variations (0/1,440)**
- Color variants, damage states, enchanted versions
---
## 📊 OVERALL SUMMARY:
| Category | Done | Remaining | Total | % |
|----------|------|-----------|-------|---|
| **Farm Crops** | 103 | 0 | 103 | 100% |
| **Farm Buildings** | 55 | 0 | 55 | 100% |
| **Items & Equipment** | 105 | 0 | 105 | 100% |
| **Dino Valley** | 58 | 51 | 109 | 53% |
| **Other Biomes** | 0 | ~1,700 | ~1,700 | 0% |
| **Enemies** | 0 | ~500 | ~500 | 0% |
| **NPCs** | 0 | ~150 | ~150 | 0% |
| **Buildings** | 0 | ~500 | ~500 | 0% |
| **UI & Effects** | 0 | ~300 | ~300 | 0% |
| **Animations** | 0 | ~8,000 | ~8,000 | 0% |
| **Variations** | 0 | ~2,000 | ~2,000 | 0% |
| **TOTAL** | **218** | **~13,201** | **~13,419** | **1.62%** |
---
## 🎯 IMMEDIATE NEXT STEPS:
### **Tonight/Tomorrow:**
1. Finish Dino Valley (51 assets)
2. Start high-priority biomes (Mythical Highlands, Atlantis)
3. Generate core NPCs (Kai, Ana, Gronk, Susi)
### **This Week:**
4. Complete 3-5 major biomes
5. Generate all enemies & bosses
6. Create essential NPCs
### **This Month:**
7. All biomes complete
8. All characters & NPCs
9. All items & equipment variations
10. Start animations
---
## 💰 BUDGET ALLOCATION:
**Available:** €1,117.62
**Priority Spending:**
1. **Core Gameplay (€400)** - 1,000 slik
- Finish Dino Valley
- Main characters (Kai, Ana, Gronk, Susi)
- Core enemies (zombies, animals)
2. **Essential Biomes (€600)** - 1,500 slik
- 5 major biomes complete
- All vegetation, creatures, items
3. **Reserve (€117)** - 300 slik
- UI elements
- Emergency fixes
- Polish items
**Total:** 2,800 slik = **PLAYABLE GAME**
---
**Last Updated:** 03.01.2026, 00:08 CET
**Next Update:** When Dino Valley complete

View File

@@ -0,0 +1,71 @@
# 🌙 OVERNIGHT AUTOMATION - NAVODILA
## 🚀 KAJ BO SCRIPT POČEL:
1. **Počaka na quota reset** (01:40 CET)
2. **Avtomatsko generira** preostale Dino Valley assets (8 slik)
3. **Shrani vse** v pravilne folderje
4. **Git commit** na vsakih 5 slik (checkpointing)
5. **Logira** vse v `auto_generation_log.txt`
---
## 📋 KAKO ZAGNATI:
### **NAČIN 1: Foreground (vidiš output)**
```bash
cd /Users/davidkotnik/repos/novafarma
python3 scripts/auto_generate_overnight.py
```
**Pusti terminal odprt!** Ne zapri, drugače se script ustavi.
---
### **NAČIN 2: Background (lahko zapneš terminal)**
```bash
cd /Users/davidkotnik/repos/novafarma
nohup python3 scripts/auto_generate_overnight.py > overnight.log 2>&1 &
```
**To lahko zapneš terminal**, script bo tekel v ozadju!
Za preverjanje statusa:
```bash
# Poglej log
tail -f /Users/davidkotnik/repos/novafarma/auto_generation_log.txt
# Ali
tail -f /Users/davidkotnik/repos/novafarma/overnight.log
```
---
## ⏰ TIMELINE:
**00:24** - Začetek (sedaj)
**01:40** - Quota reset → script začne generirat
**01:50** - 8 slik done → Dino Valley COMPLETE ✅
**01:55** - Git commit, done!
---
## 📊 ŠE DOBIMO:
- **8 slik** (Dino Valley dokončano)
- **€3.20** strošek (8 × €0.40)
- **Kredit po tem:** ~€1,011
---
## ✅ READY TO RUN!
**Izberi:**
1. **Foreground** - Vidiš output, moraš terminal pustit odprt
2. **Background** - Lahko greš spat, zjutraj vse done
**Tvoja izbira?** 😴🚀

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

View File

@@ -0,0 +1,252 @@
#!/usr/bin/env python3
"""
OVERNIGHT AUTOMATION SCRIPT - Dino Valley & Beyond
Waits for quota reset, then automatically generates remaining assets
"""
import os
import time
import json
import requests
from datetime import datetime, timedelta
from pathlib import Path
import base64
# ========================================
# CONFIGURATION
# ========================================
PROJECT_ROOT = Path("/Users/davidkotnik/repos/novafarma")
ASSET_ROOT = PROJECT_ROOT / "assets/slike"
LOG_FILE = PROJECT_ROOT / "auto_generation_log.txt"
# Vertex AI Configuration
PROJECT_ID = "gen-lang-client-0428644398"
LOCATION = "us-central1"
MODEL = "imagen-3.0-generate-001"
# Quota reset time (from error message)
QUOTA_RESET_TIME = datetime.fromisoformat("2026-01-03T01:40:39+01:00")
# Generation limits
MAX_IMAGES_PER_HOUR = 60 # Conservative (actual is 60/min)
BATCH_SIZE = 10 # Generate in batches for checkpointing
DELAY_BETWEEN_IMAGES = 1.2 # Seconds (safe rate limiting)
# Style definitions
STYLE_33_ENTITIES = """exact same art style as reference. Very thick black outlines (4-5px), flat colors NO gradients, pastel colors with dark gothic accents, NO pupils (white eyes), cute-dark aesthetic, clean vector cartoon"""
STYLE_30_VEGETATION = """exact Garden Story cozy art style. Soft rounded shapes, gentle pastel colors, NO thick outlines (thin 1-2px), watercolor-like soft shading, cute botanical illustration, clean cozy plant art"""
# ========================================
# REMAINING DINO VALLEY ASSETS (18)
# ========================================
DINO_VALLEY_REMAINING = {
"creatures": [
{
"name": "boss_thunder_raptor",
"prompt": "Thunder Raptor boss in {STYLE}. Pastel purple/blue raptor with lightning patterns, large empty white eyes NO pupils, dark gothic electric accents. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "dino_nest_eggs_special",
"prompt": "Special glowing dinosaur nest in {STYLE}. Pastel brown nest with magical glowing eggs, dark gothic mystical aura. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "zombie_prehistoric",
"prompt": "Prehistoric zombie caveman in {STYLE}. Pastel green/gray decayed caveman, torn tribal clothes, large empty white eyes NO pupils, dark gothic rot. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "zombie_dino_raptor",
"prompt": "Zombie raptor dinosaur in {STYLE}. Pastel gray/green undead raptor with exposed bones, large empty white eyes NO pupils, dark gothic decay. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "zombie_bone",
"prompt": "Skeleton zombie in {STYLE}. White/cream animated skeleton warrior, large empty eye sockets, dark gothic cracks. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "zombie_tar",
"prompt": "Tar zombie in {STYLE}. Black sticky tar monster humanoid, glowing pastel orange eyes, dark gothic dripping texture. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "npc_tribal_hunter",
"prompt": "Tribal hunter NPC in {STYLE}. Pastel brown skinned caveman with bone spear, tribal tattoos, large empty white eyes NO pupils, dark gothic war paint, friendly stance. 3/4 angle. Chroma green background (#00FF00)."
},
{
"name": "npc_shaman",
"prompt": "Tribal shaman NPC in {STYLE}. Elderly caveman with bone staff and feather headdress, pastel skin, large empty white eyes NO pupils, dark gothic mystical symbols, wise pose. 3/4 angle. Chroma green background (#00FF00)."
},
]
}
# ========================================
# UTILITY FUNCTIONS
# ========================================
def log(message):
"""Log message to file and console"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_msg = f"[{timestamp}] {message}"
print(log_msg)
with open(LOG_FILE, 'a') as f:
f.write(log_msg + "\n")
def wait_for_quota_reset():
"""Wait until quota resets"""
now = datetime.now()
wait_seconds = (QUOTA_RESET_TIME - now).total_seconds()
if wait_seconds > 0:
log(f"⏰ Waiting for quota reset at {QUOTA_RESET_TIME.strftime('%H:%M')}")
log(f" Sleeping for {int(wait_seconds/60)} minutes...")
time.sleep(wait_seconds + 10) # Add 10 sec buffer
log("✅ Quota should be reset now!")
else:
log("✅ Quota already reset!")
def get_access_token():
"""Get Google Cloud access token"""
import subprocess
result = subprocess.run(
['gcloud', 'auth', 'print-access-token'],
capture_output=True,
text=True
)
return result.stdout.strip()
def generate_image_vertex(prompt, output_path):
"""Generate image using Vertex AI Imagen 3.0"""
access_token = get_access_token()
url = f"https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL}:predict"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
payload = {
"instances": [
{
"prompt": prompt
}
],
"parameters": {
"sampleCount": 1,
"aspectRatio": "1:1",
"safetyFilterLevel": "block_few",
"personGeneration": "allow_all"
}
}
try:
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
# Extract and save image
if "predictions" in result and len(result["predictions"]) > 0:
image_data = result["predictions"][0]["bytesBase64Encoded"]
image_bytes = base64.b64decode(image_data)
# Save to file
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, 'wb') as f:
f.write(image_bytes)
log(f" ✅ Saved: {output_path.name}")
return True
else:
log(f" ❌ No image in response")
return False
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
log(f" ⚠️ Quota exhausted again, waiting 5 minutes...")
time.sleep(300)
return False
else:
log(f" ❌ HTTP Error: {e}")
return False
except Exception as e:
log(f" ❌ Error: {str(e)}")
return False
def git_commit_checkpoint(message):
"""Create git commit checkpoint"""
import subprocess
try:
subprocess.run(['git', 'add', '-A'], cwd=PROJECT_ROOT, check=True)
subprocess.run(['git', 'commit', '-m', message], cwd=PROJECT_ROOT, check=True)
log(f" 📦 Git commit: {message}")
except Exception as e:
log(f" ⚠️ Git commit failed: {e}")
# ========================================
# MAIN GENERATION LOGIC
# ========================================
def generate_dino_valley_remaining():
"""Generate remaining Dino Valley assets"""
log("🦖 Starting Dino Valley completion...")
total = len(DINO_VALLEY_REMAINING["creatures"])
completed = 0
for asset in DINO_VALLEY_REMAINING["creatures"]:
name = asset["name"]
prompt_template = asset["prompt"]
# Use Style 33 for entities
prompt = prompt_template.replace("{STYLE}", STYLE_33_ENTITIES)
output_path = ASSET_ROOT / "biomes/dino_valley/creatures" / f"{name}.png"
# Skip if already exists
if output_path.exists():
log(f"⏭️ Skipping {name} (already exists)")
completed += 1
continue
log(f"🖼️ Generating {name} ({completed+1}/{total})")
success = generate_image_vertex(prompt, output_path)
if success:
completed += 1
# Checkpoint every 5 images
if completed % 5 == 0:
git_commit_checkpoint(f"🦖 Dino Valley auto: {completed}/{total} creatures")
# Rate limiting
time.sleep(DELAY_BETWEEN_IMAGES)
log(f"✅ Dino Valley complete! {completed}/{total} assets generated")
git_commit_checkpoint(f"🎉 DINO VALLEY COMPLETE - All {completed} creatures done!")
return completed
# ========================================
# MAIN EXECUTION
# ========================================
if __name__ == "__main__":
log("="*60)
log("🚀 OVERNIGHT AUTOMATION STARTED")
log("="*60)
# Wait for quota reset
wait_for_quota_reset()
# Generate remaining Dino Valley
dino_count = generate_dino_valley_remaining()
log("="*60)
log(f"✅ AUTOMATION COMPLETE!")
log(f"📊 Total generated: {dino_count} assets")
log(f"💰 Estimated cost: €{dino_count * 0.40:.2f}")
log("="*60)

View File

@@ -25,21 +25,10 @@ BIOME_ROOT = PROJECT_ROOT / "assets/slike/biomi"
API_KEY = os.getenv("GEMINI_API_KEY") # Set this in environment
API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image:generateImage"
# Art styles - STRICT ENFORCEMENT (02.01.2026)
STYLE_32_ENTITIES = """exact Dark-Chibi Noir style with:
- Very thick black outlines (4-5px bold marker lines)
- Chibi proportions (head 40-50% of total body, large features)
- Flat colors ONLY, NO gradients, NO soft shading
- Sharp block shadows (black/dark purple on one side for noir effect)
- Large empty eyes (white or red, NO pupils, cult-like)
- Pastel-gothic color palette (soft colors + dark accents)"""
# Art styles - PROVEN FORMULA (Style 33 + Style 30)
STYLE_33_ENTITIES = """exact same art style as reference. Very thick black outlines (4-5px), flat colors NO gradients, pastel colors with dark gothic accents, NO pupils (white eyes), cute-dark aesthetic, clean vector cartoon"""
STYLE_30_VEGETATION = """exact Garden Story cozy botanical style with:
- Thin gentle outlines (1-2px)
- Soft watercolor-like shading (subtle gradients allowed)
- Rounded organic shapes, wholesome aesthetic
- Pastel-vibrant botanical colors
- Friendly, inviting, nature-focused look"""
STYLE_30_VEGETATION = """exact Garden Story cozy art style. Soft rounded shapes, gentle pastel colors, NO thick outlines (thin 1-2px), watercolor-like soft shading, cute botanical illustration, clean cozy plant art"""
# ========================================
# BIOME DEFINITIONS
@@ -122,7 +111,7 @@ def generate_asset_prompt(asset_name, asset_type, is_vegetation=False):
if asset_type == "vegetacija" or is_vegetation:
style_text = STYLE_30_VEGETATION
else:
style_text = STYLE_32_ENTITIES
style_text = STYLE_33_ENTITIES
# Format asset name to readable
readable_name = asset_name.replace("_", " ").title()