Fix progress bar not showing in .then() chain by threading video_output through all pipeline phases
Browse files
app.py
CHANGED
|
@@ -333,20 +333,21 @@ def generate_cpu(audio_file: str, style_name: str, cover_art: str | None,
|
|
| 333 |
|
| 334 |
progress(0.45, desc="CPU steps done, requesting GPU...")
|
| 335 |
# Return state for GPU phases (all values must be picklable strings)
|
| 336 |
-
|
|
|
|
| 337 |
|
| 338 |
|
| 339 |
-
def generate_images(run_dir_str: str, style_name: str, step_num_str: str,
|
| 340 |
cover_art: str, progress=gr.Progress()):
|
| 341 |
"""GPU phase: step 6 — generate images. Gets a fresh ZeroGPU token."""
|
| 342 |
step_num = int(step_num_str)
|
| 343 |
if step_num <= 7:
|
| 344 |
progress(0.50, desc="Generating images...")
|
| 345 |
_gpu_generate_images(run_dir_str, style_name)
|
| 346 |
-
return run_dir_str, style_name, step_num_str, cover_art
|
| 347 |
|
| 348 |
|
| 349 |
-
def generate_videos(run_dir_str: str, style_name: str, step_num_str: str,
|
| 350 |
cover_art: str, progress=gr.Progress()):
|
| 351 |
"""GPU phase: step 7 — generate video clips, one per GPU session."""
|
| 352 |
step_num = int(step_num_str)
|
|
@@ -373,7 +374,7 @@ def generate_videos(run_dir_str: str, style_name: str, step_num_str: str,
|
|
| 373 |
pass
|
| 374 |
|
| 375 |
print(f"All {len(segments)} video clips generated.")
|
| 376 |
-
return run_dir_str, cover_art
|
| 377 |
|
| 378 |
|
| 379 |
def generate_assembly(run_dir_str: str, cover_art: str, progress=gr.Progress()):
|
|
@@ -387,7 +388,7 @@ def generate_assembly(run_dir_str: str, cover_art: str, progress=gr.Progress()):
|
|
| 387 |
cover_art=cover)
|
| 388 |
|
| 389 |
progress(1.0, desc="Done!")
|
| 390 |
-
return str(final_path), run_dir_str, gr.update(
|
| 391 |
|
| 392 |
|
| 393 |
def reshuffle(run_dir_str: str, cover_art: str | None, progress=gr.Progress()):
|
|
@@ -704,7 +705,7 @@ with gr.Blocks(
|
|
| 704 |
|
| 705 |
generate_btn = gr.Button("Generate Video", variant="primary")
|
| 706 |
video_output = gr.Video(label="Generated Music Video")
|
| 707 |
-
reshuffle_btn = gr.Button("Reshuffle", variant="secondary", visible=False)
|
| 708 |
last_run_dir = gr.State(value="")
|
| 709 |
|
| 710 |
# Hidden state for passing data between chained pipeline phases
|
|
@@ -740,15 +741,15 @@ with gr.Blocks(
|
|
| 740 |
fn=generate_cpu,
|
| 741 |
inputs=[audio_input, style_dropdown,
|
| 742 |
cover_art_input, run_mode, existing_run, start_step, reuse_files],
|
| 743 |
-
outputs=[_st_run_dir, _st_style, _st_step, _st_cover],
|
| 744 |
).then(
|
| 745 |
fn=generate_images,
|
| 746 |
-
inputs=[_st_run_dir, _st_style, _st_step, _st_cover],
|
| 747 |
-
outputs=[_st_run_dir, _st_style, _st_step, _st_cover],
|
| 748 |
).then(
|
| 749 |
fn=generate_videos,
|
| 750 |
-
inputs=[_st_run_dir, _st_style, _st_step, _st_cover],
|
| 751 |
-
outputs=[_st_run_dir, _st_cover],
|
| 752 |
).then(
|
| 753 |
fn=generate_assembly,
|
| 754 |
inputs=[_st_run_dir, _st_cover],
|
|
|
|
| 333 |
|
| 334 |
progress(0.45, desc="CPU steps done, requesting GPU...")
|
| 335 |
# Return state for GPU phases (all values must be picklable strings)
|
| 336 |
+
# gr.update() for video_output keeps it unchanged but gives progress bar a visible target
|
| 337 |
+
return gr.update(), str(run_dir), style_name, str(step_num), cover_art or ""
|
| 338 |
|
| 339 |
|
| 340 |
+
def generate_images(video_out, run_dir_str: str, style_name: str, step_num_str: str,
|
| 341 |
cover_art: str, progress=gr.Progress()):
|
| 342 |
"""GPU phase: step 6 — generate images. Gets a fresh ZeroGPU token."""
|
| 343 |
step_num = int(step_num_str)
|
| 344 |
if step_num <= 7:
|
| 345 |
progress(0.50, desc="Generating images...")
|
| 346 |
_gpu_generate_images(run_dir_str, style_name)
|
| 347 |
+
return gr.update(), run_dir_str, style_name, step_num_str, cover_art
|
| 348 |
|
| 349 |
|
| 350 |
+
def generate_videos(video_out, run_dir_str: str, style_name: str, step_num_str: str,
|
| 351 |
cover_art: str, progress=gr.Progress()):
|
| 352 |
"""GPU phase: step 7 — generate video clips, one per GPU session."""
|
| 353 |
step_num = int(step_num_str)
|
|
|
|
| 374 |
pass
|
| 375 |
|
| 376 |
print(f"All {len(segments)} video clips generated.")
|
| 377 |
+
return gr.update(), run_dir_str, cover_art
|
| 378 |
|
| 379 |
|
| 380 |
def generate_assembly(run_dir_str: str, cover_art: str, progress=gr.Progress()):
|
|
|
|
| 388 |
cover_art=cover)
|
| 389 |
|
| 390 |
progress(1.0, desc="Done!")
|
| 391 |
+
return str(final_path), run_dir_str, gr.update(interactive=True)
|
| 392 |
|
| 393 |
|
| 394 |
def reshuffle(run_dir_str: str, cover_art: str | None, progress=gr.Progress()):
|
|
|
|
| 705 |
|
| 706 |
generate_btn = gr.Button("Generate Video", variant="primary")
|
| 707 |
video_output = gr.Video(label="Generated Music Video")
|
| 708 |
+
reshuffle_btn = gr.Button("Reshuffle", variant="secondary", visible=True, interactive=False)
|
| 709 |
last_run_dir = gr.State(value="")
|
| 710 |
|
| 711 |
# Hidden state for passing data between chained pipeline phases
|
|
|
|
| 741 |
fn=generate_cpu,
|
| 742 |
inputs=[audio_input, style_dropdown,
|
| 743 |
cover_art_input, run_mode, existing_run, start_step, reuse_files],
|
| 744 |
+
outputs=[video_output, _st_run_dir, _st_style, _st_step, _st_cover],
|
| 745 |
).then(
|
| 746 |
fn=generate_images,
|
| 747 |
+
inputs=[video_output, _st_run_dir, _st_style, _st_step, _st_cover],
|
| 748 |
+
outputs=[video_output, _st_run_dir, _st_style, _st_step, _st_cover],
|
| 749 |
).then(
|
| 750 |
fn=generate_videos,
|
| 751 |
+
inputs=[video_output, _st_run_dir, _st_style, _st_step, _st_cover],
|
| 752 |
+
outputs=[video_output, _st_run_dir, _st_cover],
|
| 753 |
).then(
|
| 754 |
fn=generate_assembly,
|
| 755 |
inputs=[_st_run_dir, _st_cover],
|