Files
novafarma/organize_biomes.py

99 lines
3.7 KiB
Python

import os
import shutil
import re
ROOT = "assets/slike"
TARGET_ROOT = os.path.join(ROOT, "biomi")
# BIOME RULES (Keyword -> Folder Name)
BIOMES = {
"Dzungle": [r"jungle", r"tropical", r"rainforest", r"dzungla", r"džungla"],
"Mocvirje": [r"swamp", r"marsh", r"bog", r"barje", r"močvirje", r"mocvirje"],
"Puscava": [r"desert", r"sand_dunes", r"cactus", r"puščava", r"puscava"],
"Ledeno": [r"tundra", r"ice", r"snow", r"winter", r"sneg", r"led", r"arctic"],
"Vulkan": [r"volcano", r"lava", r"magma", r"ash", r"vulkan"],
"Mesto": [r"city", r"town", r"urban", r"street", r"concrete", r"asphalt", r"mesto", r"ljubljana", r"ruined_city"],
"Gozd": [r"forest", r"woods", r"dark_forest", r"gozd", r"pine"],
"Radioaktivno": [r"wasteland", r"radioactive", r"toxic", r"mutant_zone", r"nuklearno"],
"Jama": [r"cave", r"cavern", r"underground", r"jama", r"mine"],
"Obala": [r"coast", r"beach", r"sea", r"ocean", r"obala"],
"Farma_Travniki": [r"grassland", r"farm", r"meadow", r"field", r"travnik", r"kmetija"]
}
# SUB-CATEGORY RULES (Reuse logic)
CATEGORIES = [
(r"(zombie|undead|miner|spitter|boss|animation|animacija|walk|run|idle|attack)", "Zombiji"),
(r"(rabbit|sheep|animal|pig|cow|mutant|zival)", "Zivali"),
(r"(kai|ana|gronk|npc|player)", "Liki"),
(r"(tool|weapon|item|crop|seed|food|resource)", "Predmeti"),
(r"(tree|grass|ground|water|house|wall|prop|tile|terrain|teren)", "Teren"),
(r".*", "Nerazvrsceno")
]
def organize_biomes():
print(f"🚀 ORGANIZING BIOMES in {ROOT}...")
if not os.path.exists(TARGET_ROOT):
os.makedirs(TARGET_ROOT)
moved_count = 0
# Walk everything in assets/slike (Except 'biomi' itself to avoid loop)
# We want to pull from 'teren', 'liki', 'glavna_referenca', etc.
for root, dirs, files in os.walk(ROOT):
# Skip if already in Biomi
if os.path.abspath(root).startswith(os.path.abspath(TARGET_ROOT)):
continue
for file in files:
if not file.lower().endswith(('.png', '.jpg', '.jpeg')):
continue
fname_lower = file.lower()
detected_biome = None
# Detect Biome
for biome, keywords in BIOMES.items():
if any(re.search(k, fname_lower) for k in keywords):
detected_biome = biome
break
if detected_biome:
# Detect Category subfolder
target_sub = "Nerazvrsceno"
for pattern, folder in CATEGORIES:
if re.search(pattern, fname_lower):
target_sub = folder
break
# Move
# Path: assets/slike/biomi/BIOME_NAME/Category/Filename
dest_dir = os.path.join(TARGET_ROOT, detected_biome, target_sub)
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
src_path = os.path.join(root, file)
dest_path = os.path.join(dest_dir, file)
try:
shutil.move(src_path, dest_path)
moved_count += 1
except Exception as e:
print(f"Error {file}: {e}")
print("="*40)
print(f"✅ BIOME ORGANIZATION COMPLETE. Moved {moved_count} files.")
print("="*40)
# Stats
for b in os.listdir(TARGET_ROOT):
bp = os.path.join(TARGET_ROOT, b)
if os.path.isdir(bp):
c = sum([len(files) for r, d, files in os.walk(bp)])
print(f" 🌍 {b}: {c} files")
if __name__ == "__main__":
organize_biomes()