feat(video): video_interpolate as execution-time stage

Promote RIFE interpolation from a save-time kwarg to a real stage of the
processing pipeline so per-frame work (detailer, color correction,
postprocess scripts) operates on source-rate frames and the inflated
stream becomes the saved output.

- new modules/processing_video.py with apply_video_interpolation,
  interpolation_factor, expand_infotexts; PIL/tensor/numpy dispatch
- video_interpolate, video_interpolate_scale, video_interpolated fields
  on StableDiffusionProcessingVideo
- process_images_inner runs the helper after the batch loop and inflates
  infotexts in lockstep
- save_video in modules/video.py and modules/video_models/video_save.py
  short-circuit re-interpolation when p.video_interpolated is set; the
  user-facing kwarg still flows into metadata
This commit is contained in:
CalamitousFelicitousness
2026-04-26 03:08:07 +01:00
parent 956a573a68
commit e42f1fd8fb
5 changed files with 140 additions and 2 deletions
+3
View File
@@ -691,6 +691,9 @@ class StableDiffusionProcessingVideo(StableDiffusionProcessing):
self.vae_tile_frames: int = kwargs.pop('vae_tile_frames', 0)
self.video_engine: str = kwargs.pop('video_engine', None)
self.video_model: str = kwargs.pop('video_model', None)
self.video_interpolate: int = kwargs.pop('video_interpolate', 0)
self.video_interpolate_scale: float = kwargs.pop('video_interpolate_scale', 1.0)
self.video_interpolated: bool = False
self.scheduler_shift: float = 0.0
debug(f'Process init: mode={self.__class__.__name__} kwargs={kwargs}') # pylint: disable=protected-access
super().__init__(**kwargs)