From e12b5d63bb203d038c6a6ed0ffb5e275e6203160 Mon Sep 17 00:00:00 2001 From: Wray Bowling <1120619+wraybowling@users.noreply.github.com> Date: Mon, 22 Jun 2026 18:24:12 -0400 Subject: [PATCH] Live: Iterate seed after apply --- ai_diffusion/backend/workflow.py | 2 ++ ai_diffusion/model/model.py | 8 +++++++- ai_diffusion/settings.py | 9 +++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ai_diffusion/backend/workflow.py b/ai_diffusion/backend/workflow.py index 825cab01e..e8f74d8c4 100644 --- a/ai_diffusion/backend/workflow.py +++ b/ai_diffusion/backend/workflow.py @@ -61,6 +61,8 @@ def generate_seed(): # Currently only using 32 bit because Qt widgets don't support int64 return random.randint(0, 2**32 - 1) +def iterate_seed(old_seed): + return (old_seed + 1) % (2**32 - 1) def sampling_from_style(style: Style, strength: float, is_live: bool): sampler_name = style.live_sampler if is_live else style.sampler diff --git a/ai_diffusion/model/model.py b/ai_diffusion/model/model.py index 73cf02293..9ca8af17f 100644 --- a/ai_diffusion/model/model.py +++ b/ai_diffusion/model/model.py @@ -928,6 +928,9 @@ def _handle_style_changed(self): def generate_seed(self): self.seed = workflow.generate_seed() + def iterate_seed(self): + self.seed = workflow.iterate_seed(self.seed) + def save_result(self, job_id: str, index: int): _save_job_result(self, self.jobs.find(job_id), index) @@ -1322,9 +1325,12 @@ def apply_result(self, layer_only=False): region_behavior = ApplyRegionBehavior.layer_group self.model.apply_result(self.result, params, behavior, region_behavior) - if settings.new_seed_after_apply: + if settings.new_seed_after_apply == random: self.model.generate_seed() + if settings.new_seed_after_apply == iterate: + self.model.iterate_seed() + @property def result(self): return self._result diff --git a/ai_diffusion/settings.py b/ai_diffusion/settings.py index 694e668bd..510caf954 100644 --- a/ai_diffusion/settings.py +++ b/ai_diffusion/settings.py @@ -122,6 +122,11 @@ def no_webp_fallback(self): return ImageFileFormat.jpeg return self +class NewSeedMode(Enum): + disabled = (_("Disabled"), 0) + random = (_("Random"), 1) + iterate = (_("Iterate"), 2) + class PerformancePresetSettings(NamedTuple): batch_size: int = 4 @@ -256,10 +261,10 @@ class Settings(QObject): _("NSFW Filter"), 0.0, _("Attempt to filter out images with explicit content") ) - new_seed_after_apply: bool + new_seed_after_apply: NewSeedMode _new_seed_after_apply = Setting( _("Live: New Seed after Apply"), - False, + undefined, _("Pick a new seed after copying the result to the canvas in Live mode"), )