Files
novafarma/scripts/utils/simple_rename.py
2026-01-25 12:20:50 +01:00

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!")