Files
novafarma/mass_rename_all_images.py
David Kotnik 0c9475829c 🎨 MASS RENAME: 13,360 slik preimenovanih v slovenščino
MAJOR UPDATE: Sistematično preimenovanje vseh slik v projektu

STATISTIKA:
- Skupaj slik: 18,154
- Preimenovanih: 13,360 (73.5%)
- Preskočenih: 1,917
- Napak: 0

SPREMEMBE:
- Angleška imena → Slovenska imena
- Odstranjeni timestamp številke
- Ohranjena vsa ozadja in barve
- Logična kratka imena

PRIMERI:
- apple_tree_mature_spring → jablana_drevo_zrelo_pomlad
- zombie_statistician_idle → zombi_statistik_mirovanje
- health_icon → zdravje_ikona

NOVI SKRIPI:
- generate_image_inventory.py
- smart_mass_rename.py
- execute_rename.py

DOKUMENTACIJA:
- SESSION_DNEVNIK_22_23_JAN_2026_MASS_RENAME.md
- MRTVA_DOLINA_PREZENTACIJA.md (bonus)
- image_inventory.json (18k slik)

Trajanje: 13.5 ur - Status: SUCCESS
2026-01-23 05:38:41 +01:00

206 lines
12 KiB
Python

#!/usr/bin/env python3
"""
MASS RENAME: Vse slike v projektu dobijo logična slovenska imena
POMEMBNO: NE spreminja ozadij ali barv - samo imena!
"""
import os
from pathlib import Path
# Koren projekta
PROJECT_ROOT = Path("/Users/davidkotnik/repos/novafarma")
# Kompletna mapa preimenovanj (stara pot → novo ime)
# Pot je relativna od PROJECT_ROOT
RENAME_MAP = {
# _TRASH_SAMPLES
"_TRASH_SAMPLES/sample_1.png": "graf_ai_voice_ocena.png",
"_TRASH_SAMPLES/sample_2.jpg": "gepard_odrasel_portret.jpg",
"_TRASH_SAMPLES/sample_3.jpg": "gepard_mladic_portret.jpg",
"_TRASH_SAMPLES/sample_4.png": "ikona_shrani_disketa.png",
"_TRASH_SAMPLES/sample_5.png": "ikona_shrani_disketa_blur.png",
# NOVE_SLIKE/UI
"NOVE_SLIKE/UI/amnezija_maska.png": "ui_amnezija_vinjeta_cyberpunk.png",
"NOVE_SLIKE/UI/amnezia.png": "ui_amnezija_vinjeta_radial.png",
"NOVE_SLIKE/UI/merilec_zdravja.png": "ui_merilec_zdravja_zarjavel.png",
"NOVE_SLIKE/UI/okvir_zarjavel.png": "ui_okvir_zarjavel_bodeca_zica.png",
"NOVE_SLIKE/UI/zlati_okvir.png": "ui_okvir_zlati_okrasni.png",
"NOVE_SLIKE/UI/srce_health.png": "ui_srce_pixel_art_rdece.png",
"NOVE_SLIKE/UI/gumb_glavni.png": "ui_gumb_play_lesen_zlat.png",
"NOVE_SLIKE/UI/gumb_recikliran.png": "ui_gumb_start_zarjavel_rjav.png",
# INTRO_STORY_IMAGES/01_Sreca
"INTRO_STORY_IMAGES/01_Sreca:/download.jpg": "druzina_chibi_sprane_barve.jpg",
"INTRO_STORY_IMAGES/01_Sreca:/ana_barbershop_dreads_dreamy.png": "ana_frizerstvo_ogledalo_sanjavo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_birthday_cake_rd.png": "rojstnodnevna_torta_vrt_sonce.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_ana_barbershop_dreads.png": "ana_frizerstvo_ogledalo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_images_intro_sequence_kai_first_dreads_family_dreamy.png": "druzina_chibi_prva_dreadi_sanjavo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_kai_first_dreads_family.png": "druzina_chibi_prva_dreadi.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_otac_longboard_pier.png": "oce_kai_longboard_pomol.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_images_intro_sequence_otac_longboard_pier_dreamy.png": "oce_kai_longboard_pomol_sanjavo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_kai_ana_twins_childhood.png": "kai_ana_dvojcka_otrostvo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_images_intro_sequence_birthday_cake_rd_dreamy.png": "rojstnodnevna_torta_sanjavo.png",
"INTRO_STORY_IMAGES/01_Sreca:/assets_BACKUP_20260112_064319_references_intro_shots_family_portrait_punk_complete.png": "druzina_portret_punk_celoten.png",
# INTRO_STORY_IMAGES/02_Kaos
"INTRO_STORY_IMAGES/02_Kaos:/05_Chernobyl_assets_BACKUP_20260112_064319_references_intro_shots_virus_city_aerial.png": "virus_mesto_iz_zraka.png",
"INTRO_STORY_IMAGES/02_Kaos:/05_Chernobyl_assets_BACKUP_20260112_064319_references_intro_shots_chaos_streets_apocalypse.png": "kaos_ulice_apokalipsa.png",
"INTRO_STORY_IMAGES/02_Kaos:/assets_images_intro_sequence_zombie_silhouettes_panic_dreamy.png": "zombie_siluete_panika_sanjavo.png",
"INTRO_STORY_IMAGES/02_Kaos:/assets_BACKUP_20260112_064319_references_intro_shots_zombie_silhouettes_panic.png": "zombie_siluete_panika.png",
"INTRO_STORY_IMAGES/02_Kaos:/assets_BACKUP_20260112_064319_references_intro_shots_virus_xnoir_microscope.png": "virus_xnoir_mikroskop_zeleni.png",
# INTRO_STORY_IMAGES/03_Locitev
"INTRO_STORY_IMAGES/03_Locitev:/assets_BACKUP_20260112_064319_references_intro_shots_parents_transparent_ghosts.png": "starsa_duha_chibi_apokalipsa.png",
"INTRO_STORY_IMAGES/03_Locitev:/assets_BACKUP_20260112_064319_references_intro_shots_gronk_doorway_silhouette.png": "gronk_silueta_vrata_magenta.png",
"INTRO_STORY_IMAGES/03_Locitev:/MOJE_SLIKE_KONCNA_ostalo_parents_transparent_ghosts_dreamy.png": "starsa_duha_sanjavo.png",
"INTRO_STORY_IMAGES/03_Locitev:/assets_BACKUP_20260112_064319_references_intro_shots_ana_taken_military.png": "ana_ugrabljena_vojska.png",
# INTRO_STORY_IMAGES/04_Amnesia
"INTRO_STORY_IMAGES/04_Amnesia:/assets_BACKUP_20260112_064319_references_intro_shots_kai_alone_basement.png": "kai_sam_klet_prezivetje.png",
"INTRO_STORY_IMAGES/04_Amnesia:/assets_BACKUP_20260112_064319_references_intro_shots_kai_bedroom_wakeup.png": "kai_spalnica_zbujanje.png",
"INTRO_STORY_IMAGES/04_Amnesia:/10_Volcanic_Zone_assets_BACKUP_20260112_064319_references_intro_shots_ana_memory_flash_purple.png": "ana_spomin_blisk_vijoličast.png",
# assets/characters
"assets/characters/gronk_pro_sheet.png": "gronk_cevlji_rozni_sprite_sheet.png",
"assets/characters/gronk_full_sheet.png": "gronk_full_sprite_sheet.png",
"assets/characters/gronk_sheet.png": "gronk_sprite_sheet.png",
"assets/characters/zombie_statistician/portrait.png": "zombie_statistik_portret.png",
"assets/characters/zombie_statistician/idle_north.png": "zombie_statistik_idle_sever.png",
"assets/characters/zombie_statistician/idle_south.png": "zombie_statistik_idle_jug.png",
"assets/characters/zombie_statistician/idle_east.png": "zombie_statistik_idle_vzhod.png",
"assets/characters/zombie_statistician/idle_west.png": "zombie_statistik_idle_zahod.png",
"assets/characters/zombie_statistician/walk_north.png": "zombie_statistik_hodi_sever.png",
"assets/characters/zombie_statistician/walk_south.png": "zombie_statistik_hodi_jug.png",
"assets/characters/zombie_statistician/walk_east.png": "zombie_statistik_hodi_vzhod.png",
"assets/characters/zombie_statistician/walk_west.png": "zombie_statistik_hodi_zahod.png",
"assets/characters/zombie_statistician/action_calculate.png": "zombie_statistik_akcija_racuna.png",
"assets/characters/zombie_statistician/action_update.png": "zombie_statistik_akcija_posodobi.png",
"assets/characters/electrician/portrait.png": "elektricar_portret.png",
"assets/characters/electrician/idle_north.png": "elektricar_idle_sever.png",
"assets/characters/electrician/idle_south.png": "elektricar_idle_jug.png",
"assets/characters/electrician/idle_east.png": "elektricar_idle_vzhod.png",
"assets/characters/electrician/idle_west.png": "elektricar_idle_zahod.png",
"assets/characters/electrician/walk_north.png": "elektricar_hodi_sever.png",
"assets/characters/electrician/walk_south.png": "elektricar_hodi_jug.png",
"assets/characters/electrician/walk_east.png": "elektricar_hodi_vzhod.png",
"assets/characters/electrician/walk_west.png": "elektricar_hodi_zahod.png",
"assets/characters/electrician/action_repair.png": "elektricar_akcija_popravlja.png",
# assets/slike/dekoracije
"assets/slike/dekoracije/tall_grass.png": "trava_visoka_sop.png",
# assets/slike/intro
"assets/slike/intro/kai_dreads.png": "kai_dreadi_druzina_chibi.png",
"assets/slike/intro/virus_micro.png": "virus_xnoir_mikroskop.png",
"assets/slike/intro/gronk_sil.png": "gronk_silueta_vrata_rec.png",
"assets/slike/intro/parents_ghosts.png": "starsa_duha_chibi.png",
"assets/slike/intro/story_separation.png": "zgodba_locitev.png",
"assets/slike/intro/story_2_twins.png": "zgodba_dvojcka.png",
"assets/slike/intro/story_6_alone.png": "zgodba_sam.png",
"assets/slike/intro/story_wakeup.png": "zgodba_zbujanje.png",
"assets/slike/intro/city_chaos.png": "mesto_kaos.png",
"assets/slike/intro/story_1_family.png": "zgodba_druzina.png",
"assets/slike/intro/story_4_dreads.png": "zgodba_dreadi.png",
"assets/slike/intro/story_3_longboard.png": "zgodba_longboard.png",
"assets/slike/intro/story_5_panic.png": "zgodba_panika.png",
# assets/slike/nova mapa faza 0-1/Characters
"assets/slike/nova mapa faza 0-1/Characters/kaj/Izdelek brez naslova (2).png": "kai_portret_zeleni_dreadi.png",
"assets/slike/nova mapa faza 0-1/Characters/ana/ana_blisk_magenta.png": "ana_blisk_magenta.png",
"assets/slike/nova mapa faza 0-1/Characters/ana/ana_idle_frame3.png": "ana_idle_animacija_3.png",
"assets/slike/nova mapa faza 0-1/Characters/gronk/gronk_vape_stoječ.png": "gronk_vape_stoji.png",
"assets/slike/nova mapa faza 0-1/Characters/starsa/Ghost/duh_oče_cian.png": "duh_oce_cian.png",
"assets/slike/nova mapa faza 0-1/Characters/starsa/Ghost/duha_starsi_skupaj.png": "duha_starsi_skupaj.png",
# assets/slike/nova mapa faza 0-1/Environment/narava
"assets/slike/nova mapa faza 0-1/Environment/narava/blato_luzice.png": "blato_luzice.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/grm_bodice.png": "grm_z_bodicami.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/kamnita_piramida.png": "kamnita_piramida_siva.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/korenine_zeleno_ozadje.png": "korenine_dreves_temne.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/mrtvo_drevo_nazobcano.png": "mrtvo_drevo_nazobcano_temno.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/mrtvo_drevo_veje.png": "mrtvo_drevo_razvejano.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/mrtvo_drevo_zvito.png": "mrtvo_drevo_zvito.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/skala_trikotna.png": "skala_trikotna.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/skale_formacija.png": "skal_formacija.png",
"assets/slike/nova mapa faza 0-1/Environment/narava/trava_sopi_6x.png": "trava_visoka_sopi_6x.png",
# assets/slike/nova mapa faza 0-1/Environment/props
"assets/slike/nova mapa faza 0-1/Environment/props/MOJE_SLIKE_KONCNA_ostalo_campfire_frame1.png": "taborisc_ogenj_animacija_1.png",
"assets/slike/nova mapa faza 0-1/Environment/props/MOJE_SLIKE_KONCNA_ostalo_campfire_frame2.png": "taborisc_ogenj_animacija_2.png",
"assets/slike/nova mapa faza 0-1/Environment/props/MOJE_SLIKE_KONCNA_predmeti_oprema_orodja_tool_bucket_old.png": "vedro_staro_zarjavelo.png",
"assets/slike/nova mapa faza 0-1/Environment/props/debelopoles_razrez.png": "les_debelopoles_razrez.png",
}
def main():
"""Izvede mass rename"""
renamed = []
errors = []
skipped = []
print("=" * 80)
print(" MASS RENAME: VSE SLIKE V PROJEKTU")
print("=" * 80)
print(f"Skupaj preimenovanj: {len(RENAME_MAP)}")
print()
for old_rel_path, new_name in RENAME_MAP.items():
old_path = PROJECT_ROOT / old_rel_path
# Preveri če datoteka obstaja
if not old_path.exists():
errors.append(f"❌ NE NAJDEM: {old_rel_path}")
continue
# Nova pot v isti mapi
new_path = old_path.parent / new_name
# Preveri če nova datoteka že obstaja
if new_path.exists() and new_path != old_path:
skipped.append(f"⚠️ ŽE OBSTAJA: {new_name} (preskočeno)")
continue
# Preimenuj
try:
old_path.rename(new_path)
renamed.append((old_path.name, new_name))
print(f"{old_path.name}")
print(f"{new_name}")
print()
except Exception as e:
errors.append(f"❌ NAPAKA: {old_rel_path}{e}")
# Poročilo
print("=" * 80)
print(" KONČNO POROČILO")
print("=" * 80)
print(f"✅ PREIMENOVANIH: {len(renamed)}")
print(f"⚠️ PRESKOČENIH: {len(skipped)}")
print(f"❌ NAPAK: {len(errors)}")
print("=" * 80)
if errors:
print("\n❌ NAPAKE:")
for error in errors:
print(f" {error}")
if skipped:
print("\n⚠️ PRESKOČENO:")
for skip in skipped:
print(f" {skip}")
print(f"\n✅ USPEŠNO PREIMENOVANIH: {len(renamed)} / {len(RENAME_MAP)}")
# Shrani log
log_file = PROJECT_ROOT / "rename_log.txt"
with open(log_file, 'w', encoding='utf-8') as f:
f.write("MASS RENAME LOG\n")
f.write("=" * 80 + "\n\n")
for old_name, new_name in renamed:
f.write(f"{old_name}{new_name}\n")
print(f"\n📄 Log shranjen: rename_log.txt")
if __name__ == "__main__":
main()