Skip to content

Commit 929fa07

Browse files
committed
lores/hires options for make video, #18
1 parent dd9bf25 commit 929fa07

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

images/extension.jpg

5.12 KB
Loading

scripts/sd_save_intermediate_images.py

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
# New args, regex for npp, find: (ssii_video_hires)(?=,)
2727
# replace: \1, ssii_add_last_frames, ssii_add_first_frames
28+
# plus debug
2829

2930
orig_callback_state = KDiffusionSampler.callback_state
3031
ui_config_backup = os.path.join(scripts.basedir(), "ui-config_backup.json")
@@ -44,6 +45,8 @@
4445
"ssii_add_last_frames": "Display last image for additional frames at the end",
4546
"ssii_smooth": "Smoothing / Interpolate",
4647
"ssii_seconds": "Approx. how many seconds should the video run?",
48+
"ssii_lores": "lores",
49+
"ssii_hires": "hires",
4750
"ssii_debug": "Debug"
4851
}
4952

@@ -53,7 +56,7 @@ def ui_setting_set(ui_settings, key, value):
5356
ui_settings[f"customscript/{this_module}/img2img/{key}/value"] = value
5457
return ui_settings
5558

56-
def ssii_save_settings_do(ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug):
59+
def ssii_save_settings_do(ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug):
5760
ui_config_file = cmd_opts.ui_config_file
5861
ui_settings = {}
5962

@@ -127,9 +130,21 @@ def ssii_add_last_frames_logic(p, ssii_add_first_frames, ssii_add_last_frames, s
127130
p.intermed_files = add_files
128131
return
129132

130-
def make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug):
133+
def make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug):
131134
if ssii_is_active and ssii_video and ((not state.skipped and not state.interrupted) or p.intermed_stopped):
132135
logger = logging.getLogger(__name__)
136+
# remove unwanted files according to lores/hires setting
137+
if hr_check(p) and (not ssii_lores or not ssii_hires):
138+
intermed_files_remain = []
139+
for (batch_no, name_org, name_seq) in p.intermed_files:
140+
filename = os.path.basename(name_org)
141+
parts = filename.split("-")
142+
current_step = parts[1]
143+
if (ssii_lores and int(current_step) < int(p.intermed_hires_start)) or (ssii_hires and int(current_step) >= int(p.intermed_hires_start)):
144+
intermed_files_remain.append((batch_no, name_org, name_seq))
145+
logger.debug(f"Removed: {filename_clean(name_org)}")
146+
p.intermed_files = intermed_files_remain
147+
133148
# ffmpeg requires sequential numbers in filenames (that is exactly +1)
134149
p.intermed_files.sort(key=lambda x: x[0])
135150
prev_batch = None
@@ -321,6 +336,15 @@ def ui(self, is_img2img):
321336
)
322337
with gr.Row():
323338
gr.HTML("fps >= 30 recommended, caution: generates large gif-files")
339+
with gr.Row():
340+
ssii_lores = gr.Checkbox(
341+
label=ui_items["ssii_lores"],
342+
value=True
343+
)
344+
ssii_hires = gr.Checkbox(
345+
label=ui_items["ssii_hires"],
346+
value=True
347+
)
324348
with gr.Row():
325349
ssii_debug = gr.Checkbox(
326350
label=ui_items["ssii_debug"],
@@ -331,11 +355,11 @@ def ui(self, is_img2img):
331355

332356
ssii_save_settings.click(
333357
fn=ssii_save_settings_do,
334-
inputs=[ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug],
358+
inputs=[ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug],
335359
outputs=[ssii_message],
336360
)
337361

338-
return [ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug]
362+
return [ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug]
339363

340364
def save_image_only_get_name(image, path, basename, seed=None, prompt=None, extension='png', info=None, short_filename=False, no_prompt=False, grid=False, pnginfo_section_name='parameters', p=None, existing_info=None, forced_filename=None, suffix="", save_to_dirs=None):
341365
# for description see modules.images.save_image, same code up saving of files
@@ -381,17 +405,19 @@ def save_image_only_get_name(image, path, basename, seed=None, prompt=None, exte
381405

382406
return (fullfn)
383407

384-
def process(self, p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug):
408+
def process(self, p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug):
385409
if ssii_is_active:
386410

387411
# Debug logging
388412
if ssii_debug:
389413
mode = logging.DEBUG
390-
logging.basicConfig(level=mode, format='%(asctime)s %(levelname)s %(message)s')
391414
else:
392415
mode = logging.WARNING
393416
logger = logging.getLogger(__name__)
394417
logger.setLevel(mode)
418+
console_handler = logging.StreamHandler()
419+
console_handler.setLevel(mode)
420+
logger.addHandler(console_handler)
395421
if logger.isEnabledFor(logging.DEBUG):
396422
logger.debug(f"{sys.executable} {sys.version}")
397423
logger.debug(f"{platform.system()} {platform.version()}")
@@ -449,8 +475,9 @@ def callback_state(self, d):
449475
# Reset per-batch_count-attributes
450476
delattr(p, "intermed_final_pass")
451477
delattr(p, "intermed_max_step")
478+
delattr(p, "intermed_hires_start")
452479
# Make video for previous batch_count
453-
make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug)
480+
make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug)
454481
else:
455482
p.intermed_batch_iter = p.iteration
456483

@@ -460,9 +487,11 @@ def callback_state(self, d):
460487
hr_active = hr_active_check(p)
461488
if hr_active:
462489
abs_step = current_step + p.steps
490+
if not hasattr(p, 'intermed_hires_start'):
491+
p.intermed_hires_start = abs_step
463492

464-
logger.debug("ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug:")
465-
logger.debug(f"{ssii_intermediate_type}, {ssii_every_n}, {ssii_start_at_n}, {ssii_stop_at_n}, {ssii_video}, {ssii_video_format}, {ssii_video_fps}, {ssii_smooth}, {ssii_seconds}, {ssii_debug}")
493+
logger.debug("ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug:")
494+
logger.debug(f"{ssii_intermediate_type}, {ssii_every_n}, {ssii_start_at_n}, {ssii_stop_at_n}, {ssii_video}, {ssii_video_format}, {ssii_mp4_parms}, {ssii_video_fps}, {ssii_add_first_frames}, {ssii_add_last_frames}, {ssii_smooth}, {ssii_seconds}, {ssii_lores}, {ssii_hires}, {ssii_debug}")
466495
logger.debug(f"Step, abs_step, hr, hr_active: {current_step}, {abs_step}, {hr}, {hr_active}")
467496

468497
# ssii_start_at_n must be a multiple of ssii_every_n
@@ -584,11 +613,11 @@ def callback_state(self, d):
584613

585614
setattr(KDiffusionSampler, "callback_state", callback_state)
586615

587-
def postprocess(self, p, processed, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug):
616+
def postprocess(self, p, processed, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug):
588617
setattr(KDiffusionSampler, "callback_state", orig_callback_state)
589618

590619
# Make video for last batch_count
591-
make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_debug)
620+
make_video(p, ssii_is_active, ssii_final_save, ssii_intermediate_type, ssii_every_n, ssii_start_at_n, ssii_stop_at_n, ssii_video, ssii_video_format, ssii_mp4_parms, ssii_video_fps, ssii_add_first_frames, ssii_add_last_frames, ssii_smooth, ssii_seconds, ssii_lores, ssii_hires, ssii_debug)
592621

593622
def handle_image_saved(params : script_callbacks.ImageSaveParams):
594623
if hasattr(params.p, "intermed_is_active"):

0 commit comments

Comments
 (0)