Spaces:
Runtime error
Runtime error
| # modules/config_manager.py | |
| import os | |
| import json | |
| import gradio as gr | |
| # --- Yapılandırma ve Dosya Yolları --- | |
| CONFIG_FILE = "data/configs/config.json" | |
| TEMPLATES_FILE = "data/configs/renaming_templates.json" # Yeni Şablon Dosyası | |
| # --- ŞABLON YÖNETİMİ FONKSİYONLARI (YENİ) --- | |
| def load_renaming_templates(): | |
| default_templates = ["Adoptable {Number} (Female)", "{Number}", "Character_{Number}", "Design #{Number}"] | |
| if os.path.exists(TEMPLATES_FILE): | |
| try: | |
| with open(TEMPLATES_FILE, "r", encoding="utf-8") as f: | |
| loaded = json.load(f) | |
| if isinstance(loaded, list) and loaded: return loaded | |
| except: pass | |
| return default_templates | |
| def save_renaming_templates_to_file(templates): | |
| try: | |
| os.makedirs(os.path.dirname(TEMPLATES_FILE), exist_ok=True) | |
| with open(TEMPLATES_FILE, "w", encoding="utf-8") as f: | |
| json.dump(templates, f, indent=4, ensure_ascii=False) | |
| except Exception as e: print(f"Şablon kaydetme hatası: {e}") | |
| def add_renaming_template(new_template, current_list): | |
| if not new_template: return gr.update(), current_list | |
| if "{Number}" not in new_template: | |
| return gr.update(value="❌ Şablon '{Number}' içermelidir!"), current_list | |
| if new_template not in current_list: | |
| current_list.append(new_template) | |
| save_renaming_templates_to_file(current_list) | |
| # Dropdown'ı güncelle ve yeni ekleneni seçili yap | |
| return gr.update(choices=current_list, value=new_template), current_list | |
| return gr.update(value=new_template), current_list | |
| def delete_renaming_template(selected_template, current_list): | |
| if selected_template in current_list: | |
| current_list.remove(selected_template) | |
| save_renaming_templates_to_file(current_list) | |
| new_val = current_list[0] if current_list else "" | |
| return gr.update(choices=current_list, value=new_val), current_list | |
| return gr.update(), current_list | |
| # --- Yapılandırma Yönetimi Fonksiyonları --- | |
| def save_config(config_data): | |
| """ | |
| Klasör yollarını ve tüm uygulama ayarlarını bir JSON dosyasına kaydeder. | |
| """ | |
| try: | |
| os.makedirs(os.path.dirname(CONFIG_FILE), exist_ok=True) | |
| with open(CONFIG_FILE, "w", encoding="utf-8") as f: | |
| json.dump(config_data, f, indent=4) | |
| except IOError as e: | |
| print(f"Yapılandırma dosyası yazma hatası: {e}") | |
| def load_config(): | |
| """ | |
| Tüm uygulama ayarlarını bir JSON dosyasından yükler veya varsayılan değerleri döndürür. | |
| """ | |
| default_config = { | |
| "folder_paths": [], | |
| "general_settings": { | |
| "device": "Auto", | |
| "language": "tr", | |
| "theme": "Default" | |
| }, | |
| "global_tagger_settings": { | |
| "use_joint": True, | |
| "joint_thresh": 0.25, | |
| "use_cl_tagger": True, | |
| "cl_gen_thresh": 0.55, | |
| "cl_char_thresh": 0.60, | |
| "use_pixai_tagger": False, | |
| "pixai_general_thresh": 0.30, | |
| "pixai_char_thresh": 0.85, | |
| "use_animetagger": False, | |
| "animetagger_model": "MobileNet V4 (Hızlı)", | |
| "animetagger_thresh": 0.35, | |
| # Gemini Ayarları | |
| "use_gemini": False, | |
| "gemini_api_key": "", | |
| "gemini_mode": "Vision", | |
| "gemini_model": "gemini-2.5-flash", | |
| "gemini_prompt_vision": "Describe this image in a detailed, natural language caption for an AI image generator dataset. Focus on the main subject, clothing, pose, and background. Do not use bullet points.", | |
| "gemini_prompt_tags": "Create a fluent, natural language caption based on the provided tags. Focus on describing the scene vividly.", | |
| "gemini_prompt_hybrid": "Describe this image using the visual details and refine the description with the provided tags for accuracy. Focus on a cohesive narrative.", | |
| "gemini_system_instruction": "You are a helpful assistant that generates detailed and accurate image captions for AI image generation datasets.", | |
| # Kural Dosyaları | |
| "replacement_file": "", | |
| "synonym_file": "", | |
| "addition_file": "", | |
| "sort_order": "Alfabetik", | |
| "context_weight": 0.0, | |
| # Ayrı kategorizasyon ayarları | |
| "tekil_enable_categorization": False, | |
| "tekil_selected_categories": [], | |
| "toplu_enable_categorization": False, | |
| "toplu_selected_categories": [], | |
| "dual1_enable_categorization": False, | |
| "dual1_selected_categories": [], | |
| "dual2_enable_categorization": False, | |
| "dual2_selected_categories": [] | |
| }, | |
| "image_tools_settings": { | |
| "folder_paths": [], | |
| "scale_factor": 1.0, | |
| "selected_renaming_file": "", | |
| "renaming_type": "Rastgele", | |
| "watermark_text": "Örnek Filigran", | |
| "watermark_opacity": 0.35, | |
| "watermark_font_ratio": 0.05, | |
| "watermark_angle": -45, | |
| "renaming_templates": [], | |
| "brightness_level": 0, | |
| "contrast_level": 0, | |
| "denoise_level": 0, | |
| "sharpen_amount": 0.0, | |
| "sequential_pattern": "Adoptable #Number", | |
| "sequential_start_number": 1, | |
| "sequential_digit_count": 4 | |
| }, | |
| "art_tools_settings": { | |
| "grid_cols": 3, | |
| "grid_bg_color": "#000000", | |
| "grid_title_text": "ADOPTABLE SALE!", | |
| "grid_banner_color": "#000000", | |
| "grid_title_color": "#FFD700", | |
| "grid_add_labels": True, | |
| "grid_label_type": "Numara (#1, #2...)", | |
| "grid_start_num": 1 | |
| } | |
| } | |
| try: | |
| if os.path.exists(CONFIG_FILE): | |
| with open(CONFIG_FILE, "r", encoding="utf-8") as f: | |
| loaded_config = json.load(f) | |
| def update_dict(d, u): | |
| for k, v in u.items(): | |
| if isinstance(v, dict): | |
| # Eğer u[k] dict değilse (eski config uyumsuzluğu), d[k]'yı koru veya override et? | |
| # Basitçe d[k] var ve dict ise recursive, değilse direk al. | |
| d[k] = update_dict(d.get(k, {}), v) | |
| else: | |
| d[k] = v | |
| return d | |
| return update_dict(default_config.copy(), loaded_config) | |
| except (IOError, json.JSONDecodeError) as e: | |
| print(f"Yapılandırma dosyası okuma hatası veya dosya yok: {e}. Varsayılanlar yükleniyor.") | |
| return default_config | |
| # --- Ayarları Kaydetme Fonksiyonları --- | |
| def save_global_tagger_settings( | |
| device, language, theme, | |
| use_joint, joint_thresh, | |
| use_cl_tagger, cl_gen_thresh, cl_char_thresh, | |
| use_pixai_tagger, pixai_general_thresh, pixai_char_thresh, | |
| use_animetagger, animetagger_model, animetagger_thresh, | |
| # Gemini Parametreleri | |
| use_gemini, gemini_api_key, gemini_mode, gemini_model, | |
| gemini_prompt_vision, gemini_prompt_tags, gemini_prompt_hybrid, | |
| gemini_system_instruction, | |
| # Kural Dosyaları | |
| replacement_file, synonym_file, addition_file, | |
| sort_order, | |
| context_weight, | |
| # Kategorizasyon | |
| tekil_enable, tekil_cats, | |
| toplu_enable, toplu_cats, | |
| dual1_enable, dual1_cats, | |
| dual2_enable, dual2_cats | |
| ): | |
| config_data = load_config() | |
| config_data["general_settings"] = {"device": device, "language": language, "theme": theme} | |
| config_data["global_tagger_settings"] = { | |
| "use_joint": use_joint, "joint_thresh": joint_thresh, | |
| "use_cl_tagger": use_cl_tagger, "cl_gen_thresh": cl_gen_thresh, "cl_char_thresh": cl_char_thresh, | |
| "use_pixai_tagger": use_pixai_tagger, "pixai_general_thresh": pixai_general_thresh, "pixai_char_thresh": pixai_char_thresh, | |
| "use_animetagger": use_animetagger, "animetagger_model": animetagger_model, "animetagger_thresh": animetagger_thresh, | |
| # Gemini | |
| "use_gemini": use_gemini, "gemini_api_key": gemini_api_key, "gemini_mode": gemini_mode, | |
| "gemini_model": gemini_model, | |
| "gemini_prompt_vision": gemini_prompt_vision, | |
| "gemini_prompt_tags": gemini_prompt_tags, | |
| "gemini_prompt_hybrid": gemini_prompt_hybrid, | |
| "gemini_system_instruction": gemini_system_instruction, | |
| # Dosyalar | |
| "replacement_file": replacement_file, "synonym_file": synonym_file, "addition_file": addition_file, | |
| "sort_order": sort_order, | |
| "context_weight": context_weight, | |
| "tekil_enable_categorization": tekil_enable, "tekil_selected_categories": tekil_cats, | |
| "toplu_enable_categorization": toplu_enable, "toplu_selected_categories": toplu_cats, | |
| "dual1_enable_categorization": dual1_enable, "dual1_selected_categories": dual1_cats, | |
| "dual2_enable_categorization": dual2_enable, "dual2_selected_categories": dual2_cats | |
| } | |
| save_config(config_data) | |
| return gr.update(value="✅ Tüm genel ve özelleştirilmiş kategorizasyon ayarları kaydedildi.", visible=True) | |
| def save_image_tools_settings(folder_paths_str, scale_factor, watermark_text, watermark_opacity, watermark_font_ratio, watermark_angle, brightness_level, contrast_level, denoise_level, sharpen_amount): | |
| config_data = load_config() | |
| config_data["image_tools_settings"]["folder_paths"] = [path.strip() for path in folder_paths_str.split('\n') if path.strip()] | |
| config_data["image_tools_settings"]["scale_factor"] = scale_factor | |
| config_data["image_tools_settings"]["watermark_text"] = watermark_text | |
| config_data["image_tools_settings"]["watermark_opacity"] = watermark_opacity | |
| config_data["image_tools_settings"]["watermark_font_ratio"] = watermark_font_ratio | |
| config_data["image_tools_settings"]["watermark_angle"] = watermark_angle | |
| config_data["image_tools_settings"]["brightness_level"] = brightness_level | |
| config_data["image_tools_settings"]["contrast_level"] = contrast_level | |
| config_data["image_tools_settings"]["denoise_level"] = denoise_level | |
| config_data["image_tools_settings"]["sharpen_amount"] = sharpen_amount | |
| save_config(config_data) | |
| return gr.update(value="✅ Resim araçları ayarları kaydedildi.", visible=True) | |
| def save_art_tools_settings(grid_cols, grid_bg_color, grid_title_text, grid_banner_color, grid_title_color, grid_add_labels, grid_label_type, grid_start_num): | |
| config_data = load_config() | |
| # Eğer art_tools_settings keyi yoksa oluştur (eski configler için) | |
| if "art_tools_settings" not in config_data: | |
| config_data["art_tools_settings"] = {} | |
| config_data["art_tools_settings"]["grid_cols"] = grid_cols | |
| config_data["art_tools_settings"]["grid_bg_color"] = grid_bg_color | |
| config_data["art_tools_settings"]["grid_title_text"] = grid_title_text | |
| config_data["art_tools_settings"]["grid_banner_color"] = grid_banner_color | |
| config_data["art_tools_settings"]["grid_title_color"] = grid_title_color | |
| config_data["art_tools_settings"]["grid_add_labels"] = grid_add_labels | |
| config_data["art_tools_settings"]["grid_label_type"] = grid_label_type | |
| config_data["art_tools_settings"]["grid_start_num"] = grid_start_num | |
| save_config(config_data) | |
| return gr.update(value="✅ Art Studio ayarları kaydedildi.", visible=True) | |