#!/usr/bin/env python3 """ SUPER SIMPLE ASSET ORGANIZER Organizira vse slike v pravilne mape - BREZ podmap! """ import os import shutil from pathlib import Path BASE = Path("/Users/davidkotnik/repos/novafarma/assets/slike") # Asset classification rules (by filename patterns) CLASSIFICATION = { "kai": ["kai_", "kai"], "ana": ["ana_", "ana"], "gronk": ["gronk", "grok_", "grok"], "npcs": ["npc_", "trader", "blacksmith", "healer", "farmer", "elder", "cook"], "liki": ["character_", "survivor"], "sovrazniki": ["zombie", "skeleton", "ghost", "mummy", "mutant", "boss", "enemy", "monster"], "zgradbe": ["building_", "house_", "barn_", "tower_", "wall_", "fence_", "gate_"], "rastline": ["plant_", "bush_", "flower_", "grass_", "crop_", "wheat_", "corn_", "tomato_", "carrot_"], "drevesa": ["tree_", "oak", "pine", "dead_tree"], "semena": ["seed_", "seeds_"], "orozje": ["weapon_"], "hladno": ["sword", "axe", "mec_", "sekira_", "melee_"], "strelno": ["bow", "arrow", "gun", "lok_", "pistol", "rifle"], "orodja": ["tool_", "hoe", "pickaxe", "watering", "shovel", "motika"], "hrana": ["food_", "bread_", "meat_", "fish_", "cheese_", "apple_"], "predmeti": ["item_", "potion_", "coin_", "gem_", "key_"], "ui": ["ui_", "button_", "icon_", "cursor_", "menu_", "bar_", "heart_", "star_"], "voda": ["water_", "ocean_", "river_", "lake_"], "efekti": ["effect_", "smoke_", "fire_", "magic_", "explosion_", "sparkle_"], "dim": ["smoke_"], "cutscene": ["cutscene_"], "cutscenes": ["scene_"], # Catch-all "ostalo": [], # Everything else goes here } print("🎯 ORGANIZING ASSETS...") print("=" * 70) # Get all PNG files all_pngs = list(BASE.rglob("*.png")) print(f"📊 Found {len(all_pngs)} PNG files") # Stats moved = 0 skipped = 0 errors = 0 for png_file in all_pngs: # Skip if already in correct top-level folder parent_name = png_file.parent.name if parent_name in CLASSIFICATION.keys(): # Check if filename matches parent filename_lower = png_file.name.lower() patterns = CLASSIFICATION.get(parent_name, []) # If parent is "ostalo", skip (catch-all) if parent_name == "ostalo": skipped += 1 continue # Check if file matches this category matches = any(pattern in filename_lower for pattern in patterns) if matches or not patterns: # If no patterns (UI, etc) or matches skipped += 1 continue # Classify file filename_lower = png_file.name.lower() target_folder = "ostalo" # Default for folder, patterns in CLASSIFICATION.items(): if folder == "ostalo": continue for pattern in patterns: if pattern in filename_lower: target_folder = folder break if target_folder != "ostalo": break # Create target folder if needed target_path = BASE / target_folder target_path.mkdir(exist_ok=True) # Move file dest = target_path / png_file.name # Handle duplicates if dest.exists(): counter = 1 stem = dest.stem suffix = dest.suffix while dest.exists(): dest = target_path / f"{stem}_{counter}{suffix}" counter += 1 try: shutil.move(str(png_file), str(dest)) moved += 1 print(f"✅ Moved: {png_file.name} → {target_folder}/") except Exception as e: errors += 1 print(f"❌ Error moving {png_file.name}: {e}") print("\n" + "=" * 70) print(f"✅ DONE!") print(f"📦 Moved: {moved} files") print(f"⏭️ Skipped: {skipped} files (already in correct location)") print(f"❌ Errors: {errors} files") print("\nVse slike so zdaj organizirane v pravilne mape!")