Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -170,31 +170,41 @@ def infer(image, width=1024, height=1024, overlap_width=18, num_inference_steps=
|
|
170 |
|
171 |
yield background, cnet_image
|
172 |
|
173 |
-
def
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
#
|
185 |
-
|
186 |
-
crop_w = int(w * (1 - progress) + smaller_frame.shape[1] * progress)
|
187 |
|
188 |
-
#
|
189 |
-
|
190 |
-
|
191 |
-
|
|
|
192 |
|
193 |
-
#
|
194 |
-
|
195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
|
197 |
-
return
|
198 |
|
199 |
def create_video_from_images(image_list, fps=4):
|
200 |
if not image_list:
|
@@ -216,12 +226,17 @@ def create_video_from_images(image_list, fps=4):
|
|
216 |
|
217 |
@spaces.GPU(duration=70)
|
218 |
def loop_outpainting(image, width=1024, height=1024, overlap_width=18, num_inference_steps=8,
|
219 |
-
resize_option="custom", custom_resize_size=
|
220 |
-
alignment="Middle", num_iterations=18, fps=6, num_interpolation_frames=
|
221 |
progress=gr.Progress()):
|
222 |
-
image_list = [image]
|
223 |
current_image = image
|
224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
225 |
for _ in progress.tqdm(range(num_iterations), desc="Generating frames"):
|
226 |
# Generate new image
|
227 |
for step_result in infer(current_image, width, height, overlap_width, num_inference_steps,
|
@@ -242,7 +257,7 @@ def loop_outpainting(image, width=1024, height=1024, overlap_width=18, num_infer
|
|
242 |
for i in range(len(reverse_image_list) - 1):
|
243 |
larger_frame = reverse_image_list[i]
|
244 |
smaller_frame = reverse_image_list[i + 1]
|
245 |
-
interpolated_frames =
|
246 |
final_frame_list.extend(interpolated_frames)
|
247 |
|
248 |
# Add the last frame
|
@@ -368,10 +383,10 @@ with gr.Blocks(css=css) as demo:
|
|
368 |
visible=False
|
369 |
)
|
370 |
with gr.Row():
|
371 |
-
num_iterations = gr.Slider(label="Number of iterations", minimum=2, maximum=24, step=1, value=
|
372 |
fps = gr.Slider(label="fps", minimum=1, maximum=24, value=8)
|
373 |
with gr.Row():
|
374 |
-
num_interpolation_frames = gr.Slider(label="Interpolation frames", minimum=0, maximum=10, step=1, value=
|
375 |
|
376 |
with gr.Column():
|
377 |
result = ImageSlider(
|
|
|
170 |
|
171 |
yield background, cnet_image
|
172 |
|
173 |
+
def create_zoom_animation(previous_frame, next_frame, steps):
|
174 |
+
|
175 |
+
# List to store all frames
|
176 |
+
interpolated_frames = []
|
177 |
+
|
178 |
+
for i in range(steps + 1):
|
179 |
+
t = i / steps # Normalized time between 0 and 1
|
180 |
+
|
181 |
+
# Compute zoom factor (from 1 to 2)
|
182 |
+
z = 1 + t # Zoom factor increases from 1 to 2
|
183 |
+
|
184 |
+
# Compute crop size
|
185 |
+
crop_size = int(1024 / z)
|
|
|
186 |
|
187 |
+
# Compute crop coordinates to center the crop
|
188 |
+
x0 = (1024 - crop_size) // 2
|
189 |
+
y0 = (1024 - crop_size) // 2
|
190 |
+
x1 = x0 + crop_size
|
191 |
+
y1 = y0 + crop_size
|
192 |
|
193 |
+
# Crop the previous_frame
|
194 |
+
cropped_prev = previous_frame.crop((x0, y0, x1, y1))
|
195 |
+
# Resize to 512x512
|
196 |
+
resized_prev = cropped_prev.resize((512, 512), Image.LANCZOS)
|
197 |
+
|
198 |
+
# For the last frame, use the next_frame resized to 512x512
|
199 |
+
if i == steps:
|
200 |
+
resized_frame = next_frame.resize((512, 512), Image.LANCZOS)
|
201 |
+
else:
|
202 |
+
resized_frame = resized_prev
|
203 |
+
|
204 |
+
# Append the resized frame to the list
|
205 |
+
interpolated_frames.append(resized_frame)
|
206 |
|
207 |
+
return interpolated_frames
|
208 |
|
209 |
def create_video_from_images(image_list, fps=4):
|
210 |
if not image_list:
|
|
|
226 |
|
227 |
@spaces.GPU(duration=70)
|
228 |
def loop_outpainting(image, width=1024, height=1024, overlap_width=18, num_inference_steps=8,
|
229 |
+
resize_option="custom", custom_resize_size=512, prompt_input=None,
|
230 |
+
alignment="Middle", num_iterations=18, fps=6, num_interpolation_frames=10,
|
231 |
progress=gr.Progress()):
|
|
|
232 |
current_image = image
|
233 |
+
if(current_image.width != 1024 or current_image.height != 1024):
|
234 |
+
for first_result in infer(current_image, 1024, 1024, overlap_width, num_inference_steps,
|
235 |
+
resize_option, 1024, prompt_input, alignment):
|
236 |
+
pass
|
237 |
+
current_image = first_result[1]
|
238 |
+
|
239 |
+
image_list = [current_image]
|
240 |
for _ in progress.tqdm(range(num_iterations), desc="Generating frames"):
|
241 |
# Generate new image
|
242 |
for step_result in infer(current_image, width, height, overlap_width, num_inference_steps,
|
|
|
257 |
for i in range(len(reverse_image_list) - 1):
|
258 |
larger_frame = reverse_image_list[i]
|
259 |
smaller_frame = reverse_image_list[i + 1]
|
260 |
+
interpolated_frames = create_zoom_animation(larger_frame, smaller_frame, num_interpolation_frames)
|
261 |
final_frame_list.extend(interpolated_frames)
|
262 |
|
263 |
# Add the last frame
|
|
|
383 |
visible=False
|
384 |
)
|
385 |
with gr.Row():
|
386 |
+
num_iterations = gr.Slider(label="Number of iterations", minimum=2, maximum=24, step=1, value=6)
|
387 |
fps = gr.Slider(label="fps", minimum=1, maximum=24, value=8)
|
388 |
with gr.Row():
|
389 |
+
num_interpolation_frames = gr.Slider(label="Interpolation frames", minimum=0, maximum=10, step=1, value=10)
|
390 |
|
391 |
with gr.Column():
|
392 |
result = ImageSlider(
|