diff --git a/CHANGELOG.md b/CHANGELOG.md index 92cfe5063..182c057d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2025-10-17 +## Update for 2025-10-18 Post-release fixes: - ROCm-on-Windows additional checks @@ -8,6 +8,7 @@ Post-release fixes: - Huggingface model download - Remove unused UI settings - Video implement dynamic and manual sampler shift +- Fix interrupt batch processing ## Update for 2025-10-17 diff --git a/modules/processing.py b/modules/processing.py index aaf681840..5d92fe246 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -397,13 +397,13 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: shared.state.batch_no = n + 1 debug(f'Processing inner: iteration={n+1}/{p.n_iter}') p.iteration = n + if shared.state.interrupted: + shared.log.debug(f'Process interrupted: {n+1}/{p.n_iter}') + break if shared.state.skipped: shared.log.debug(f'Process skipped: {n+1}/{p.n_iter}') shared.state.skipped = False continue - if shared.state.interrupted: - shared.log.debug(f'Process interrupted: {n+1}/{p.n_iter}') - break if not hasattr(p, 'keep_prompts'): p.prompts = p.all_prompts[n * p.batch_size:(n+1) * p.batch_size] @@ -441,6 +441,8 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: infotexts = [create_infotext(p, p.all_prompts, p.all_seeds, p.all_subseeds, index=0)] else: samples = [] + if not shared.opts.keep_incomplete: + break if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): p.scripts.postprocess_batch(p, samples, batch_number=n) @@ -460,6 +462,8 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: if shared.cmd_opts.lowvram: devices.torch_gc(force=True, reason='lowvram') timer.process.record('post') + if shared.state.interrupted: + break if not p.xyz: if hasattr(shared.sd_model, 'restore_pipeline') and (shared.sd_model.restore_pipeline is not None): diff --git a/modules/shared_state.py b/modules/shared_state.py index d79e90b86..f575f4482 100644 --- a/modules/shared_state.py +++ b/modules/shared_state.py @@ -194,7 +194,7 @@ class State: def begin(self, title="", task_id=0, api=None): import modules.devices self.clear() - self.interrupted = False + self.interrupted = self.interrupted if title.startswith('Save') else False self.skipped = False self.job_history += 1 self.total_jobs += 1