Linoy Tsaban commited on
Commit
68aadbb
1 Parent(s): 5a5e0bc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -39
app.py CHANGED
@@ -1,5 +1,10 @@
 
1
  import torch
2
  from diffusers import StableDiffusionPipeline, DDIMScheduler
 
 
 
 
3
 
4
 
5
 
@@ -9,45 +14,59 @@ model_id = "stabilityai/stable-diffusion-2-1-base"
9
  inv_pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to(device)
10
  inv_pipe.scheduler = DDIMScheduler.from_pretrained(model_id, subfolder="scheduler")
11
 
12
-
13
- def preprocess(data_path:str = 'examples/woman-running.mp4',
14
- height:int = 512,
15
- weidth: int = 512,
16
- # save_dir: str = "latents",
17
- steps: int = 500,
18
- batch_size: int = 8,
19
- save_steps: int = 50,
20
- n_frames: int = 40,
21
- inversion_prompt:str = ''
 
 
 
 
 
 
 
 
 
22
  ):
 
 
23
 
24
- # save_video_frames(data_path, img_size=(height, weidth))
25
- frames = video_to_frames(data_path, img_size=(height, weidth))
26
- # data_path = os.path.join('data', Path(video_path).stem)
27
-
28
- toy_scheduler = DDIMScheduler.from_pretrained(model_id, subfolder="scheduler")
29
- toy_scheduler.set_timesteps(save_steps)
30
- timesteps_to_save, num_inference_steps = get_timesteps(toy_scheduler, num_inference_steps=save_steps,
31
- strength=1.0,
32
- device=device)
33
- seed_everything(1)
34
 
35
- frames, latents = get_data(inv_pipe, frames, n_frames)
36
- # inverted_latents = noisy_latents
37
- inverted_latents = extract_latents(inv_pipe, num_steps = steps,
38
- latent_frames = latents,
39
- batch_size = batch_size,
40
- timesteps_to_save = timesteps_to_save,
41
- inversion_prompt = inversion_prompt,)
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
 
 
44
 
45
 
46
 
47
- return frames, latents, inverted_latents
48
-
49
- import gradio as gr
50
-
51
  ########
52
  # demo #
53
  ########
