ok
This commit is contained in:
98
scripts/organize_biomes.py
Normal file
98
scripts/organize_biomes.py
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import re
|
||||
|
||||
ROOT = "assets/slike"
|
||||
TARGET_ROOT = os.path.join(ROOT, "biomi")
|
||||
|
||||
# BIOME RULES (Keyword -> Folder Name)
|
||||
BIOMES = {
|
||||
"Dzungle": [r"jungle", r"tropical", r"rainforest", r"dzungla", r"džungla"],
|
||||
"Mocvirje": [r"swamp", r"marsh", r"bog", r"barje", r"močvirje", r"mocvirje"],
|
||||
"Puscava": [r"desert", r"sand_dunes", r"cactus", r"puščava", r"puscava"],
|
||||
"Ledeno": [r"tundra", r"ice", r"snow", r"winter", r"sneg", r"led", r"arctic"],
|
||||
"Vulkan": [r"volcano", r"lava", r"magma", r"ash", r"vulkan"],
|
||||
"Mesto": [r"city", r"town", r"urban", r"street", r"concrete", r"asphalt", r"mesto", r"ljubljana", r"ruined_city"],
|
||||
"Gozd": [r"forest", r"woods", r"dark_forest", r"gozd", r"pine"],
|
||||
"Radioaktivno": [r"wasteland", r"radioactive", r"toxic", r"mutant_zone", r"nuklearno"],
|
||||
"Jama": [r"cave", r"cavern", r"underground", r"jama", r"mine"],
|
||||
"Obala": [r"coast", r"beach", r"sea", r"ocean", r"obala"],
|
||||
"Farma_Travniki": [r"grassland", r"farm", r"meadow", r"field", r"travnik", r"kmetija"]
|
||||
}
|
||||
|
||||
# SUB-CATEGORY RULES (Reuse logic)
|
||||
CATEGORIES = [
|
||||
(r"(zombie|undead|miner|spitter|boss|animation|animacija|walk|run|idle|attack)", "Zombiji"),
|
||||
(r"(rabbit|sheep|animal|pig|cow|mutant|zival)", "Zivali"),
|
||||
(r"(kai|ana|gronk|npc|player)", "Liki"),
|
||||
(r"(tool|weapon|item|crop|seed|food|resource)", "Predmeti"),
|
||||
(r"(tree|grass|ground|water|house|wall|prop|tile|terrain|teren)", "Teren"),
|
||||
(r".*", "Nerazvrsceno")
|
||||
]
|
||||
|
||||
def organize_biomes():
|
||||
print(f"🚀 ORGANIZING BIOMES in {ROOT}...")
|
||||
|
||||
if not os.path.exists(TARGET_ROOT):
|
||||
os.makedirs(TARGET_ROOT)
|
||||
|
||||
moved_count = 0
|
||||
|
||||
# Walk everything in assets/slike (Except 'biomi' itself to avoid loop)
|
||||
# We want to pull from 'teren', 'liki', 'glavna_referenca', etc.
|
||||
|
||||
for root, dirs, files in os.walk(ROOT):
|
||||
# Skip if already in Biomi
|
||||
if os.path.abspath(root).startswith(os.path.abspath(TARGET_ROOT)):
|
||||
continue
|
||||
|
||||
for file in files:
|
||||
if not file.lower().endswith(('.png', '.jpg', '.jpeg')):
|
||||
continue
|
||||
|
||||
fname_lower = file.lower()
|
||||
detected_biome = None
|
||||
|
||||
# Detect Biome
|
||||
for biome, keywords in BIOMES.items():
|
||||
if any(re.search(k, fname_lower) for k in keywords):
|
||||
detected_biome = biome
|
||||
break
|
||||
|
||||
if detected_biome:
|
||||
# Detect Category subfolder
|
||||
target_sub = "Nerazvrsceno"
|
||||
for pattern, folder in CATEGORIES:
|
||||
if re.search(pattern, fname_lower):
|
||||
target_sub = folder
|
||||
break
|
||||
|
||||
# Move
|
||||
# Path: assets/slike/biomi/BIOME_NAME/Category/Filename
|
||||
dest_dir = os.path.join(TARGET_ROOT, detected_biome, target_sub)
|
||||
if not os.path.exists(dest_dir):
|
||||
os.makedirs(dest_dir)
|
||||
|
||||
src_path = os.path.join(root, file)
|
||||
dest_path = os.path.join(dest_dir, file)
|
||||
|
||||
try:
|
||||
shutil.move(src_path, dest_path)
|
||||
moved_count += 1
|
||||
except Exception as e:
|
||||
print(f"Error {file}: {e}")
|
||||
|
||||
print("="*40)
|
||||
print(f"✅ BIOME ORGANIZATION COMPLETE. Moved {moved_count} files.")
|
||||
print("="*40)
|
||||
|
||||
# Stats
|
||||
for b in os.listdir(TARGET_ROOT):
|
||||
bp = os.path.join(TARGET_ROOT, b)
|
||||
if os.path.isdir(bp):
|
||||
c = sum([len(files) for r, d, files in os.walk(bp)])
|
||||
print(f" 🌍 {b}: {c} files")
|
||||
|
||||
if __name__ == "__main__":
|
||||
organize_biomes()
|
||||
Reference in New Issue
Block a user