From 2e28a987c76fb8890cf3c7650e37a8959679b953 Mon Sep 17 00:00:00 2001 From: Filip Strand Date: Thu, 27 Nov 2025 16:30:37 +0100 Subject: [PATCH] Release 0.12.0 (#282) --- CHANGELOG.md | 28 +++++++++++++++++++ pyproject.toml | 4 +-- .../models/fibo/variants/txt2img/fibo.py | 14 +++++----- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df056e4..85ba9c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.12.0] - 2025-11-27 + +# MFLUX v.0.12.0 Release Notes + +### 🎨 New Model Support + +- **Bria FIBO Support**: Added support for [FIBO](https://huggingface.co/briaai/FIBO), the first open-source JSON-native text-to-image model from [Bria.ai](https://bria.ai) +- **Three operation modes**: Generate (text-to-image with VLM expansion), Refine (structured prompt editing), and Inspire (image-to-prompt extraction) +- **New commands**: + - `mflux-generate-fibo` - Generate images from text prompts with VLM-guided JSON expansion + - `mflux-refine-fibo` - Refine images using structured JSON prompts for targeted attribute editing + - `mflux-inspire-fibo` - Extract structured prompts from reference images for style transfer and remixing +- **VLM-guided JSON prompting**: Automatically expands short text prompts into 1,000+ word structured schemas using a fine-tuned Qwen3-VL model + +### 🔧 Restructure and 🔄 Breaking Changes + +- **Common module reorganization**: Moved shared functionality to `models/common/` for better code reuse + - Unified latent creators across model families + - Centralized scheduler implementations + - Common quantization utilities + - Shared model saving functionality + +### 👩‍💻 Contributors + +- **Filip Strand (@filipstrand)**: FIBO model implementation, architecture, core development + +--- + ## [0.11.1] - 2025-11-13 # MFLUX v.0.11.1 Release Notes diff --git a/pyproject.toml b/pyproject.toml index 899b033..ef66ce8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ source-exclude = [ [project] name = "mflux" -version = "0.12.0.dev0" +version = "0.12.0" description = "A MLX port of FLUX based on the Huggingface Diffusers implementation." readme = "README.md" keywords = ["diffusers", "flux", "mlx"] @@ -30,7 +30,7 @@ dependencies = [ "filelock>=3.18.0", "huggingface-hub>=0.24.5,<1.0", "matplotlib>=3.9.2,<4.0", - "mlx>=0.27.0,<0.30.0", + "mlx>=0.27.0,<0.31.0", "numpy>=2.0.1,<3.0", "opencv-python>=4.10.0,<5.0", "piexif>=1.1.3,<2.0", diff --git a/src/mflux/models/fibo/variants/txt2img/fibo.py b/src/mflux/models/fibo/variants/txt2img/fibo.py index b85cfdf..7babb7c 100644 --- a/src/mflux/models/fibo/variants/txt2img/fibo.py +++ b/src/mflux/models/fibo/variants/txt2img/fibo.py @@ -88,18 +88,18 @@ class FIBO(nn.Module): for t in time_steps: try: # 3.t Predict the noise - noise_pred = self.transformer( + noise = self.transformer( t=t, config=runtime_config, hidden_states=latents, encoder_hidden_states=encoder_hidden_states, text_encoder_layers=text_encoder_layers, ) - noise_pred = FIBO._apply_classifier_free_guidance(noise_pred, runtime_config.guidance) + noise = FIBO._apply_classifier_free_guidance(noise, runtime_config.guidance) # 4.t Take one denoise step latents = runtime_config.scheduler.step( - model_output=noise_pred, + model_output=noise, timestep=t, sample=latents, ) @@ -155,10 +155,10 @@ class FIBO(nn.Module): ) @staticmethod - def _apply_classifier_free_guidance(noise_pred: mx.array, guidance: float) -> mx.array: - half = noise_pred.shape[0] // 2 - noise_uncond = noise_pred[:half] - noise_text = noise_pred[half:] + def _apply_classifier_free_guidance(noise: mx.array, guidance: float) -> mx.array: + half = noise.shape[0] // 2 + noise_uncond = noise[:half] + noise_text = noise[half:] return noise_uncond + guidance * (noise_text - noise_uncond) @staticmethod