Update app.py
Browse files
app.py
CHANGED
|
@@ -880,6 +880,49 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale,
|
|
| 880 |
controlnet_steps = min(25, int(steps * 0.8))
|
| 881 |
print(f"⚙️ ControlNet Settings: Strength={controlnet_strength:.3f}, Steps={controlnet_steps}")
|
| 882 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 883 |
progress(0.03, desc="ControlNet läuft...")
|
| 884 |
|
| 885 |
# ===== WICHTIG: VARIABLEN FÜR KOMPLETTEN WORKFLOW =====
|
|
|
|
| 880 |
controlnet_steps = min(25, int(steps * 0.8))
|
| 881 |
print(f"⚙️ ControlNet Settings: Strength={controlnet_strength:.3f}, Steps={controlnet_steps}")
|
| 882 |
|
| 883 |
+
|
| 884 |
+
|
| 885 |
+
|
| 886 |
+
# ===== PUNKT 1: VAE-ENCODING & VERRAUSCHUNG =====
|
| 887 |
+
print("🔧 Punkt 1: Bereite verrauschtes Latent vor...")
|
| 888 |
+
|
| 889 |
+
# 1. Bild für Latent-Encoding vorbereiten (bereits skaliertes Bild verwenden)
|
| 890 |
+
if scaled_image is not None:
|
| 891 |
+
# img_for_latent ist das bereits herunterskalierte 512x512 Bild (mit Padding)
|
| 892 |
+
img_for_latent = scaled_image
|
| 893 |
+
else:
|
| 894 |
+
# Fallback, falls keine Skalierung stattfand
|
| 895 |
+
img_for_latent = image.convert("RGB").resize((IMG_SIZE, IMG_SIZE), Image.Resampling.LANCZOS)
|
| 896 |
+
|
| 897 |
+
# 2. In den Latent Space encoden (VAE)
|
| 898 |
+
with torch.no_grad():
|
| 899 |
+
# Bild zu Tensor konvertieren
|
| 900 |
+
img_tensor = pipe.feature_extractor(img_for_latent, return_tensors="pt").pixel_values.to(device)
|
| 901 |
+
# Encoden
|
| 902 |
+
init_latent_dist = pipe.vae.encode(img_tensor).latent_dist
|
| 903 |
+
init_latents = init_latent_dist.sample() # Latent mit zufälliger Variation aus der Verteilung
|
| 904 |
+
init_latents = init_latents * pipe.vae.config.scaling_factor # Skalierung anpassen
|
| 905 |
+
print(f"✅ VAE-Encoding abgeschlossen. Latent Shape: {init_latents.shape}")
|
| 906 |
+
|
| 907 |
+
# 3. Verrauschung basierend auf Strength (Scheduler)
|
| 908 |
+
# Strength=0.8 bedeutet: Starte bei 80% des Rauschprozesses (stark verrauscht)
|
| 909 |
+
strength = min(0.85, strength * 1.25) # Ihre existierende Stärke-Anpassung
|
| 910 |
+
latent_timestep = int(strength * pipe.scheduler.config.num_train_timesteps)
|
| 911 |
+
|
| 912 |
+
# Rauschen generieren
|
| 913 |
+
noise = torch.randn_like(init_latents)
|
| 914 |
+
|
| 915 |
+
# Verrauschte Latents erzeugen
|
| 916 |
+
noised_latents = pipe.scheduler.add_noise(init_latents, noise, torch.tensor([latent_timestep]))
|
| 917 |
+
print(f"✅ Verrauschung abgeschlossen (Strength: {strength}, Timestep: {latent_timestep})")
|
| 918 |
+
print(f" Noised Latents Shape: {noised_latents.shape}")
|
| 919 |
+
|
| 920 |
+
# Diese Variablen für später speichern:
|
| 921 |
+
# - noised_latents: Das verrauschte Start-Latent für die Denoising-Schleife
|
| 922 |
+
# - latent_timestep: Der Start-Timestep für die Denoising-Schleife
|
| 923 |
+
# - init_latents: Das unverrauschte Latent (für spätere Referenz)
|
| 924 |
+
|
| 925 |
+
|
| 926 |
progress(0.03, desc="ControlNet läuft...")
|
| 927 |
|
| 928 |
# ===== WICHTIG: VARIABLEN FÜR KOMPLETTEN WORKFLOW =====
|