Spaces:
Runtime error
Runtime error
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 |
|