LucanDerLurch commited on
Commit
590fc82
·
verified ·
1 Parent(s): eff5802

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -18
app.py CHANGED
@@ -19,6 +19,7 @@ def load_model_safely():
19
  print("Lade Modell...")
20
 
21
  try:
 
22
  pipe = I2VGenXLPipeline.from_pretrained(
23
  MODEL_ID,
24
  torch_dtype=torch.float32,
@@ -34,6 +35,7 @@ def load_model_safely():
34
  except Exception as e:
35
  log += f"⚠️ Turbo Fehler: {e}\n"
36
 
 
37
  try:
38
  pipe.enable_model_cpu_offload()
39
  log += "✅ Model Offloading aktiv.\n"
@@ -52,8 +54,7 @@ def load_model_safely():
52
  except Exception as e:
53
  return None, f"Absturz beim Laden: {e}\n{traceback.format_exc()}"
54
 
55
- # HIER IST DIE MAGIE: Das Argument "progress=gr.Progress()"
56
- def generate_video(image_in, prompt, negative_prompt, progress=gr.Progress()):
57
  global pipe
58
  log_messages = ""
59
 
@@ -61,7 +62,7 @@ def generate_video(image_in, prompt, negative_prompt, progress=gr.Progress()):
61
  return None, "Kein Bild!"
62
 
63
  # Initialisierung des Balkens
64
- progress(0, desc="Lade Modell (kann dauern)...")
65
 
66
  if pipe is None:
67
  model, msg = load_model_safely()
@@ -74,23 +75,28 @@ def generate_video(image_in, prompt, negative_prompt, progress=gr.Progress()):
74
  gc.collect()
75
 
76
  try:
 
77
  steps = 6
78
  guidance = 1.2
79
- target_size = 448
80
 
81
- log_messages += f"Starte Generierung ({steps} Steps)...\n"
 
 
 
82
 
 
83
  image_in = image_in.resize((target_size, target_size))
 
 
 
84
  generator = torch.manual_seed(42)
85
 
86
- # --- DER FORTSCHRITTS-SPION ---
87
- # Diese Funktion wird NACH JEDEM STEP aufgerufen
88
- def callback_fn(pipe, step_index, timestep, callback_kwargs):
89
- current = step_index + 1
90
- # Aktualisiert den Balken oben im Bild
91
- progress((current, steps), desc=f"Step {current} von {steps} fertig...")
92
- return callback_kwargs
93
- # ------------------------------
94
 
95
  output = pipe(
96
  prompt=prompt,
@@ -102,7 +108,8 @@ def generate_video(image_in, prompt, negative_prompt, progress=gr.Progress()):
102
  height=target_size,
103
  width=target_size,
104
  generator=generator,
105
- callback_on_step_end=callback_fn # Hier binden wir den Spion ein
 
106
  ).frames[0]
107
 
108
  video_path = "turbo_output.mp4"
@@ -112,23 +119,37 @@ def generate_video(image_in, prompt, negative_prompt, progress=gr.Progress()):
112
  return video_path, log_messages
113
 
114
  except Exception as e:
115
- return None, log_messages + f"\n❌ Fehler: {e}"
 
 
116
 
 
117
  with gr.Blocks() as demo:
118
- gr.Markdown("# I2VGen-XL ⚡ LCM TURBO")
119
- gr.Markdown("Jetzt mit Live-Fortschrittsanzeige!")
120
 
121
  with gr.Row():
122
  with gr.Column():
123
  img = gr.Image(type="pil", label="Bild")
124
  txt = gr.Textbox(label="Prompt", value="fireworks in the sky")
125
  neg = gr.Textbox(value="distortion, blurry", label="Negative")
 
 
 
 
 
 
 
 
 
 
 
126
  btn = gr.Button("Turbo Start")
127
 
128
  with gr.Row():
129
  vid = gr.Video(label="Video")
130
  logs = gr.Textbox(label="Status Log", lines=10)
131
 
132
- btn.click(generate_video, [img, txt, neg], [vid, logs])
133
 
134
  demo.launch()
 
19
  print("Lade Modell...")
20
 
21
  try:
22
+ # Standard float32 für maximale CPU Kompatibilität
23
  pipe = I2VGenXLPipeline.from_pretrained(
24
  MODEL_ID,
25
  torch_dtype=torch.float32,
 
35
  except Exception as e:
36
  log += f"⚠️ Turbo Fehler: {e}\n"
37
 
38
+ # Versuche aggressives Speichermanagement
39
  try:
40
  pipe.enable_model_cpu_offload()
41
  log += "✅ Model Offloading aktiv.\n"
 
54
  except Exception as e:
55
  return None, f"Absturz beim Laden: {e}\n{traceback.format_exc()}"
56
 
57
+ def generate_video(image_in, prompt, negative_prompt, resolution, progress=gr.Progress()):
 
58
  global pipe
59
  log_messages = ""
60
 
 
62
  return None, "Kein Bild!"
63
 
64
  # Initialisierung des Balkens
65
+ progress(0, desc="Lade Modell...")
66
 
67
  if pipe is None:
68
  model, msg = load_model_safely()
 
75
  gc.collect()
76
 
77
  try:
78
+ # EINSTELLUNGEN
79
  steps = 6
80
  guidance = 1.2
 
81
 
82
+ # Slider Wert übernehmen
83
+ target_size = int(resolution)
84
+
85
+ log_messages += f"Skaliere Bild auf {target_size}x{target_size}...\n"
86
 
87
+ # Bild resizing (WICHTIG für Speed!)
88
  image_in = image_in.resize((target_size, target_size))
89
+
90
+ log_messages += f"Starte Generierung ({steps} Steps)...\n"
91
+
92
  generator = torch.manual_seed(42)
93
 
94
+ # --- FIX FÜR DEN FORTSCHRITTSBALKEN (Alte Methode) ---
95
+ def callback_fn(step, timestep, latents):
96
+ # step ist hier der Index (0, 1, 2...)
97
+ current = step + 1
98
+ progress((current, steps), desc=f"Step {current}/{steps} (Größe: {target_size}px)")
99
+ # -----------------------------------------------------
 
 
100
 
101
  output = pipe(
102
  prompt=prompt,
 
108
  height=target_size,
109
  width=target_size,
110
  generator=generator,
111
+ callback=callback_fn, # Alte Methode nutzen!
112
+ callback_steps=1
113
  ).frames[0]
114
 
115
  video_path = "turbo_output.mp4"
 
119
  return video_path, log_messages
120
 
121
  except Exception as e:
122
+ # Fehler abfangen und anzeigen
123
+ err_msg = str(e)
124
+ return None, log_messages + f"\n❌ Fehler: {err_msg}"
125
 
126
+ # UI
127
  with gr.Blocks() as demo:
128
+ gr.Markdown("# I2VGen-XL ⚡ LCM TURBO (Repariert)")
129
+ gr.Markdown("Wähle die Auflösung passend zur Geduld. **384px oder 448px** empfohlen!")
130
 
131
  with gr.Row():
132
  with gr.Column():
133
  img = gr.Image(type="pil", label="Bild")
134
  txt = gr.Textbox(label="Prompt", value="fireworks in the sky")
135
  neg = gr.Textbox(value="distortion, blurry", label="Negative")
136
+
137
+ # DER WICHTIGE REGLER FÜR SPEED
138
+ resolution_slider = gr.Slider(
139
+ minimum=320,
140
+ maximum=640,
141
+ value=448,
142
+ step=64,
143
+ label="Auflösung (Pixel)",
144
+ info="384 = Schnell | 448 = Mittel | 512+ = Langsam"
145
+ )
146
+
147
  btn = gr.Button("Turbo Start")
148
 
149
  with gr.Row():
150
  vid = gr.Video(label="Video")
151
  logs = gr.Textbox(label="Status Log", lines=10)
152
 
153
+ btn.click(generate_video, [img, txt, neg, resolution_slider], [vid, logs])
154
 
155
  demo.launch()