feat(video): wire scripts and control to video_interpolate field

Set p.video_interpolate at run() entry so process_images_inner picks up
the helper. Save calls keep their existing kwargs; the sentinel guard
skips re-interpolation when the helper already ran.

- animatediff, text2video, image2video, stablevideodiffusion route
  mp4_interpolate into p.video_interpolate
- modules/control/run.py routes the request video_interpolate arg
- xyz_grid intentionally untouched: its end-of-axis save_video stitches
  the cell slideshow, not per-cell videos; a future video_interpolate
  axis would set p.video_interpolate per cell via axis_options
This commit is contained in:
CalamitousFelicitousness
2026-04-26 03:09:27 +01:00
parent 6acde69467
commit 7d77b01c3d
5 changed files with 5 additions and 0 deletions
+1
View File
@@ -537,6 +537,7 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg
p.is_tile = False
p.init_control = inits or []
p.orig_init_images = inputs
p.video_interpolate = video_interpolate
# TODO modernui: monkey-patch for missing tabs.select event
if p.selected_scale_tab_before == 0 and p.resize_name_before != 'None' and p.scale_by_before != 1 and inputs is not None and len(inputs) > 0:
+1
View File
@@ -248,6 +248,7 @@ class AnimateDiffScript(scripts_manager.Script):
p.extra_generation_params['AnimateDiff'] = loaded_adapter
p.do_not_save_grid = True
p.ops.append('video')
p.video_interpolate = mp4_interpolate
p.task_args['generator'] = None
p.task_args['num_frames'] = frames
p.task_args['num_inference_steps'] = p.steps
+1
View File
@@ -57,6 +57,7 @@ class VGenI2VScript(scripts_manager.Script):
return None
if p.init_images is None or len(p.init_images) == 0:
return None
p.video_interpolate = mp4_interpolate
model = [m for m in MODELS if m['name'] == model_name][0]
repo_id = model['url']
log.debug(f'Image2Video: model={model_name} frames={num_frames}, video={video_type} duration={duration} loop={gif_loop} pad={mp4_pad} interpolate={mp4_interpolate}')
+1
View File
@@ -69,6 +69,7 @@ class SVDScript(scripts_manager.Script):
return frames
def run(self, p: processing.StableDiffusionProcessing, model, num_frames, override_resolution, min_guidance_scale, max_guidance_scale, decode_chunk_size, motion_bucket_id, noise_aug_strength, video_type, duration, gif_loop, mp4_pad, mp4_interpolate): # pylint: disable=arguments-differ, unused-argument
p.video_interpolate = mp4_interpolate
image = getattr(p, 'init_images', None)
if image is None or len(image) == 0:
log.error('SVD: no init_images')
+1
View File
@@ -54,6 +54,7 @@ class ModelScopeScript(scripts_manager.Script):
def run(self, p: processing.StableDiffusionProcessing, model_name, use_default, num_frames, video_type, duration, gif_loop, mp4_pad, mp4_interpolate): # pylint: disable=arguments-differ, unused-argument
if model_name == 'None':
return None
p.video_interpolate = mp4_interpolate
model = [m for m in MODELS if m['name'] == model_name][0]
log.debug(f'Text2Video: model={model} defaults={use_default} frames={num_frames}, video={video_type} duration={duration} loop={gif_loop} pad={mp4_pad} interpolate={mp4_interpolate}')