xi0v Fabrice-TIERCELIN commited on
Commit
a79f40e
1 Parent(s): c8b4b1d

Choose the frame format (#11)

Browse files

- Choose the frame format (ffd4ed8bb7f89e3ce340694c0dc6cb9206079efc)


Co-authored-by: Fabrice TIERCELIN <[email protected]>

Files changed (1) hide show
  1. app.py +6 -5
app.py CHANGED
@@ -6,10 +6,9 @@ from pathlib import Path
6
  from typing import Optional
7
 
8
  from diffusers import StableVideoDiffusionPipeline
9
- from diffusers.utils import load_image, export_to_video
10
  from PIL import Image
11
 
12
- import uuid
13
  import random
14
  import spaces
15
 
@@ -29,6 +28,7 @@ def sample(
29
  fps_id: int = 6,
30
  noise_aug_strength: float = 0.1,
31
  decoding_t: int = 3,
 
32
  version: str = "svd_xt",
33
  device: str = "cuda",
34
  output_folder: str = "outputs",
@@ -36,7 +36,7 @@ def sample(
36
  if image.mode == "RGBA":
37
  image = image.convert("RGB")
38
 
39
- if(randomize_seed):
40
  seed = random.randint(0, max_64_bit_int)
41
  generator = torch.manual_seed(seed)
42
 
@@ -47,7 +47,7 @@ def sample(
47
  frames = pipe(image, decode_chunk_size=decoding_t, generator=generator, motion_bucket_id=motion_bucket_id, noise_aug_strength=noise_aug_strength, num_frames=25).frames[0]
48
  export_to_video(frames, video_path, fps=fps_id)
49
 
50
- return video_path, frames, seed
51
 
52
  def resize_image(image, output_size=(1024, 576)):
53
  # Calculate aspect ratios
@@ -96,6 +96,7 @@ with gr.Blocks() as demo:
96
  motion_bucket_id = gr.Slider(label="Motion bucket id", info="Controls how much motion to add/remove from the image", value=127, minimum=1, maximum=255)
97
  noise_aug_strength = gr.Slider(label="Noise strength", info="The noise to add", value=0.1, minimum=0, maximum=1, step=0.1)
98
  decoding_t = gr.Slider(label="Decoding", info="Number of frames decoded at a time; this eats more VRAM; reduce if necessary", value=3, minimum=1, maximum=5, step=1)
 
99
  seed = gr.Slider(label="Seed", value=42, randomize=True, minimum=0, maximum=max_64_bit_int, step=1)
100
  randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
101
 
@@ -106,7 +107,7 @@ with gr.Blocks() as demo:
106
  gallery = gr.Gallery(label="Generated frames")
107
 
108
  image.upload(fn=resize_image, inputs=image, outputs=image, queue=False)
109
- generate_btn.click(fn=sample, inputs=[image, seed, randomize_seed, motion_bucket_id, fps_id, noise_aug_strength, decoding_t], outputs=[video, gallery, seed], api_name="video")
110
 
111
  if __name__ == "__main__":
112
  demo.launch(share=True, show_api=False)
 
6
  from typing import Optional
7
 
8
  from diffusers import StableVideoDiffusionPipeline
9
+ from diffusers.utils import export_to_video
10
  from PIL import Image
11
 
 
12
  import random
13
  import spaces
14
 
 
28
  fps_id: int = 6,
29
  noise_aug_strength: float = 0.1,
30
  decoding_t: int = 3,
31
+ frame_format: str = "webp",
32
  version: str = "svd_xt",
33
  device: str = "cuda",
34
  output_folder: str = "outputs",
 
36
  if image.mode == "RGBA":
37
  image = image.convert("RGB")
38
 
39
+ if randomize_seed:
40
  seed = random.randint(0, max_64_bit_int)
41
  generator = torch.manual_seed(seed)
42
 
 
47
  frames = pipe(image, decode_chunk_size=decoding_t, generator=generator, motion_bucket_id=motion_bucket_id, noise_aug_strength=noise_aug_strength, num_frames=25).frames[0]
48
  export_to_video(frames, video_path, fps=fps_id)
49
 
50
+ return video_path, gr.update(label="Generated frames in *." + frame_format + " format", format = frame_format, value = frames), seed
51
 
52
  def resize_image(image, output_size=(1024, 576)):
53
  # Calculate aspect ratios
 
96
  motion_bucket_id = gr.Slider(label="Motion bucket id", info="Controls how much motion to add/remove from the image", value=127, minimum=1, maximum=255)
97
  noise_aug_strength = gr.Slider(label="Noise strength", info="The noise to add", value=0.1, minimum=0, maximum=1, step=0.1)
98
  decoding_t = gr.Slider(label="Decoding", info="Number of frames decoded at a time; this eats more VRAM; reduce if necessary", value=3, minimum=1, maximum=5, step=1)
99
+ frame_format = gr.Radio([["*.png", "png"], ["*.webp", "webp"], ["*.jpeg", "jpeg"], ["*.gif", "gif"], ["*.bmp", "bmp"]], label="Image format for result", info="File extention", value="webp", interactive=True)
100
  seed = gr.Slider(label="Seed", value=42, randomize=True, minimum=0, maximum=max_64_bit_int, step=1)
101
  randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
102
 
 
107
  gallery = gr.Gallery(label="Generated frames")
108
 
109
  image.upload(fn=resize_image, inputs=image, outputs=image, queue=False)
110
+ generate_btn.click(fn=sample, inputs=[image, seed, randomize_seed, motion_bucket_id, fps_id, noise_aug_strength, decoding_t, frame_format], outputs=[video, gallery, seed], api_name="video")
111
 
112
  if __name__ == "__main__":
113
  demo.launch(share=True, show_api=False)