@@ -64,7 +83,10 @@ intro = """
64
  with gr.Blocks(css="style.css") as demo:
65
 
66
  gr.HTML(intro)
67
-
 
 
 
68
 
69
  with gr.Row():
70
  input_vid = gr.Video(label="Input Video", interactive=True, elem_id="input_video")
@@ -79,16 +101,57 @@ with gr.Blocks(css="style.css") as demo:
79
  # share_button = gr.Button("Share to community", elem_id="share-btn", visible=True)
80
 
81
 
82
- with gr.Row():
83
- inversion_progress = gr.Textbox(visible=False, label="Inversion progress")
84
-
85
-
86
-
87
  with gr.Row():
88
  run_button = gr.Button("Edit your video!", visible=True)
89
-
90
 
91
- # with gr.Accordion("Advanced Options", open=False):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
 
94
 
 
1
+ import gradio as gr
2
  import torch
3
  from diffusers import StableDiffusionPipeline, DDIMScheduler
4
+ from utils import *
5
+
6
+
7
+
8
 
9
 
10
 
 
14
  inv_pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to(device)
15
  inv_pipe.scheduler = DDIMScheduler.from_pretrained(model_id, subfolder="scheduler")
16
 
17
+ def randomize_seed_fn():
18
+ seed = random.randint(0, np.iinfo(np.int32).max)
19
+ return seed
20
+
21
+ def preprocess_and_invert(video,
22
+ frames,
23
+ latents,
24
+ inverted_latents,
25
+ seed,
26
+ randomize_seed,
27
+ do_inversion,
28
+ height:int = 512,
29
+ weidth: int = 512,
30
+ # save_dir: str = "latents",
31
+ steps: int = 500,
32
+ batch_size: int = 8,
33
+ # save_steps: int = 50,
34
+ n_frames: int = 40,
35
+ inversion_prompt:str = ''
36
  ):
37
+
38
+ if do_inversion or randomize_seed:
39
 
40
+ # save_video_frames(data_path, img_size=(height, weidth))
41
+ frames = video_to_frames(video, img_size=(height, weidth))
42
+ # data_path = os.path.join('data', Path(video_path).stem)
 
 
 
 
 
 
 
43
 
44
+ toy_scheduler = DDIMScheduler.from_pretrained(model_id, subfolder="scheduler")
45
+ toy_scheduler.set_timesteps(save_steps)
46
+ timesteps_to_save, num_inference_steps = get_timesteps(toy_scheduler, num_inference_steps=save_steps,
47
+ strength=1.0,
48
+ device=device)
49
+ if randomize_seed:
50
+ seed = randomize_seed_fn()
51
+ seed_everything(seed)
52
+
53
+ frames, latents = get_data(inv_pipe, frames, n_frames)
54
+
55
+ inverted_latents = extract_latents(inv_pipe, num_steps = steps,
56
+ latent_frames = latents,
57
+ batch_size = batch_size,
58
+ timesteps_to_save = timesteps_to_save,
59
+ inversion_prompt = inversion_prompt,)
60
+ frames = gr.State(value=frames)
61
+ latents = gr.State(value=latents)
62
+ inverted_latents = gr.State(value=inverted_latents)
63
+ do_inversion = False
64
 
65
 
66
+ return frames, latents, inverted_latents, do_inversion
67
 
68
 
69
 
 
 
 
 
70
  ########
71
  # demo #
72
  ########
 
83
  with gr.Blocks(css="style.css") as demo:
84
 
85
  gr.HTML(intro)
86
+ frames = gr.State()
87
+ inverted_latents = gr.State()
88
+ latents = gr.State()
89
+ do_inversion = gr.State(value=True)
90
 
91
  with gr.Row():
92
  input_vid = gr.Video(label="Input Video", interactive=True, elem_id="input_video")
 
101
  # share_button = gr.Button("Share to community", elem_id="share-btn", visible=True)
102
 
103
 
104
+ # with gr.Row():
105
+ # inversion_progress = gr.Textbox(visible=False, label="Inversion progress")
106
+
 
 
107
  with gr.Row():
108
  run_button = gr.Button("Edit your video!", visible=True)
 
109
 
110
+ with gr.Accordion("Advanced Options", open=False):
111
+ with gr.Tabs() as tabs:
112
+
113
+ with gr.TabItem('General options', id=2):
114
+ with gr.Row():
115
+ with gr.Column(min_width=100):
116
+ seed = gr.Number(value=0, precision=0, label="Seed", interactive=True)
117
+ randomize_seed = gr.Checkbox(label='Randomize seed', value=False)
118
+ steps = gr.Slider(label='Inversion steps', minimum=100, maximum=500,
119
+ value=500, step=1, interactive=True)
120
+ with gr.Column(min_width=100):
121
+ inversion_prompt = gr.Textbox(lines=1, label="Inversion prompt", interactive=True, placeholder="")
122
+ batch_size = gr.Slider(label='Batch size', minimum=1, maximum=10,
123
+ value=8, step=1, interactive=True)
124
+ n_frames = gr.Slider(label='Num frames', minimum=20, maximum=200,
125
+ value=40, step=1, interactive=True)
126
+
127
+ input_vid.change(
128
+ fn = reset_do_inversion,
129
+ outputs = [do_inversion],
130
+ queue = False)
131
+
132
+ input_vid.upload(
133
+ fn = reset_do_inversion,
134
+ outputs = [do_inversion],
135
+ queue = False)
136
+ ).then(fn = preprocess_and_invert,
137
+ inputs = [input_vid,
138
+ frames,
139
+ latents,
140
+ inverted_latents,
141
+ seed,
142
+ randomize_seed,
143
+ do_inversion,
144
+ steps,
145
+ batch_size,
146
+ n_frames,
147
+ inversion_prompt
148
+ ],
149
+ outputs = [frames,
150
+ latents,
151
+ inverted_latents,
152
+ do_inversion
153
+
154
+ ])
155
 
156
 
157