LucanDerLurch commited on
Commit
1e8df5f
·
verified ·
1 Parent(s): f82f9b6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -21
app.py CHANGED
@@ -6,7 +6,8 @@ import gc
6
  import traceback
7
 
8
  MODEL_ID = "ali-vilab/i2vgen-xl"
9
- LORA_ID = "latent-consistency/lcm-lora-sdxl" # Die Turbo-Impfung
 
10
 
11
  pipe = None
12
 
@@ -16,6 +17,7 @@ def load_model_safely():
16
  return pipe, "Modell bereits geladen."
17
 
18
  log = "Lade Modell...\n"
 
19
 
20
  try:
21
  # 1. Basis Modell laden
@@ -25,20 +27,23 @@ def load_model_safely():
25
  variant="fp16"
26
  )
27
 
28
- # 2. TURBO (LCM) LADEN
29
- log += "💉 Injiziere LCM Turbo LoRA...\n"
30
  try:
31
- # Wir laden den Adapter. Das braucht etwas RAM!
32
- pipe.load_lora_weights(LORA_ID, adapter_name="lcm")
33
- pipe.fuse_lora() # Verschmilzt LoRA mit Modell für Speed
34
 
35
- # WICHTIG: Scheduler auf LCM ändern
 
 
 
 
36
  pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
37
- log += "✅ Turbo aktiviert (LCM Scheduler & LoRA geladen).\n"
38
  except Exception as e:
39
- log += f"⚠️ Turbo fehlgeschlagen (RAM voll?): {e}\nWir machen langsam weiter.\n"
40
 
41
- # 3. Speicher Optimierung
42
  try:
43
  pipe.enable_model_cpu_offload()
44
  log += "✅ Model Offloading aktiv.\n"
@@ -47,7 +52,7 @@ def load_model_safely():
47
  pipe.enable_sequential_cpu_offload()
48
  log += "✅ Sequential Offloading aktiv.\n"
49
  except:
50
- log += "❌ RAM WARNUNG: Kein Offloading möglich.\n"
51
 
52
  pipe.enable_vae_slicing()
53
  pipe.enable_vae_tiling()
@@ -55,7 +60,7 @@ def load_model_safely():
55
  return pipe, log
56
 
57
  except Exception as e:
58
- return None, f"Absturz beim Laden: {e}"
59
 
60
  def generate_video(image_in, prompt, negative_prompt):
61
  global pipe
@@ -75,12 +80,16 @@ def generate_video(image_in, prompt, negative_prompt):
75
  gc.collect()
76
 
77
  try:
78
- # TURBO SETUP:
79
- target_size = 448 # Wir hoffen, dass 448 mit LoRA noch passt
80
- steps = 6 # LCM braucht nur 4-8 Steps!
81
- guidance = 1.5 # LCM braucht niedrigen Guidance Scale (1.0 - 2.0)
 
 
 
 
82
 
83
- log_messages += f"Generiere Turbo-Video (Nur {steps} Steps!)...\n"
84
 
85
  image_in = image_in.resize((target_size, target_size))
86
 
@@ -92,7 +101,7 @@ def generate_video(image_in, prompt, negative_prompt):
92
  negative_prompt=negative_prompt,
93
  num_frames=16,
94
  num_inference_steps=steps,
95
- guidance_scale=guidance,
96
  height=target_size,
97
  width=target_size,
98
  generator=generator
@@ -108,15 +117,15 @@ def generate_video(image_in, prompt, negative_prompt):
108
  return None, log_messages + f"\n❌ Fehler: {e}"
109
 
110
  with gr.Blocks() as demo:
111
- gr.Markdown("# I2VGen-XL ⚡ TURBO (LCM)")
112
- gr.Markdown("Mit LCM LoRA: Nur 6 Steps nötig! (Hoffen wir, dass der RAM reicht)")
113
 
114
  with gr.Row():
115
  with gr.Column():
116
  img = gr.Image(type="pil", label="Bild")
117
  txt = gr.Textbox(label="Prompt", value="clouds moving, cinematic")
