seawolf2357 commited on
Commit
37e270b
·
verified ·
1 Parent(s): a292b2b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -24
app.py CHANGED
@@ -14,6 +14,7 @@ import numpy as np
14
  from PIL import Image
15
  import random
16
  import gc
 
17
 
18
 
19
  # =========================================================
@@ -26,14 +27,13 @@ GROQ_API_KEY = os.getenv("GROQ_API_KEY")
26
  # =========================================================
27
  MODEL_ID = "Wan-AI/Wan2.2-T2V-A14B-Diffusers"
28
 
29
- # Reduced resolution for memory efficiency
30
- LANDSCAPE_WIDTH = 640
31
- LANDSCAPE_HEIGHT = 384
32
  MAX_SEED = np.iinfo(np.int32).max
33
 
34
  FIXED_FPS = 16
35
- MIN_FRAMES_MODEL = 9 # Must be 4k+1: 5, 9, 13, 17...
36
- MAX_FRAMES_MODEL = 49 # Reduced from 81 for memory
37
 
38
  MIN_DURATION = round(MIN_FRAMES_MODEL/FIXED_FPS, 1)
39
  MAX_DURATION = round(MAX_FRAMES_MODEL/FIXED_FPS, 1)
@@ -41,14 +41,12 @@ MAX_DURATION = round(MAX_FRAMES_MODEL/FIXED_FPS, 1)
41
  # =========================================================
42
  # MODEL LOADING
43
  # =========================================================
44
- print("Loading VAE...")
45
  vae = AutoencoderKLWan.from_pretrained(
46
  "Wan-AI/Wan2.2-T2V-A14B-Diffusers",
47
  subfolder="vae",
48
  torch_dtype=torch.float32
49
  )
50
 
51
- print("Loading pipeline...")
52
  pipe = WanPipeline.from_pretrained(
53
  MODEL_ID,
54
  transformer=WanTransformer3DModel.from_pretrained(
@@ -67,13 +65,18 @@ pipe = WanPipeline.from_pretrained(
67
  torch_dtype=torch.bfloat16,
68
  ).to('cuda')
69
 
70
- # Memory cleanup
71
  for i in range(3):
72
  gc.collect()
73
  torch.cuda.synchronize()
74
  torch.cuda.empty_cache()
75
 
76
- print("Pipeline loaded successfully!")
 
 
 
 
 
 
77
 
78
  # =========================================================
79
  # DEFAULT PROMPTS
@@ -161,23 +164,13 @@ def generate_video(
161
  randomize_seed=False,
162
  progress=gr.Progress(track_tqdm=True),
163
  ):
164
- # Clear memory before generation
165
- gc.collect()
166
- torch.cuda.empty_cache()
167
-
168
  # Enhance prompt if option is enabled
169
  final_prompt = prompt
170
  if enhance_prompt_option:
171
  final_prompt = enhance_prompt(prompt)
172
  print(f"Enhanced Prompt: {final_prompt}")
173
 
174
- # Calculate num_frames - must satisfy (num_frames - 1) % 4 == 0
175
- # Valid values: 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49
176
- raw_frames = int(round(duration_seconds * FIXED_FPS))
177
- k = round((raw_frames - 1) / 4)
178
- num_frames = 4 * k + 1
179
- num_frames = np.clip(num_frames, MIN_FRAMES_MODEL, MAX_FRAMES_MODEL)
180
-
181
  current_seed = random.randint(0, MAX_SEED) if randomize_seed else int(seed)
182
 
183
  output_frames_list = pipe(
@@ -196,10 +189,6 @@ def generate_video(
196
  video_path = tmpfile.name
197
 
198
  export_to_video(output_frames_list, video_path, fps=FIXED_FPS)
199
-
200
- # Clear memory after generation
201
- gc.collect()
202
- torch.cuda.empty_cache()
203
 
204
  # Build info log
205
  actual_duration = num_frames / FIXED_FPS
 
14
  from PIL import Image
15
  import random
16
  import gc
17
+ from optimization import optimize_pipeline_
18
 
19
 
20
  # =========================================================
 
27
  # =========================================================
28
  MODEL_ID = "Wan-AI/Wan2.2-T2V-A14B-Diffusers"
29
 
30
+ LANDSCAPE_WIDTH = 832
31
+ LANDSCAPE_HEIGHT = 480
 
32
  MAX_SEED = np.iinfo(np.int32).max
33
 
34
  FIXED_FPS = 16
35
+ MIN_FRAMES_MODEL = 8
36
+ MAX_FRAMES_MODEL = 81
37
 
38
  MIN_DURATION = round(MIN_FRAMES_MODEL/FIXED_FPS, 1)
39
  MAX_DURATION = round(MAX_FRAMES_MODEL/FIXED_FPS, 1)
 
41
  # =========================================================
42
  # MODEL LOADING
43
  # =========================================================
 
44
  vae = AutoencoderKLWan.from_pretrained(
45
  "Wan-AI/Wan2.2-T2V-A14B-Diffusers",
46
  subfolder="vae",
47
  torch_dtype=torch.float32
48
  )
49
 
 
50
  pipe = WanPipeline.from_pretrained(
51
  MODEL_ID,
52
  transformer=WanTransformer3DModel.from_pretrained(
 
65
  torch_dtype=torch.bfloat16,
66
  ).to('cuda')
67
 
 
68
  for i in range(3):
69
  gc.collect()
70
  torch.cuda.synchronize()
71
  torch.cuda.empty_cache()
72
 
73
+ optimize_pipeline_(
74
+ pipe,
75
+ prompt='prompt',
76
+ height=LANDSCAPE_HEIGHT,
77
+ width=LANDSCAPE_WIDTH,
78
+ num_frames=MAX_FRAMES_MODEL,
79
+ )
80
 
81
  # =========================================================
82
  # DEFAULT PROMPTS
 
164
  randomize_seed=False,
165
  progress=gr.Progress(track_tqdm=True),
166
  ):
 
 
 
 
167
  # Enhance prompt if option is enabled
168
  final_prompt = prompt
169
  if enhance_prompt_option:
170
  final_prompt = enhance_prompt(prompt)
171
  print(f"Enhanced Prompt: {final_prompt}")
172
 
173
+ num_frames = np.clip(int(round(duration_seconds * FIXED_FPS)), MIN_FRAMES_MODEL, MAX_FRAMES_MODEL)
 
 
 
 
 
 
174
  current_seed = random.randint(0, MAX_SEED) if randomize_seed else int(seed)
175
 
176
  output_frames_list = pipe(
 
189
  video_path = tmpfile.name
190
 
191
  export_to_video(output_frames_list, video_path, fps=FIXED_FPS)
 
 
 
 
192
 
193
  # Build info log
194
  actual_duration = num_frames / FIXED_FPS