sumner / app.py
rafael1994s's picture
Update app.py
43d1a7b verified
import torch
import spaces
import gradio as gr
from diffusers import StableDiffusionXLPipeline, AutoencoderKL
# Ссылки на файлы из репозиториев
BASE_MODEL_URL = "https://huggingface.co/LyliaEngine/Pony_Diffusion_V6_XL/resolve/main/ponyDiffusionV6XL_v6StartWithThisOne.safetensors"
VAE_MODEL_URL = "https://huggingface.co/LyliaEngine/Pony_Diffusion_V6_XL/resolve/main/sdxl_vae.safetensors"
LORA_MODEL_URL = "https://huggingface.co/nncyberpunk/LoRA_SDXL1.0_SummertimeSagaXL_Pony/resolve/main/LoRA_SDXL1.0_SummertimeSagaXL_Pony.safetensors"
# 1. Загружаем VAE напрямую
# Это гарантирует правильные цвета как в оригинальной Pony V6
vae = AutoencoderKL.from_single_file(VAE_MODEL_URL, torch_dtype=torch.float16)
# 2. Инициализируем пайплайн с этим VAE
pipe = StableDiffusionXLPipeline.from_single_file(
BASE_MODEL_URL,
vae=vae,
torch_dtype=torch.float16,
use_safetensors=True
)
# 3. Накладываем LoRA
pipe.load_lora_weights(LORA_MODEL_URL)
pipe.to("cuda")
@spaces.GPU
def generate(prompt, negative_prompt, lora_scale, steps, guidance):
# Добавляем триггеры для Pony и стиля Summertime Saga
# Важно: 'summertime saga style' активирует LoRA
styled_prompt = f"score_9, score_8, score_7, rating_explicit, summertime saga style, {prompt}"
image = pipe(
prompt=styled_prompt,
negative_prompt=negative_prompt,
cross_attention_kwargs={"scale": lora_scale},
num_inference_steps=steps,
guidance_scale=guidance,
).images[0]
return image
# Интерфейс (Gradio)
with gr.Blocks() as demo:
gr.Markdown("### Summertime Saga XL + Pony V6 (Custom VAE)")
with gr.Row():
with gr.Column():
prompt = gr.Textbox(label="Промпт", placeholder="jenny, bedroom, looking at viewer...")
neg_prompt = gr.Textbox(
label="Negative Prompt",
value="score_6, score_5, score_4, low quality, bad anatomy, 3d, render, photo"
)
with gr.Row():
lora_scale = gr.Slider(0, 1.2, value=0.85, label="LoRA Strength")
steps = gr.Slider(10, 50, value=25, label="Steps")
guidance = gr.Slider(1, 10, value=7.0, label="CFG Scale")
btn = gr.Button("Generate", variant="primary")
with gr.Column():
output = gr.Image(label="Результат")
btn.click(
fn=generate,
inputs=[prompt, neg_prompt, lora_scale, steps, guidance],
outputs=output
)
demo.launch()