tsi-org commited on
Commit
a2ee17c
·
verified ·
1 Parent(s): 0ebd095

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -22
app.py CHANGED
@@ -663,38 +663,50 @@ with gr.Blocks(title="Self-Forcing Streaming Demo") as demo:
663
 
664
  # Collect all frames from this generation
665
  collected_frames = []
 
 
 
666
 
667
- # Call the generator function and yield frames, status, and video updates
668
  try:
669
- # Set save_frames=True to explicitly ensure frames are collected
670
- for frame, status_html in video_generation_handler_streaming(p, s, f, save_frames=True):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
671
  # Track frames for this specific session
672
  if frame is not None and isinstance(frame, np.ndarray):
673
  collected_frames.append(frame.copy())
674
-
675
- # Show status update during generation
676
- yield frame, status_html, gr.update(visible=False)
677
 
678
  # Check if this is the final frame
679
- if "Complete" in str(status_html) or "100%" in str(status_html):
680
- # Create the final video
681
- if collected_frames:
682
- print(f"Creating final video from {len(collected_frames)} frames at {f} FPS")
683
- temp_file = save_frames_as_video(collected_frames, f)
684
- if temp_file:
685
- # Save these frames as the current set
686
- APP_STATE["current_frames"] = collected_frames
687
- yield frame, status_html, gr.update(visible=True, value=temp_file)
688
- else:
689
- yield frame, status_html, gr.update(visible=False)
690
 
691
- # Ensure final frame is properly handled
692
- if collected_frames and "Complete" not in str(status_html) and "100%" not in str(status_html):
693
- print(f"Generation complete, creating final video from {len(collected_frames)} frames")
694
  temp_file = save_frames_as_video(collected_frames, f)
695
  if temp_file:
696
- yield frame, status_html, gr.update(visible=True, value=temp_file)
697
-
 
 
698
  except Exception as e:
699
  import traceback
700
  traceback.print_exc()
 
663
 
664
  # Collect all frames from this generation
665
  collected_frames = []
666
+ last_frame = None
667
+ last_status = None
668
+ generation_complete = False
669
 
 
670
  try:
671
+ # Handle frame generation
672
+ for output in video_generation_handler_streaming(p, s, f, save_frames=True):
673
+ # Unpack the output correctly
674
+ if isinstance(output, tuple):
675
+ if len(output) == 2:
676
+ frame, status_html = output
677
+ else:
678
+ # Handle any unexpected output format gracefully
679
+ continue
680
+ else:
681
+ # Skip if not a proper tuple
682
+ continue
683
+
684
+ # Save the last valid frame and status
685
+ if frame is not None:
686
+ last_frame = frame
687
+ if status_html is not None:
688
+ last_status = status_html
689
+
690
  # Track frames for this specific session
691
  if frame is not None and isinstance(frame, np.ndarray):
692
  collected_frames.append(frame.copy())
 
 
 
693
 
694
  # Check if this is the final frame
695
+ if status_html and ("Complete" in str(status_html) or "100%" in str(status_html)):
696
+ generation_complete = True
697
+
698
+ # Always keep final video hidden during streaming
699
+ yield frame, status_html, gr.update(visible=False)
 
 
 
 
 
 
700
 
701
+ # After streaming is done, create the final video
702
+ if collected_frames:
703
+ print(f"Generation complete, creating final video from {len(collected_frames)} frames at {f} FPS")
704
  temp_file = save_frames_as_video(collected_frames, f)
705
  if temp_file:
706
+ # Save these frames as the current set
707
+ APP_STATE["current_frames"] = collected_frames
708
+ # Use the last valid frame and status
709
+ yield last_frame, last_status, gr.update(visible=True, value=temp_file)
710
  except Exception as e:
711
  import traceback
712
  traceback.print_exc()