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