Release 0.12.0 (#282)

This commit is contained in:
Filip Strand 2025-11-27 16:30:37 +01:00 committed by GitHub
parent c2c860f4de
commit 2e28a987c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 37 additions and 9 deletions

View File

@ -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

View File

@ -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",

View File

@ -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