118
  neg = gr.Textbox(value="distortion, blurry", label="Negative")
119
- btn = gr.Button("Turbo Start (6 Steps)")
120
 
121
  with gr.Row():
122
  vid = gr.Video(label="Video")
 
6
  import traceback
7
 
8
  MODEL_ID = "ali-vilab/i2vgen-xl"
9
+ # Das ist der Turbo-Booster für SDXL-basierte Modelle (wie I2VGen-XL)
10
+ LORA_ID = "latent-consistency/lcm-lora-sdxl"
11
 
12
  pipe = None
13
 
 
17
  return pipe, "Modell bereits geladen."
18
 
19
  log = "Lade Modell...\n"
20
+ print("Starte Ladevorgang...")
21
 
22
  try:
23
  # 1. Basis Modell laden
 
27
  variant="fp16"
28
  )
29
 
30
+ # 2. LCM TURBO ZÜNDEN
31
+ log += "🚀 Lade LCM LoRA...\n"
32
  try:
33
+ # LoRA laden
34
+ pipe.load_lora_weights(LORA_ID)
 
35
 
36
+ # WICHTIG: fuse_lora() verschmilzt die Gewichte.
37
+ # Das verhindert, dass wir doppelten RAM für Modell + LoRA brauchen.
38
+ pipe.fuse_lora()
39
+
40
+ # Scheduler austauschen gegen LCM
41
  pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
42
+ log += "✅ LCM Turbo aktiviert! (Steps reduziert auf 4-8)\n"
43
  except Exception as e:
44
+ log += f"⚠️ LoRA Fehler: {e}\nEs geht ohne Turbo weiter (langsam).\n"
45
 
46
+ # 3. Speicher-Optimierung
47
  try:
48
  pipe.enable_model_cpu_offload()
49
  log += "✅ Model Offloading aktiv.\n"
 
52
  pipe.enable_sequential_cpu_offload()
53
  log += "✅ Sequential Offloading aktiv.\n"
54
  except:
55
+ log += "❌ RAM Warnung: Kein Offloading.\n"
56
 
57
  pipe.enable_vae_slicing()
58
  pipe.enable_vae_tiling()
 
60
  return pipe, log
61
 
62
  except Exception as e:
63
+ return None, f"Absturz beim Laden: {e}\n{traceback.format_exc()}"
64
 
65
  def generate_video(image_in, prompt, negative_prompt):
66
  global pipe
 
80
  gc.collect()
81
 
82
  try:
83
+ # LCM EINSTELLUNGEN
84
+ # Steps: 6 (statt 20-50)
85
+ # Guidance: 1.5 (LCM braucht sehr niedrige Werte, sonst Bildmatsch)
86
+ steps = 6
87
+ guidance = 1.5
88
+
89
+ # Auflösung: Wir bleiben bei 448px für Stabilität
90
+ target_size = 448
91
 
92
+ log_messages += f"Generiere mit {steps} Steps (Turbo Modus)...\n"
93
 
94
  image_in = image_in.resize((target_size, target_size))
95
 
 
101
  negative_prompt=negative_prompt,
102
  num_frames=16,
103
  num_inference_steps=steps,
104
+ guidance_scale=guidance, # WICHTIG: Niedrig halten bei LCM!
105
  height=target_size,
106
  width=target_size,
107
  generator=generator
 
117
  return None, log_messages + f"\n❌ Fehler: {e}"
118
 
119
  with gr.Blocks() as demo:
120
+ gr.Markdown("# I2VGen-XL ⚡ LCM TURBO")
121
+ gr.Markdown("Nutzt LCM LoRA für extreme Geschwindigkeit (6 Steps).")
122
 
123
  with gr.Row():
124
  with gr.Column():
125
  img = gr.Image(type="pil", label="Bild")
126
  txt = gr.Textbox(label="Prompt", value="clouds moving, cinematic")
127
  neg = gr.Textbox(value="distortion, blurry", label="Negative")
128
+ btn = gr.Button("Turbo Start (ca. 2-3 Min)")
129
 
130
  with gr.Row():
131
  vid = gr.Video(label="Video")