space1 / app.py
matejp95's picture
Update app.py
3b76238 verified
Raw
History Blame Contribute Delete
4.75 kB
import gradio as gr
import spaces
from huggingface_hub import hf_hub_download
import requests
import json
import time
import random
import os
# ====================== DOWNLOAD MODELOV ======================
def download_models():
print("📥 Downloading models...")
# Qwen
hf_hub_download("Comfy-Org/Qwen-Image-Edit_ComfyUI", "split_files/diffusion_models/qwen_image_edit_2509_fp8_e4m3fn.safetensors", local_dir="models/diffusion_models", force_download=False)
hf_hub_download("Comfy-Org/Qwen-Image_ComfyUI", "split_files/vae/qwen_image_vae.safetensors", local_dir="models/vae", force_download=False)
hf_hub_download("Comfy-Org/Qwen-Image_ComfyUI", "split_files/text_encoders/qwen_2.5_vl_7b_fp8_scaled.safetensors", local_dir="models/text_encoders", force_download=False)
hf_hub_download("lightx2v/Qwen-Image-Lightning", "Qwen-Image-Edit-2509/Qwen-Image-Edit-2509-Lightning-4steps-V1.0-bf16.safetensors", local_dir="models/loras", force_download=False)
# Wan 2.2
hf_hub_download("Comfy-Org/Wan_2.2_ComfyUI_Repackaged", "split_files/vae/wan_2.1_vae.safetensors", local_dir="models/vae", force_download=False)
hf_hub_download("NSFW-API/NSFW-Wan-UMT5-XXL", "nsfw_wan_umt5-xxl_fp8_scaled.safetensors", local_dir="models/text_encoders", force_download=False)
hf_hub_download("FX-FeiHou/wan2.2-Remix", "NSFW/Wan2.2_Remix_NSFW_i2v_14b_low_lighting_v2.0.safetensors", local_dir="models/diffusion_models", force_download=False)
hf_hub_download("FX-FeiHou/wan2.2-Remix", "NSFW/Wan2.2_Remix_NSFW_i2v_14b_high_lighting_v2.0.safetensors", local_dir="models/diffusion_models", force_download=False)
hf_hub_download("Comfy-Org/Wan_2.2_ComfyUI_Repackaged", "split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors", local_dir="models/loras", force_download=False)
hf_hub_download("Comfy-Org/Wan_2.2_ComfyUI_Repackaged", "split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors", local_dir="models/loras", force_download=False)
print("✅ Models ready!")
download_models()
COMFY_URL = "http://127.0.0.1:8188"
@spaces.GPU(duration=180)
def run_workflow(prompt_image, prompt_video, bedroom_image, woman_image, steps, cfg, length, seed):
if bedroom_image is None or woman_image is None:
return None, None, "❌ Naloži obe sliki!"
if seed == -1:
seed = random.randint(0, 999999999)
try:
with open("workflow_api.json", "r") as f:
workflow = json.load(f)
# Tukaj lahko kasneje dinamično spreminjaš node vrednosti
# Za zdaj zaženemo osnovni workflow
response = requests.post(f"{COMFY_URL}/prompt", json={"prompt": workflow})
prompt_id = response.json().get("prompt_id")
status = f"🔄 Running workflow... (ID: {prompt_id})"
# Čakaj na končanje
for _ in range(120):
time.sleep(3)
history = requests.get(f"{COMFY_URL}/history/{prompt_id}").json()
if prompt_id in history:
status = "✅ Workflow finished!"
break
return None, None, status
except Exception as e:
return None, None, f"Error: {str(e)}"
with gr.Blocks(title="Wan2.2 Video Generator") as demo:
gr.Markdown("# 🛏️ Qwen Image Edit + Wan2.2 Video")
with gr.Row():
with gr.Column():
prompt_image = gr.Textbox(label="Prompt za sliko", lines=3, value="Natural integration, cozy bedroom...")
prompt_video = gr.Textbox(label="Prompt za video", lines=3, value="smooth cinematic motion...")
with gr.Row():
img1 = gr.Image(label="Image 1", type="filepath")
img2 = gr.Image(label="Image 2", type="filepath")
with gr.Accordion("Advanced", open=False):
steps = gr.Slider(1, 20, value=4, step=1, label="Steps")
cfg = gr.Slider(0.5, 3.0, value=1.0, step=0.1, label="CFG")
length = gr.Slider(16, 121, value=81, step=1, label="Video Length")
seed = gr.Number(value=-1, label="Seed (-1 = random)")
btn = gr.Button("🚀 Generate", variant="primary")
with gr.Column():
out_image = gr.Image(label="Generated Image")
out_video = gr.Video(label="Generated Video")
status = gr.Textbox(label="Status", interactive=False)
btn.click(
run_workflow,
inputs=[prompt_image, prompt_video, img1, img2, steps, cfg, length, seed],
outputs=[out_image, out_video, status]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, theme=gr.themes.Soft())