Spaces:
Runtime error
Runtime error
import os | |
import random | |
import numpy as np | |
import torch | |
import gradio as gr | |
from diffusers import StableDiffusionPipeline | |
import paramiko | |
# Konfiguration | |
STORAGE_DOMAIN = os.getenv('STORAGE_DOMAIN', '').strip() # SFTP Server Domain | |
STORAGE_USER = os.getenv('STORAGE_USER', '').strip() # SFTP User | |
STORAGE_PSWD = os.getenv('STORAGE_PSWD', '').strip() # SFTP Passwort | |
STORAGE_PORT = int(os.getenv('STORAGE_PORT', '22').strip()) # SFTP Port | |
STORAGE_SECRET = os.getenv('STORAGE_SECRET', '').strip() # Secret Token | |
# Modell laden | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
repo = "stabilityai/stable-diffusion-3-medium-diffusers" | |
pipe = StableDiffusionPipeline.from_pretrained(repo, torch_dtype=torch.float16).to(device) | |
# Maximalwerte | |
MAX_SEED = np.iinfo(np.int32).max | |
MAX_IMAGE_SIZE = 1344 | |
# SFTP-Funktion | |
def upload_to_sftp(local_file, remote_path): | |
try: | |
transport = paramiko.Transport((STORAGE_DOMAIN, STORAGE_PORT)) | |
transport.connect(username=STORAGE_USER, password=STORAGE_PSWD) | |
sftp = paramiko.SFTPClient.from_transport(transport) | |
sftp.put(local_file, remote_path) | |
sftp.close() | |
transport.close() | |
print(f"File {local_file} successfully uploaded to {remote_path}") | |
return True | |
except Exception as e: | |
print(f"Error during SFTP upload: {e}") | |
return False | |
# Inferenz-Funktion | |
def infer(prompt, width, height, guidance_scale, num_inference_steps, seed, randomize_seed): | |
if randomize_seed: | |
seed = random.randint(0, MAX_SEED) | |
generator = torch.manual_seed(seed) | |
image = pipe(prompt, guidance_scale=guidance_scale, num_inference_steps=num_inference_steps, width=width, height=height, generator=generator).images[0] | |
# Speichere Bild lokal | |
local_file = f"/tmp/generated_image_{seed}.png" | |
image.save(local_file) | |
# Hochladen zu SFTP | |
remote_path = f"/uploads/generated_image_{seed}.png" | |
if upload_to_sftp(local_file, remote_path): | |
os.remove(local_file) | |
return f"Image uploaded to {remote_path}", seed | |
else: | |
return "Failed to upload image", seed | |
# Gradio-App | |
with gr.Blocks() as demo: | |
gr.Markdown("### Stable Diffusion 3 - Test App") | |
prompt = gr.Textbox(label="Prompt", placeholder="Enter your prompt here") | |
width = gr.Slider(256, MAX_IMAGE_SIZE, step=64, value=512, label="Width") | |
height = gr.Slider(256, MAX_IMAGE_SIZE, step=64, value=512, label="Height") | |
guidance_scale = gr.Slider(0.0, 10.0, step=0.1, value=7.5, label="Guidance Scale") | |
num_inference_steps = gr.Slider(1, 50, step=1, value=25, label="Inference Steps") | |
seed = gr.Number(value=42, label="Seed") | |
randomize_seed = gr.Checkbox(value=False, label="Randomize Seed") | |
generate_button = gr.Button("Generate Image") | |
output = gr.Text(label="Output") | |
generate_button.click( | |
infer, | |
inputs=[prompt, width, height, guidance_scale, num_inference_steps, seed, randomize_seed], | |
outputs=[output, seed] | |
) | |
demo.launch() | |