Spaces:
Runtime error
Runtime error
| import os | |
| import shutil | |
| import random | |
| import gradio as gr | |
| from modules.utils.file_utils import _get_all_image_paths | |
| def apply_renaming_from_configlist(progress=gr.Progress(), folder_paths_str="", configlist_file="", renaming_type="Rastgele"): | |
| """Liste dosyasından rastgele isim seçip dosyaları adlandırır.""" | |
| folder_paths = [p.strip() for p in folder_paths_str.split('\n') if p.strip()] | |
| if not folder_paths: return "⚠️ Klasör yolu girin.", gr.update(value="⚠️ İptal.", visible=True) | |
| if not configlist_file or not os.path.exists(configlist_file): return "❌ Liste dosyası seçilmedi.", gr.update(value="❌ Hata.", visible=True) | |
| try: | |
| with open(configlist_file, 'r', encoding='utf-8') as f: name_list = [line.strip() for line in f if line.strip()] | |
| except Exception as e: return f"❌ Dosya okuma hatası: {e}", gr.update(value="❌ Hata.", visible=True) | |
| if not name_list: return "⚠️ Liste boş.", gr.update(value="⚠️ İptal.", visible=True) | |
| output_messages = ["ℹ️ Liste bazlı adlandırma başladı."] | |
| renamed_count = 0 | |
| all_image_paths = _get_all_image_paths(folder_paths) | |
| total = len(all_image_paths) | |
| if total == 0: return "⚠️ Resim bulunamadı.", gr.update(value="⚠️ Resim Yok.", visible=True) | |
| # İsim listesini karıştır (Rastgele mod ise) | |
| if renaming_type == "Rastgele": random.shuffle(name_list) | |
| # Yeterli isim var mı? | |
| if len(name_list) < total: output_messages.append("⚠️ Uyarı: İsim listesi dosya sayısından az, bazıları tekrar edebilir veya işlenmeyebilir.") | |
| for i, file_path in enumerate(all_image_paths): | |
| if i >= len(name_list): break # İsim bitti | |
| filename = os.path.basename(file_path) | |
| progress((i / total), desc=f"Adlandırılıyor: {filename}") | |
| ext = os.path.splitext(filename)[1] | |
| new_base = name_list[i].replace(' ', '_').replace(',', '_') | |
| new_name = f"{new_base}{ext}" | |
| new_path = os.path.join(os.path.dirname(file_path), new_name) | |
| if file_path != new_path: | |
| try: | |
| shutil.move(file_path, new_path) | |
| renamed_count += 1 | |
| except Exception as e: output_messages.append(f"❌ Hata ({filename}): {e}") | |
| return "\n".join(output_messages), gr.update(value=f"✅ {renamed_count} dosya adlandırıldı.", visible=True) | |
| def apply_custom_renaming(progress=gr.Progress(), folder_paths_str: str="", pattern: str="", start_number: int=1, digit_count: int=3): | |
| """ | |
| Dosyaları şablon + numara mantığıyla adlandırır. | |
| Pattern içinde {Number} olmalıdır. Örn: "Adoptable {Number}" | |
| """ | |
| folder_paths = [p.strip() for p in folder_paths_str.split('\n') if p.strip()] | |
| if not folder_paths: return "⚠️ Klasör yolu girin.", gr.update(value="⚠️ İptal.", visible=True) | |
| if not pattern or "{Number}" not in pattern: return "❌ Şablon '{Number}' içermelidir!", gr.update(value="❌ Hatalı Şablon.", visible=True) | |
| renamed_count = 0 | |
| curr_num = int(start_number) | |
| output_messages = [f"ℹ️ Şablonlu adlandırma: '{pattern}', Başlangıç: {curr_num}"] | |
| # Her klasör için ayrı işlem (Sıralamayı korumak için) | |
| for folder in folder_paths: | |
| if not os.path.isdir(folder): continue | |
| images = [f for f in os.listdir(folder) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.webp'))] | |
| images.sort() # İsme göre sırala | |
| if not images: continue | |
| for i, img_name in enumerate(images): | |
| progress(0, desc=f"Adlandırılıyor: {img_name}") # Basit progress | |
| ext = os.path.splitext(img_name)[1] | |
| num_str = str(curr_num).zfill(int(digit_count)) | |
| new_base = pattern.replace("{Number}", num_str).strip() | |
| new_name = f"{new_base}{ext}" | |
| old_path = os.path.join(folder, img_name) | |
| new_path = os.path.join(folder, new_name) | |
| if old_path != new_path: | |
| try: | |
| if os.path.exists(new_path) and old_path.lower() != new_path.lower(): | |
| output_messages.append(f"⚠️ Çakışma: '{new_name}' zaten var. Atlandı.") | |
| else: | |
| shutil.move(old_path, new_path) | |
| renamed_count += 1 | |
| except Exception as e: output_messages.append(f"❌ Hata ({img_name}): {e}") | |
| curr_num += 1 | |
| return "\n".join(output_messages), gr.update(value=f"✅ {renamed_count} dosya adlandırıldı. Son No: {curr_num-1}", visible=True) | |