File size: 5,447 Bytes
8923aba 9450330 9f261f3 9450330 031ae3b 9f261f3 9450330 031ae3b 9450330 031ae3b 9450330 031ae3b 9450330 031ae3b 9450330 031ae3b 9450330 9f261f3 9450330 9f261f3 8923aba 9f261f3 8923aba 9f261f3 9450330 9f261f3 9450330 9f261f3 8923aba 9f261f3 9450330 9f261f3 031ae3b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import gradio as gr
import torch
import os
from diffusers import AutoPipelineForText2Image
from huggingface_hub import snapshot_download
import logging
# Logging ayarları
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class ModelHandler:
def __init__(self):
self.pipeline = None
self.device = "cuda" if torch.cuda.is_available() else "cpu"
self.dtype = torch.float16 if self.device == "cuda" else torch.float32
def load_model(self, progress=gr.Progress()):
try:
if self.pipeline is not None:
return "Model zaten yüklü."
progress(0, desc="Base model indiriliyor...")
# Base modeli indir
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,
token=os.getenv("HF_TOKEN")
)
progress(0.5, desc="LoRA modeli indiriliyor...")
# LoRA modelini indir
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,
token=os.getenv("HF_TOKEN")
)
progress(0.7, desc="Pipeline oluşturuluyor...")
# Pipeline'ı oluştur
self.pipeline = AutoPipelineForText2Image.from_pretrained(
base_model_path,
torch_dtype=self.dtype,
use_safetensors=True
).to(self.device)
progress(0.9, desc="LoRA yükleniyor...")
# LoRA'yı yükle
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."
except Exception as e:
logger.error(f"Model yükleme hatası: {str(e)}")
return f"Model yüklenirken hata oluştu: {str(e)}"
def generate_image(self, prompt, use_tok=True, progress=gr.Progress()):
try:
if self.pipeline is None:
return None, "Lütfen önce modeli yükleyin!"
# Eğer use_tok seçeneği işaretlendiyse, prompt'a TOK ekle
if use_tok and "TOK" not in prompt:
prompt = f"TOK {prompt}"
progress(0.2, desc="Görüntü oluşturuluyor...")
# Görüntü oluştur
image = self.pipeline(
prompt,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
progress(1.0, desc="Tamamlandı!")
return image, f"Oluşturulan prompt: {prompt}"
except Exception as e:
logger.error(f"Görüntü oluşturma hatası: {str(e)}")
return None, f"Hata oluştu: {str(e)}"
# Model işleyiciyi oluştur
model_handler = ModelHandler()
# Gradio arayüzü
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
""")
# Arayüzü başlat
if __name__ == "__main__":
demo.launch(share=True) |