Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Update app.py
Browse files
app.py
CHANGED
@@ -50,7 +50,6 @@ def _resize_image(image_path: str, target_size: Tuple[int, int]) -> str:
|
|
50 |
with Image.open(image_path) as img:
|
51 |
if img.size == target_size:
|
52 |
return image_path
|
53 |
-
gr.Info(f"Resizing image to {target_size[0]}x{target_size[1]} to match previous video.")
|
54 |
resized_img = img.resize(target_size, Image.Resampling.LANCZOS)
|
55 |
suffix = os.path.splitext(image_path)[1] or ".png"
|
56 |
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp_file:
|
@@ -59,7 +58,6 @@ def _resize_image(image_path: str, target_size: Tuple[int, int]) -> str:
|
|
59 |
|
60 |
def _trim_first_frame_fast(video_path: str) -> str:
|
61 |
"""Removes exactly the first frame of a video without re-encoding."""
|
62 |
-
gr.Info("Preparing video segment...")
|
63 |
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp_output_file:
|
64 |
output_path = tmp_output_file.name
|
65 |
try:
|
@@ -78,7 +76,6 @@ def _trim_first_frame_fast(video_path: str) -> str:
|
|
78 |
|
79 |
def _combine_videos_simple(video1_path: str, video2_path: str) -> str:
|
80 |
"""Combines two videos using the fast concat demuxer."""
|
81 |
-
gr.Info("Stitching videos...")
|
82 |
with tempfile.NamedTemporaryFile(delete=False, mode='w', suffix=".txt") as tmp_list_file:
|
83 |
tmp_list_file.write(f"file '{os.path.abspath(video1_path)}'\n")
|
84 |
tmp_list_file.write(f"file '{os.path.abspath(video2_path)}'\n")
|
@@ -101,7 +98,6 @@ def _combine_videos_simple(video1_path: str, video2_path: str) -> str:
|
|
101 |
|
102 |
def _generate_video_segment(input_image_path: str, output_image_path: str, prompt: str, token: str) -> str:
|
103 |
"""Generates a single video segment using the external service."""
|
104 |
-
gr.Info("Generating new video segment...")
|
105 |
video_client = Client("multimodalart/wan-2-2-first-last-frame", hf_token=token)
|
106 |
result = video_client.predict(
|
107 |
start_image_pil=handle_file(input_image_path),
|
@@ -195,7 +191,7 @@ with gr.Blocks(theme=gr.themes.Citrus(), css=css) as demo:
|
|
195 |
use_image_button = gr.Button("♻️ Use this Image for Next Edit", variant="primary")
|
196 |
with gr.Row():
|
197 |
create_video_button = gr.Button("Create a video between the two images 🎥", variant="secondary", visible=False)
|
198 |
-
extend_video_button = gr.Button("Extend video with new scene 🎞️", variant="secondary", visible=False)
|
199 |
with gr.Group(visible=False) as video_group:
|
200 |
video_output = gr.Video(label="Generated Video", show_download_button=True, autoplay=True)
|
201 |
gr.Markdown("Generate more with [Wan 2.2 first-last-frame](https://huggingface.co/spaces/multimodalart/wan-2-2-first-last-frame)", elem_id="wan_ad")
|
|
|
50 |
with Image.open(image_path) as img:
|
51 |
if img.size == target_size:
|
52 |
return image_path
|
|
|
53 |
resized_img = img.resize(target_size, Image.Resampling.LANCZOS)
|
54 |
suffix = os.path.splitext(image_path)[1] or ".png"
|
55 |
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp_file:
|
|
|
58 |
|
59 |
def _trim_first_frame_fast(video_path: str) -> str:
|
60 |
"""Removes exactly the first frame of a video without re-encoding."""
|
|
|
61 |
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp_output_file:
|
62 |
output_path = tmp_output_file.name
|
63 |
try:
|
|
|
76 |
|
77 |
def _combine_videos_simple(video1_path: str, video2_path: str) -> str:
|
78 |
"""Combines two videos using the fast concat demuxer."""
|
|
|
79 |
with tempfile.NamedTemporaryFile(delete=False, mode='w', suffix=".txt") as tmp_list_file:
|
80 |
tmp_list_file.write(f"file '{os.path.abspath(video1_path)}'\n")
|
81 |
tmp_list_file.write(f"file '{os.path.abspath(video2_path)}'\n")
|
|
|
98 |
|
99 |
def _generate_video_segment(input_image_path: str, output_image_path: str, prompt: str, token: str) -> str:
|
100 |
"""Generates a single video segment using the external service."""
|
|
|
101 |
video_client = Client("multimodalart/wan-2-2-first-last-frame", hf_token=token)
|
102 |
result = video_client.predict(
|
103 |
start_image_pil=handle_file(input_image_path),
|
|
|
191 |
use_image_button = gr.Button("♻️ Use this Image for Next Edit", variant="primary")
|
192 |
with gr.Row():
|
193 |
create_video_button = gr.Button("Create a video between the two images 🎥", variant="secondary", visible=False)
|
194 |
+
extend_video_button = gr.Button("Extend existing video with new scene 🎞️", variant="secondary", visible=False)
|
195 |
with gr.Group(visible=False) as video_group:
|
196 |
video_output = gr.Video(label="Generated Video", show_download_button=True, autoplay=True)
|
197 |
gr.Markdown("Generate more with [Wan 2.2 first-last-frame](https://huggingface.co/spaces/multimodalart/wan-2-2-first-last-frame)", elem_id="wan_ad")
|