Files
novafarma/complete_mass_rename.py
David Kotnik 3cd262b5d3 🎨 GLAVNA REFERENCA CLEANUP: Preimenovanje v preprosta imena
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
2026-01-23 06:26:18 +01:00

104 lines
3.1 KiB
Python

#!/usr/bin/env python3
"""
COMPLETE MASS RENAME - VSE slike (root + podmape)
Preprosta angleška imena, brez podčrtajev
"""
import re
from pathlib import Path
from collections import defaultdict
REFERENCA_DIR = Path("/Users/davidkotnik/repos/novafarma/assets/slike/glavna_referenca")
def simplify_name(filepath):
"""Naredi preprosto ime iz dolgega imena"""
name = filepath.stem.lower()
# Odstrani prefixe
name = re.sub(r'^(src_|assets_|moje_slike_koncna_|library|sprites|references|phases)', '', name)
name = re.sub(r'(godot|library|references|sprites|phases|source|backup)', '', name)
name = re.sub(r'_+', ' ', name) # Replace _ with space
name = re.sub(r'\d{10,}', '', name) # Remove timestamps
name = re.sub(r'\s+', ' ', name) # Multiple spaces to one
# Vzami prvo smiselno besedo
words = name.strip().split()
if words:
# Izberi prvo pomembno besedo
for word in words:
if len(word) > 3 and word not in ['moje', 'slike', 'koncna', 'ostalo', 'style']:
return word
return words[0] if words else 'file'
return 'file'
def execute_complete_rename():
"""Izvede rename na VSEH slikah (root + podmape)"""
print("🔄 ZAČENJAM KOMPLETNI MASS RENAME...\n")
# Najdi VSE slike (rekurzivno)
all_images = []
for ext in ['*.png', '*.jpg', '*.jpeg']:
all_images.extend(REFERENCA_DIR.rglob(ext))
print(f"Najdenih: {len(all_images)} slik\n")
# Organiziraj po folder + kategorija
rename_map = {}
folder_counts = defaultdict(lambda: defaultdict(int))
for filepath in all_images:
folder = filepath.parent
category = simplify_name(filepath)
# Increment counter
folder_counts[folder][category] += 1
count = folder_counts[folder][category]
# Generate new name
if count == 1:
new_name = f"{category}{filepath.suffix}"
else:
new_name = f"{category}{count}{filepath.suffix}"
new_path = folder / new_name
rename_map[filepath] = new_path
# Execute rename
renamed = 0
errors = []
for old_path, new_path in rename_map.items():
if old_path == new_path:
continue # Already has good name
if new_path.exists():
errors.append(f"Already exists: {new_path.name}")
continue
try:
old_path.rename(new_path)
renamed += 1
if renamed % 100 == 0:
print(f"{renamed} preimenovanih...")
except Exception as e:
errors.append(f"Error: {old_path.name}{e}")
# Report
print("\n" + "=" * 80)
print(" KONČNO POROČILO")
print("=" * 80)
print(f"✅ Uspešno preimenovanih: {renamed}")
print(f"⚠️ Že OK / preskočenih: {len(all_images) - renamed - len(errors)}")
print(f"❌ Napak: {len(errors)}")
print("=" * 80)
if errors and len(errors) <= 20:
print("\n⚠️ NAPAKE:")
for err in errors[:20]:
print(f" {err}")
if __name__ == "__main__":
execute_complete_rename()