| import gradio as gr |
| import torch |
| import os |
| from diffusers import AutoPipelineForText2Image |
| from huggingface_hub import snapshot_download |
|
|
| class ModelHandler: |
| def __init__(self): |
| self.pipeline = None |
| |
| def load_model(self, progress=gr.Progress()): |
| if self.pipeline is not None: |
| return "Model zaten yüklü." |
| |
| progress(0, desc="Base model indiriliyor...") |
| |
| base_model_path = snapshot_download( |
| repo_id="black-forest-labs/FLUX.1-dev", |
| local_dir="./models/base_model", |
| ignore_patterns=["*.bin", "*.onnx"] if os.path.exists("./models/base_model") else None |
| ) |
| |
| progress(0.5, desc="LoRA modeli indiriliyor...") |
| |
| lora_model_path = snapshot_download( |
| repo_id="codermert/ezelll_flux", |
| local_dir="./models/lora_model", |
| ignore_patterns=["*.bin", "*.onnx"] if os.path.exists("./models/lora_model") else None |
| ) |
| |
| progress(0.7, desc="Pipeline oluşturuluyor...") |
| |
| device = "cuda" if torch.cuda.is_available() else "cpu" |
| dtype = torch.float16 if device == "cuda" else torch.float32 |
| |
| self.pipeline = AutoPipelineForText2Image.from_pretrained( |
| base_model_path, |
| torch_dtype=dtype |
| ).to(device) |
| |
| progress(0.9, desc="LoRA yükleniyor...") |
| |
| lora_path = os.path.join(lora_model_path, "lora.safetensors") |
| if os.path.exists(lora_path): |
| self.pipeline.load_lora_weights(lora_path) |
| else: |
| return "LoRA dosyası bulunamadı!" |
| |
| progress(1.0, desc="Tamamlandı!") |
| return "Model başarıyla yüklendi! Artık görüntü oluşturmaya hazırsınız." |
| |
| def generate_image(self, prompt, use_tok=True, progress=gr.Progress()): |
| if self.pipeline is None: |
| return None, "Lütfen önce modeli yükleyin!" |
| |
| |
| if use_tok and "TOK" not in prompt: |
| prompt = f"TOK {prompt}" |
| |
| try: |
| progress(0.2, desc="Görüntü oluşturuluyor...") |
| |
| image = self.pipeline(prompt).images[0] |
| progress(1.0, desc="Tamamlandı!") |
| return image, f"Oluşturulan prompt: {prompt}" |
| except Exception as e: |
| return None, f"Hata oluştu: {str(e)}" |
|
|
| |
| model_handler = ModelHandler() |
|
|
| |
| with gr.Blocks(title="Malika - FLUX Text-to-Image") as demo: |
| gr.Markdown("# Malika - FLUX.1 Text-to-Image Modeliyle Görüntü Oluşturucu") |
| gr.Markdown("Bu uygulama, codermert/malikafinal modelini kullanarak metinden görüntü oluşturur.") |
| |
| with gr.Row(): |
| load_model_btn = gr.Button("Modeli Yükle", variant="primary") |
| model_status = gr.Textbox(label="Model Durumu", value="Model henüz yüklenmedi") |
| |
| with gr.Row(): |
| with gr.Column(): |
| prompt_input = gr.Textbox( |
| label="Prompt", |
| placeholder="Görüntü için prompt yazın...", |
| lines=3 |
| ) |
| tok_checkbox = gr.Checkbox( |
| label="Otomatik TOK Ekle", |
| value=True, |
| info="İşaretliyse prompt'a otomatik olarak TOK ekler" |
| ) |
| generate_btn = gr.Button("Görüntü Oluştur", variant="primary") |
| |
| with gr.Column(): |
| image_output = gr.Image(label="Oluşturulan Görüntü") |
| prompt_used = gr.Textbox(label="Kullanılan Prompt") |
| |
| load_model_btn.click( |
| fn=model_handler.load_model, |
| outputs=model_status |
| ) |
| |
| generate_btn.click( |
| fn=model_handler.generate_image, |
| inputs=[prompt_input, tok_checkbox], |
| outputs=[image_output, prompt_used] |
| ) |
| |
| gr.Markdown(""" |
| ## Kullanım Tavsiyeleri |
| - İlk olarak "Modeli Yükle" düğmesine tıklayın (bu işlem biraz zaman alabilir) |
| - Eğer model için özel bir trigger sözcüğü gerekliyse 'TOK' seçeneğini işaretli bırakın |
| - Daha gerçekçi sonuçlar için "photorealistic, 8K, detailed" gibi ifadeler ekleyebilirsiniz |
| - Örnek: "portrait of a woman with blue eyes, photorealistic, 8K" |
| |
| ## Model Bilgisi |
| Bu uygulama codermert/malikafinal modelini kullanmaktadır. |
| Base model: black-forest-labs/FLUX.1-dev |
| """) |
|
|
| |
| demo.launch() |