Cleanup
Browse files
app.py
CHANGED
|
@@ -24,8 +24,9 @@ LANDSCAPE_HEIGHT = 480
|
|
| 24 |
MAX_SEED = np.iinfo(np.int32).max
|
| 25 |
|
| 26 |
FIXED_FPS = 24
|
| 27 |
-
MIN_FRAMES_MODEL =
|
| 28 |
-
MAX_FRAMES_MODEL =
|
|
|
|
| 29 |
|
| 30 |
|
| 31 |
pipe = WanImageToVideoPipeline.from_pretrained(MODEL_ID,
|
|
@@ -89,15 +90,18 @@ def get_duration(
|
|
| 89 |
randomize_seed,
|
| 90 |
progress,
|
| 91 |
):
|
| 92 |
-
|
|
|
|
|
|
|
|
|
|
| 93 |
|
| 94 |
@spaces.GPU(duration=get_duration)
|
| 95 |
def generate_video(
|
| 96 |
input_image,
|
| 97 |
prompt,
|
| 98 |
negative_prompt=default_negative_prompt,
|
| 99 |
-
num_frames =
|
| 100 |
-
guidance_scale =
|
| 101 |
steps = 28,
|
| 102 |
seed = 42,
|
| 103 |
randomize_seed = False,
|
|
@@ -172,14 +176,14 @@ with gr.Blocks() as demo:
|
|
| 172 |
with gr.Column():
|
| 173 |
input_image_component = gr.Image(type="pil", label="Input Image (auto-resized to target H/W)")
|
| 174 |
prompt_input = gr.Textbox(label="Prompt", value=default_prompt_i2v)
|
| 175 |
-
num_frames_input = gr.Slider(minimum=MIN_FRAMES_MODEL, maximum=MAX_FRAMES_MODEL, step=1, value=
|
| 176 |
|
| 177 |
with gr.Accordion("Advanced Settings", open=False):
|
| 178 |
negative_prompt_input = gr.Textbox(label="Negative Prompt", value=default_negative_prompt, lines=3)
|
| 179 |
seed_input = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=42, interactive=True)
|
| 180 |
randomize_seed_checkbox = gr.Checkbox(label="Randomize seed", value=True, interactive=True)
|
| 181 |
steps_slider = gr.Slider(minimum=1, maximum=40, step=1, value=28, label="Inference Steps")
|
| 182 |
-
guidance_scale_input = gr.Slider(minimum=
|
| 183 |
|
| 184 |
generate_button = gr.Button("Generate Video", variant="primary")
|
| 185 |
with gr.Column():
|
|
|
|
| 24 |
MAX_SEED = np.iinfo(np.int32).max
|
| 25 |
|
| 26 |
FIXED_FPS = 24
|
| 27 |
+
MIN_FRAMES_MODEL = 13
|
| 28 |
+
MAX_FRAMES_MODEL = 121
|
| 29 |
+
NUM_FRAMES_DEFAULT = 81
|
| 30 |
|
| 31 |
|
| 32 |
pipe = WanImageToVideoPipeline.from_pretrained(MODEL_ID,
|
|
|
|
| 90 |
randomize_seed,
|
| 91 |
progress,
|
| 92 |
):
|
| 93 |
+
forward_duration_base = 8
|
| 94 |
+
forward_duration = forward_duration_base * (num_frames / NUM_FRAMES_DEFAULT)**1.5
|
| 95 |
+
forward_count = 2 if guidance_scale > 1 else 1
|
| 96 |
+
return 10 + steps * forward_count * forward_duration
|
| 97 |
|
| 98 |
@spaces.GPU(duration=get_duration)
|
| 99 |
def generate_video(
|
| 100 |
input_image,
|
| 101 |
prompt,
|
| 102 |
negative_prompt=default_negative_prompt,
|
| 103 |
+
num_frames = NUM_FRAMES_DEFAULT,
|
| 104 |
+
guidance_scale = 1,
|
| 105 |
steps = 28,
|
| 106 |
seed = 42,
|
| 107 |
randomize_seed = False,
|
|
|
|
| 176 |
with gr.Column():
|
| 177 |
input_image_component = gr.Image(type="pil", label="Input Image (auto-resized to target H/W)")
|
| 178 |
prompt_input = gr.Textbox(label="Prompt", value=default_prompt_i2v)
|
| 179 |
+
num_frames_input = gr.Slider(minimum=MIN_FRAMES_MODEL, maximum=MAX_FRAMES_MODEL, step=1, value=NUM_FRAMES_DEFAULT, label="Frames")
|
| 180 |
|
| 181 |
with gr.Accordion("Advanced Settings", open=False):
|
| 182 |
negative_prompt_input = gr.Textbox(label="Negative Prompt", value=default_negative_prompt, lines=3)
|
| 183 |
seed_input = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=42, interactive=True)
|
| 184 |
randomize_seed_checkbox = gr.Checkbox(label="Randomize seed", value=True, interactive=True)
|
| 185 |
steps_slider = gr.Slider(minimum=1, maximum=40, step=1, value=28, label="Inference Steps")
|
| 186 |
+
guidance_scale_input = gr.Slider(minimum=1.0, maximum=20.0, step=0.5, value=1.0, label="Guidance Scale")
|
| 187 |
|
| 188 |
generate_button = gr.Button("Generate Video", variant="primary")
|
| 189 |
with gr.Column():
|