MAJOR CLEANUP: Glavna referenčna mapa organizirana in preimenovana STATISTIKA: - Seansa 1: 1,732 slik (root mapa) - Seansa 2: 487 slik (podmape) - Skupaj: ~2,219 preimenovanj SPREMEMBE: - Angleška preprosta imena (brez podčrtajev) - Odstranjena dolga generirana imena - Format: category1.png, category2.png - Brez timestamps, brez prefixov PRIMER: - PREJ: src_assets_library_godot_references_references_enemies_zombies_variants_strong_animations_napad_zombi_strong_attack1.png - POTEM: zombie1.png - PREJ: libraryphases102.png - POTEM: library102.png NOVO DODANI SKRIPI: - complete_mass_rename.py (kompletni rename vključno podmape) - simple_rename.py (inteligentni rename sistem) - glavna_referenca_cleanup.py (analiza duplikatov) - DUPLICATE_REPORT.json (4 duplikati najdeni) ANALIZA: - Duplikati: 4 skupine (3.5 MB prostora) - Dolžina imen: iz 53.3 → ~10 znakov - Organizacija: Po kategorijah VSE SLIKE SEDAJ IMAJO KRATKA PREPROSTA IMENA! Trajanje: ~30 min Status: SUCCESS
201 lines
6.0 KiB
Python
201 lines
6.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
SIMPLE RENAME - Vse slike dobijo preprosta angleška imena
|
|
BREZ podčrtajev, samo kaj vidiš!
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
from collections import Counter
|
|
|
|
REFERENCA_DIR = Path("/Users/davidkotnik/repos/novafarma/assets/slike/glavna_referenca")
|
|
|
|
# Pattern matching za prepoznavanje vsebine
|
|
PATTERNS = {
|
|
# NPCji
|
|
'scientist': ['scientist'],
|
|
'herbalist': ['herbalist'],
|
|
'shepherd': ['shepherd'],
|
|
'tracker': ['tracker'],
|
|
'dancer': ['dancer'],
|
|
'botanist': ['botanist'],
|
|
'merchant': ['merchant'],
|
|
'priest': ['priest'],
|
|
'farmer': ['farmer'],
|
|
'guard': ['guard'],
|
|
'fisherman': ['fisherman'],
|
|
'hunter': ['hunter'],
|
|
'miner': ['miner'],
|
|
'baker': ['baker', 'pek'],
|
|
'blacksmith': ['blacksmith', 'kovac'],
|
|
'electrician': ['electrician', 'elektricar', 'tehnik'],
|
|
'mayor': ['mayor', 'zupan'],
|
|
'teacher': ['teacher'],
|
|
|
|
# Glavni liki
|
|
'kai': ['kai'],
|
|
'ana': ['ana'],
|
|
'gronk': ['gronk'],
|
|
|
|
# Rastline/Crops
|
|
'wheat': ['wheat', 'pšenica'],
|
|
'corn': ['corn', 'koruza'],
|
|
'potato': ['potato', 'krompir'],
|
|
'carrot': ['carrot', 'korenje'],
|
|
'tomato': ['tomato', 'paradiznik'],
|
|
'cannabis': ['cannabis', 'konoplja', 'ganja'],
|
|
'onion': ['onion', 'cebula'],
|
|
'pepper': ['pepper', 'paprika'],
|
|
'strawberry': ['strawberry', 'jagoda'],
|
|
'mushroom': ['mushroom', 'goba'],
|
|
|
|
# Drevesa
|
|
'apple': ['apple', 'jablana'],
|
|
'cherry': ['cherry', 'visnja'],
|
|
'orange': ['orange', 'pomaranča'],
|
|
'pear': ['pear', 'hruška'],
|
|
'peach': ['peach', 'breskev'],
|
|
'plum': ['plum', 'sliva'],
|
|
'oak': ['oak'],
|
|
'pine': ['pine'],
|
|
|
|
# Stavbe
|
|
'house': ['house', 'hisa'],
|
|
'barn': ['barn', 'hlev'],
|
|
'church': ['church', 'cerkev'],
|
|
'school': ['school', 'sola'],
|
|
'shop': ['shop', 'store'],
|
|
'tavern': ['tavern', 'inn'],
|
|
'hospital': ['hospital'],
|
|
|
|
# Objekti
|
|
'fence': ['fence', 'ograja'],
|
|
'gate': ['gate', 'vrata'],
|
|
'bench': ['bench', 'klop'],
|
|
'chest': ['chest', 'skrinja'],
|
|
'barrel': ['barrel', 'sod'],
|
|
'campfire': ['campfire', 'tabor'],
|
|
'tent': ['tent', 'šotor'],
|
|
|
|
# Orodja
|
|
'axe': ['axe', 'sekira'],
|
|
'hoe': ['hoe', 'motika'],
|
|
'pickaxe': ['pickaxe', 'kramp'],
|
|
'scythe': ['scythe', 'kosa'],
|
|
'shovel': ['shovel', 'lopata'],
|
|
'watering': ['watering'],
|
|
|
|
# Sovražniki
|
|
'zombie': ['zombie', 'zombi'],
|
|
'ghost': ['ghost', 'duh'],
|
|
'skeleton': ['skeleton', 'okostnjak'],
|
|
|
|
# UI
|
|
'button': ['button', 'gumb'],
|
|
'panel': ['panel'],
|
|
'icon': ['icon', 'ikona'],
|
|
'frame': ['frame', 'okvir'],
|
|
|
|
# Deli/Akcije
|
|
'walk': ['walk', 'hoja'],
|
|
'idle': ['idle', 'mirovanje'],
|
|
'action': ['action', 'akcija'],
|
|
'portrait': ['portrait', 'portret'],
|
|
'reference': ['reference', 'referenca'],
|
|
}
|
|
|
|
def smart_categorize(filename):
|
|
"""Pametno prepozna kaj je na sliki iz imena"""
|
|
filename_lower = filename.lower()
|
|
|
|
# Najprej poskusi najti direktno ujemanje
|
|
for simple_name, keywords in PATTERNS.items():
|
|
for keyword in keywords:
|
|
if keyword in filename_lower:
|
|
return simple_name
|
|
|
|
# Default - vzami prvo besedo iz imena
|
|
# Odstrani prefixe
|
|
clean = filename
|
|
clean = re.sub(r'^(moje_slike_koncna|src_assets|assets)_', '', clean, flags=re.IGNORECASE)
|
|
clean = re.sub(r'^(liki|okolje|predmeti|ostalo)_', '', clean, flags=re.IGNORECASE)
|
|
clean = re.sub(r'_?(library|godot|references|sprites)_?', '', clean, flags=re.IGNORECASE)
|
|
clean = re.sub(r'\d+_', '', clean) # Odstrani številke na začetku
|
|
|
|
# Vzami prvo smiselno besedo
|
|
words = re.split(r'[_\-\s]+', clean)
|
|
for word in words:
|
|
if len(word) > 3 and word.lower() not in ['moje', 'slike', 'koncna', 'assets', 'style']:
|
|
return word.lower()
|
|
|
|
return 'unknown'
|
|
|
|
def generate_rename_map():
|
|
"""Generira rename map za vse slike"""
|
|
print("🔄 GENERIRAM PREPROSTA IMENA...\n")
|
|
|
|
all_files = list(REFERENCA_DIR.glob('*.png')) + list(REFERENCA_DIR.glob('*.jpg'))
|
|
|
|
# Kategoriziraj
|
|
categorized = {}
|
|
for filepath in all_files:
|
|
category = smart_categorize(filepath.stem)
|
|
if category not in categorized:
|
|
categorized[category] = []
|
|
categorized[category].append(filepath)
|
|
|
|
# Generiraj nova imena
|
|
rename_map = {}
|
|
|
|
for category, files in sorted(categorized.items()):
|
|
if len(files) == 1:
|
|
# Samo ena slika te kategorije
|
|
new_name = f"{category}.png"
|
|
else:
|
|
# Več slik - dodaj številke
|
|
for i, filepath in enumerate(files, 1):
|
|
new_name = f"{category}{i}.png"
|
|
rename_map[filepath] = new_name
|
|
continue
|
|
|
|
rename_map[files[0]] = new_name
|
|
|
|
print(f"✅ Generiral {len(rename_map)} imen\n")
|
|
|
|
# Poročilo
|
|
print("📊 KATEGORIJE:")
|
|
for category in sorted(categorized.keys(), key=lambda x: len(categorized[x]), reverse=True)[:20]:
|
|
count = len(categorized[category])
|
|
if count > 1:
|
|
print(f" {category}: {count} slik → {category}1.png, {category}2.png, ...")
|
|
else:
|
|
print(f" {category}: 1 slika → {category}.png")
|
|
|
|
return rename_map
|
|
|
|
def preview_renames(rename_map, n=30):
|
|
"""Pokaži preview prvih N preimenovanj"""
|
|
print(f"\n📝 PREVIEW PRVIH {n} PREIMENOVANJ:")
|
|
print("=" * 100)
|
|
|
|
for i, (old_path, new_name) in enumerate(list(rename_map.items())[:n], 1):
|
|
old_name = old_path.name
|
|
print(f"{i:3d}. {old_name:60s} → {new_name}")
|
|
|
|
if len(rename_map) > n:
|
|
print(f"... in še {len(rename_map) - n} drugih")
|
|
|
|
if __name__ == "__main__":
|
|
print("=" * 100)
|
|
print(" SMART SIMPLE RENAME - Preprosta angleška imena")
|
|
print("=" * 100)
|
|
|
|
rename_map = generate_rename_map()
|
|
preview_renames(rename_map, 50)
|
|
|
|
print("\n" + "=" * 100)
|
|
print(f"✅ PRIPRAVLJENO: {len(rename_map)} preimenovanj")
|
|
print("=" * 100)
|
|
print("\n💡 NASLEDNJI KORAK:")
|
|
print(" Če je preview OK, izvršim rename!")
|