Foto_Generator / app.py
fth17172's picture
Update app.py
a1c44f2 verified
Raw
History Blame Contribute Delete
5.37 kB
import spaces # <--- EN BAŞTA OLMALI
import random
import diffusers
import gradio as gr
import numpy as np
import torch
from diffusers import StableDiffusion3Pipeline
from deep_translator import GoogleTranslator
# SD3.5 Large Model Yapılandırması
MODEL_REPO_ID = "stabilityai/stable-diffusion-3.5-large"
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 1024
dtype = torch.bfloat16 if torch.cuda.is_available() else torch.float32
pipe = StableDiffusion3Pipeline.from_pretrained(
MODEL_REPO_ID,
torch_dtype=dtype,
)
if torch.cuda.is_available():
pipe.enable_model_cpu_offload()
def translate_if_needed(text: str) -> str:
"""Türkçe girdiyi modelin anladığı İngilizceye çevirir."""
if not text or not text.strip():
return ""
try:
translated = GoogleTranslator(source='auto', target='en').translate(text)
return translated
except Exception:
return text
@spaces.GPU(duration=60)
def generate_image(
prompt_tr,
negative_prompt_tr="",
seed=42,
randomize_seed=True,
width=1024,
height=1024,
guidance_scale=4.5,
num_inference_steps=35,
progress=gr.Progress(track_tqdm=True),
):
# Çeviri İşlemleri
prompt_en = translate_if_needed(prompt_tr)
negative_prompt_en = translate_if_needed(negative_prompt_tr)
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device="cuda" if torch.cuda.is_available() else "cpu").manual_seed(seed)
image = pipe(
prompt=prompt_en,
negative_prompt=negative_prompt_en,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
width=width,
height=height,
generator=generator,
).images[0]
return image, seed, prompt_en
# Özel CSS ile Modern Arayüz Tasarımı
custom_css = """
#main-container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
}
.generate-btn {
background: linear-gradient(90deg, #4F46E5 0%, #7C3AED 100%) !important;
color: white !important;
font-weight: bold !important;
font-size: 1.1em !important;
border-none !important;
}
"""
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
with gr.Column(elem_id="main-container"):
gr.Markdown(
"""
# 🎨 AI Görsel Stüdyosu (SD 3.5 Large)
Türkçe komutlar yazarak yüksek kalitede görseller oluşturun.
"""
)
with gr.Row():
prompt_input = gr.Textbox(
label="Ne üretmek istiyorsunuz?",
placeholder="Örn: Takım elbise giymiş, elinde 'Merhaba Dünya' yazan bir kapibara...",
lines=2,
scale=4,
)
run_btn = gr.Button("Üret", variant="primary", elem_classes=["generate-btn"], scale=1)
with gr.Row():
result_image = gr.Image(label="Üretilen Görsel", show_label=False, type="pil")
with gr.Accordion("⚙️ Gelişmiş Ayarlar", open=False):
negative_prompt_input = gr.Textbox(
label="İstenmeyen Özellikler (Negative Prompt)",
placeholder="Örn: bulanık, düşük kalite, kötü anatomi...",
lines=1,
)
translated_prompt_preview = gr.Textbox(
label="Model Kullanılan İngilizce Çeviri (Otomatik)",
interactive=False,
)
with gr.Row():
width_slider = gr.Slider(
label="Genişlik (Width)", minimum=512, maximum=MAX_IMAGE_SIZE, step=64, value=1024
)
height_slider = gr.Slider(
label="Yükseklik (Height)", minimum=512, maximum=MAX_IMAGE_SIZE, step=64, value=1024
)
with gr.Row():
guidance_slider = gr.Slider(
label="Metne Sadakat (Guidance Scale)", minimum=1.0, maximum=10.0, step=0.1, value=4.5
)
steps_slider = gr.Slider(
label="İşleme Adımı (Steps)", minimum=10, maximum=50, step=1, value=35
)
with gr.Row():
seed_slider = gr.Slider(
label="Tohum (Seed)", minimum=0, maximum=MAX_SEED, step=1, value=0
)
randomize_seed_chk = gr.Checkbox(label="Her Seferinde Rastgele Seed Kullan", value=True)
# Örnek Hazır Promptlar
gr.Examples(
examples=[
["Cyberpunk tarzında, gece vakti yağmurlu İstanbul sokakları, neon ışıklar"],
["Astronaut riding a horse on Mars, photorealistic, 8k resolution"],
],
inputs=[prompt_input],
)
# Tetikleyiciler
inputs_list = [
prompt_input,
negative_prompt_input,
seed_slider,
randomize_seed_chk,
width_slider,
height_slider,
guidance_slider,
steps_slider,
]
outputs_list = [result_image, seed_slider, translated_prompt_preview]
run_btn.click(fn=generate_image, inputs=inputs_list, outputs=outputs_list)
prompt_input.submit(fn=generate_image, inputs=inputs_list, outputs=outputs_list)
if __name__ == "__main__":
demo.launch()