SESSION COMPLETE - Deep Analysis and Organization Done
This commit is contained in:
126
scripts/organize_assets_simple.py
Normal file
126
scripts/organize_assets_simple.py
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/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!")
|
||||
Reference in New Issue
Block a user