From 04d24234f104ace5460457c4b0143ef8d564f5c3 Mon Sep 17 00:00:00 2001 From: Anthony Wu Date: Sun, 9 Mar 2025 07:42:12 -0700 Subject: [PATCH 1/4] Fix: image gen should stop even if no callbacks are registered --- pyproject.toml | 2 +- src/mflux/callbacks/instances/stepwise_handler.py | 2 -- src/mflux/community/in_context_lora/flux_in_context_lora.py | 2 ++ src/mflux/controlnet/flux_controlnet.py | 2 ++ src/mflux/flux/flux.py | 2 ++ 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d79f3dd..7e7baa6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mflux" -version = "0.6.0" +version = "0.6.1" description = "A MLX port of FLUX based on the Huggingface Diffusers implementation." readme = "README.md" keywords = ["diffusers", "flux", "mlx"] diff --git a/src/mflux/callbacks/instances/stepwise_handler.py b/src/mflux/callbacks/instances/stepwise_handler.py index ea74c60..8e0f0ba 100644 --- a/src/mflux/callbacks/instances/stepwise_handler.py +++ b/src/mflux/callbacks/instances/stepwise_handler.py @@ -4,7 +4,6 @@ import mlx.core as mx import PIL.Image import tqdm -from mflux import StopImageGenerationException from mflux.callbacks.callback import BeforeLoopCallback, InLoopCallback, InterruptCallback from mflux.config.runtime_config import RuntimeConfig from mflux.post_processing.array_util import ArrayUtil @@ -69,7 +68,6 @@ class StepwiseHandler(BeforeLoopCallback, InLoopCallback, InterruptCallback): time_steps: tqdm ) -> None: # fmt: off self._save_composite(seed=seed) - raise StopImageGenerationException(f"Stopping image generation at step {t + 1}/{len(time_steps)}") def _save_image( self, diff --git a/src/mflux/community/in_context_lora/flux_in_context_lora.py b/src/mflux/community/in_context_lora/flux_in_context_lora.py index 9c27fc2..39ca300 100644 --- a/src/mflux/community/in_context_lora/flux_in_context_lora.py +++ b/src/mflux/community/in_context_lora/flux_in_context_lora.py @@ -6,6 +6,7 @@ from mflux.callbacks.callbacks import Callbacks from mflux.config.config import Config from mflux.config.model_config import ModelConfig from mflux.config.runtime_config import RuntimeConfig +from mflux.error.exceptions import StopImageGenerationException from mflux.flux.flux_initializer import FluxInitializer from mflux.latent_creator.latent_creator import Img2Img, LatentCreator from mflux.models.text_encoder.clip_encoder.clip_encoder import CLIPEncoder @@ -136,6 +137,7 @@ class Flux1InContextLoRA(nn.Module): config=config, time_steps=time_steps, ) + raise StopImageGenerationException(f"Stopping image generation at step {t + 1}/{len(time_steps)}") # (Optional) Call subscribers after loop Callbacks.after_loop( diff --git a/src/mflux/controlnet/flux_controlnet.py b/src/mflux/controlnet/flux_controlnet.py index 5c9d878..03b7401 100644 --- a/src/mflux/controlnet/flux_controlnet.py +++ b/src/mflux/controlnet/flux_controlnet.py @@ -8,6 +8,7 @@ from mflux.config.model_config import ModelConfig from mflux.config.runtime_config import RuntimeConfig from mflux.controlnet.controlnet_util import ControlnetUtil from mflux.controlnet.transformer_controlnet import TransformerControlnet +from mflux.error.exceptions import StopImageGenerationException from mflux.flux.flux_initializer import FluxInitializer from mflux.latent_creator.latent_creator import LatentCreator from mflux.models.text_encoder.clip_encoder.clip_encoder import CLIPEncoder @@ -141,6 +142,7 @@ class Flux1Controlnet(nn.Module): config=config, time_steps=time_steps, ) + raise StopImageGenerationException(f"Stopping image generation at step {t + 1}/{len(time_steps)}") # (Optional) Call subscribers after loop Callbacks.after_loop( diff --git a/src/mflux/flux/flux.py b/src/mflux/flux/flux.py index bf7f756..a0fa92f 100644 --- a/src/mflux/flux/flux.py +++ b/src/mflux/flux/flux.py @@ -6,6 +6,7 @@ from mflux.callbacks.callbacks import Callbacks from mflux.config.config import Config from mflux.config.model_config import ModelConfig from mflux.config.runtime_config import RuntimeConfig +from mflux.error.exceptions import StopImageGenerationException from mflux.flux.flux_initializer import FluxInitializer from mflux.latent_creator.latent_creator import Img2Img, LatentCreator from mflux.models.text_encoder.clip_encoder.clip_encoder import CLIPEncoder @@ -121,6 +122,7 @@ class Flux1(nn.Module): config=config, time_steps=time_steps, ) + raise StopImageGenerationException(f"Stopping image generation at step {t + 1}/{len(time_steps)}") # (Optional) Call subscribers after loop Callbacks.after_loop( From 4ad31cab6b353a93cda7fe744b1bee86192e1f16 Mon Sep 17 00:00:00 2001 From: Anthony Wu Date: Sun, 9 Mar 2025 18:45:05 -0700 Subject: [PATCH 2/4] fix auto seed count == 1 sporadic test failure --- tests/arg_parser/test_cli_argparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/arg_parser/test_cli_argparser.py b/tests/arg_parser/test_cli_argparser.py index fcc91f1..c8ed72e 100644 --- a/tests/arg_parser/test_cli_argparser.py +++ b/tests/arg_parser/test_cli_argparser.py @@ -230,7 +230,7 @@ def test_auto_seeds_arg(mflux_generate_parser, mflux_generate_minimal_model_argv assert "_seed_{seed}" in args.output for _ in range(0, 10): - random_auto_seed_count = random.randint(0, 100) + random_auto_seed_count = random.randint(2, 100) with patch("sys.argv", mflux_generate_minimal_model_argv + ["--auto-seeds", str(random_auto_seed_count)]): args = mflux_generate_parser.parse_args() assert len(set(args.seed)) == random_auto_seed_count From f5f8d45eaa8804aad3297d99153ae7ba3c5e2740 Mon Sep 17 00:00:00 2001 From: Goekdeniz-Guelmez Date: Thu, 13 Mar 2025 09:40:35 +0100 Subject: [PATCH 3/4] initial commmit --- src/mflux/ui/cli/parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mflux/ui/cli/parsers.py b/src/mflux/ui/cli/parsers.py index ad898df..a19c0c7 100644 --- a/src/mflux/ui/cli/parsers.py +++ b/src/mflux/ui/cli/parsers.py @@ -196,7 +196,7 @@ class CommandLineParser(argparse.ArgumentParser): if self.supports_image_generation and namespace.steps is None: namespace.steps = ui_defaults.MODEL_INFERENCE_STEPS.get(namespace.model, None) - if namespace.low_ram and len(namespace.seed) > 1: + if getattr(namespace, 'low_ram', False) and len(namespace.seed) > 1: self.error("--low-ram cannot be used with multiple seeds") return namespace From 4f88376830bb7db491eaeeba6bdfaf8030c065e1 Mon Sep 17 00:00:00 2001 From: filipstrand Date: Thu, 13 Mar 2025 22:11:16 +0100 Subject: [PATCH 4/4] v.0.6.2 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7e7baa6..308ea3e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mflux" -version = "0.6.1" +version = "0.6.2" description = "A MLX port of FLUX based on the Huggingface Diffusers implementation." readme = "README.md" keywords = ["diffusers", "flux", "mlx"]