Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -16,9 +16,13 @@ import random
|
|
16 |
import gc
|
17 |
from optimization import optimize_pipeline_
|
18 |
|
|
|
|
|
|
|
|
|
19 |
|
20 |
MODEL_ID = "Wan-AI/Wan2.2-T2V-A14B-Diffusers"
|
21 |
-
|
22 |
|
23 |
LANDSCAPE_WIDTH = 832
|
24 |
LANDSCAPE_HEIGHT = 480
|
@@ -73,8 +77,81 @@ import uuid
|
|
73 |
import logging
|
74 |
from datetime import datetime
|
75 |
from huggingface_hub import HfApi, upload_file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
api = HfApi()
|
79 |
|
80 |
# Create a date-based folder (YYYY-MM-DD)
|
@@ -130,7 +207,6 @@ def get_duration(
|
|
130 |
return steps * 15
|
131 |
|
132 |
@spaces.GPU(duration=get_duration)
|
133 |
-
|
134 |
def generate_video(
|
135 |
prompt,
|
136 |
negative_prompt=default_negative_prompt,
|
@@ -161,15 +237,13 @@ def generate_video(
|
|
161 |
).frames[0]
|
162 |
|
163 |
|
164 |
-
|
165 |
-
|
|
|
166 |
|
167 |
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
hf_folder = upload_to_hf(video_path, prompt)
|
173 |
|
174 |
return video_path, current_seed
|
175 |
|
|
|
16 |
import gc
|
17 |
from optimization import optimize_pipeline_
|
18 |
|
19 |
+
import ffmpeg
|
20 |
+
import tempfile
|
21 |
+
import os
|
22 |
+
|
23 |
|
24 |
MODEL_ID = "Wan-AI/Wan2.2-T2V-A14B-Diffusers"
|
25 |
+
|
26 |
|
27 |
LANDSCAPE_WIDTH = 832
|
28 |
LANDSCAPE_HEIGHT = 480
|
|
|
77 |
import logging
|
78 |
from datetime import datetime
|
79 |
from huggingface_hub import HfApi, upload_file
|
80 |
+
import tempfile
|
81 |
+
import random
|
82 |
+
import logging
|
83 |
+
from datetime import datetime
|
84 |
+
import uuid
|
85 |
+
import numpy as np
|
86 |
+
import torch
|
87 |
+
import ffmpeg
|
88 |
|
89 |
+
HF_MODEL = os.environ.get("HF_UPLOAD_REPO", "rahul7star/VideoExplain")
|
90 |
+
def upload_to_hf(video_path: str, summary_text: str):
|
91 |
+
api = HfApi()
|
92 |
+
# Create date-based folder
|
93 |
+
today_str = datetime.now().strftime("%Y-%m-%d")
|
94 |
+
unique_subfolder = f"WANT2V-EXP-upload_{uuid.uuid4().hex[:8]}"
|
95 |
+
hf_folder = f"{today_str}/{unique_subfolder}"
|
96 |
+
logging.info(f"Uploading to HF folder: {hf_folder}")
|
97 |
+
|
98 |
+
# Upload video
|
99 |
+
video_filename = os.path.basename(video_path)
|
100 |
+
video_hf_path = f"{hf_folder}/{video_filename}"
|
101 |
+
upload_file(
|
102 |
+
path_or_fileobj=video_path,
|
103 |
+
path_in_repo=video_hf_path,
|
104 |
+
repo_id=HF_MODEL,
|
105 |
+
repo_type="model",
|
106 |
+
token=os.environ.get("HUGGINGFACE_HUB_TOKEN"),
|
107 |
+
)
|
108 |
+
logging.info(f"✅ Uploaded video: {video_hf_path}")
|
109 |
+
|
110 |
+
# Upload summary
|
111 |
+
summary_file = os.path.join(tempfile.gettempdir(), "summary.txt")
|
112 |
+
with open(summary_file, "w", encoding="utf-8") as f:
|
113 |
+
f.write(summary_text)
|
114 |
+
|
115 |
+
summary_hf_path = f"{hf_folder}/summary.txt"
|
116 |
+
upload_file(
|
117 |
+
path_or_fileobj=summary_file,
|
118 |
+
path_in_repo=summary_hf_path,
|
119 |
+
repo_id=HF_MODEL,
|
120 |
+
repo_type="model",
|
121 |
+
token=os.environ.get("HUGGINGFACE_HUB_TOKEN"),
|
122 |
+
)
|
123 |
+
logging.info(f"✅ Uploaded summary: {summary_hf_path}")
|
124 |
+
|
125 |
+
return hf_folder
|
126 |
+
|
127 |
+
|
128 |
+
def save_video_ffmpeg(frames: list, video_path: str, fps: int = FIXED_FPS):
|
129 |
+
h, w, c = frames[0].shape
|
130 |
+
process = (
|
131 |
+
ffmpeg
|
132 |
+
.input(
|
133 |
+
'pipe:', format='rawvideo', pix_fmt='rgb24',
|
134 |
+
s=f'{w}x{h}', framerate=fps
|
135 |
+
)
|
136 |
+
.output(
|
137 |
+
video_path,
|
138 |
+
pix_fmt='yuv420p',
|
139 |
+
vcodec='libx264',
|
140 |
+
crf=18,
|
141 |
+
preset='slow'
|
142 |
+
)
|
143 |
+
.overwrite_output()
|
144 |
+
.run_async(pipe_stdin=True)
|
145 |
+
)
|
146 |
+
for frame in frames:
|
147 |
+
process.stdin.write(frame.astype(np.uint8).tobytes())
|
148 |
+
process.stdin.close()
|
149 |
+
process.wait()
|
150 |
+
logging.info(f"✅ Video saved to {video_path}")
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
def upload_to_hf0(video_path, summary_text):
|
155 |
api = HfApi()
|
156 |
|
157 |
# Create a date-based folder (YYYY-MM-DD)
|
|
|
207 |
return steps * 15
|
208 |
|
209 |
@spaces.GPU(duration=get_duration)
|
|
|
210 |
def generate_video(
|
211 |
prompt,
|
212 |
negative_prompt=default_negative_prompt,
|
|
|
237 |
).frames[0]
|
238 |
|
239 |
|
240 |
+
|
241 |
+
video_path = os.path.join(tempfile.gettempdir(), f"video_{current_seed}.mp4")
|
242 |
+
save_video_ffmpeg(output_frames_list, video_path, fps=FIXED_FPS)
|
243 |
|
244 |
|
245 |
+
hf_folder = upload_to_hf(video_path, summary_text=prompt)
|
246 |
+
logging.info(f"✅ Uploaded folder: {hf_folder}")
|
|
|
|
|
|
|
247 |
|
248 |
return video_path, current_seed
|
249 |
|