Release 0.12.0 (#282)
This commit is contained in:
parent
c2c860f4de
commit
2e28a987c7
28
CHANGELOG.md
28
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/),
|
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).
|
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
|
## [0.11.1] - 2025-11-13
|
||||||
|
|
||||||
# MFLUX v.0.11.1 Release Notes
|
# MFLUX v.0.11.1 Release Notes
|
||||||
|
|||||||
@ -17,7 +17,7 @@ source-exclude = [
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "mflux"
|
name = "mflux"
|
||||||
version = "0.12.0.dev0"
|
version = "0.12.0"
|
||||||
description = "A MLX port of FLUX based on the Huggingface Diffusers implementation."
|
description = "A MLX port of FLUX based on the Huggingface Diffusers implementation."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["diffusers", "flux", "mlx"]
|
keywords = ["diffusers", "flux", "mlx"]
|
||||||
@ -30,7 +30,7 @@ dependencies = [
|
|||||||
"filelock>=3.18.0",
|
"filelock>=3.18.0",
|
||||||
"huggingface-hub>=0.24.5,<1.0",
|
"huggingface-hub>=0.24.5,<1.0",
|
||||||
"matplotlib>=3.9.2,<4.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",
|
"numpy>=2.0.1,<3.0",
|
||||||
"opencv-python>=4.10.0,<5.0",
|
"opencv-python>=4.10.0,<5.0",
|
||||||
"piexif>=1.1.3,<2.0",
|
"piexif>=1.1.3,<2.0",
|
||||||
|
|||||||
@ -88,18 +88,18 @@ class FIBO(nn.Module):
|
|||||||
for t in time_steps:
|
for t in time_steps:
|
||||||
try:
|
try:
|
||||||
# 3.t Predict the noise
|
# 3.t Predict the noise
|
||||||
noise_pred = self.transformer(
|
noise = self.transformer(
|
||||||
t=t,
|
t=t,
|
||||||
config=runtime_config,
|
config=runtime_config,
|
||||||
hidden_states=latents,
|
hidden_states=latents,
|
||||||
encoder_hidden_states=encoder_hidden_states,
|
encoder_hidden_states=encoder_hidden_states,
|
||||||
text_encoder_layers=text_encoder_layers,
|
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
|
# 4.t Take one denoise step
|
||||||
latents = runtime_config.scheduler.step(
|
latents = runtime_config.scheduler.step(
|
||||||
model_output=noise_pred,
|
model_output=noise,
|
||||||
timestep=t,
|
timestep=t,
|
||||||
sample=latents,
|
sample=latents,
|
||||||
)
|
)
|
||||||
@ -155,10 +155,10 @@ class FIBO(nn.Module):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _apply_classifier_free_guidance(noise_pred: mx.array, guidance: float) -> mx.array:
|
def _apply_classifier_free_guidance(noise: mx.array, guidance: float) -> mx.array:
|
||||||
half = noise_pred.shape[0] // 2
|
half = noise.shape[0] // 2
|
||||||
noise_uncond = noise_pred[:half]
|
noise_uncond = noise[:half]
|
||||||
noise_text = noise_pred[half:]
|
noise_text = noise[half:]
|
||||||
return noise_uncond + guidance * (noise_text - noise_uncond)
|
return noise_uncond + guidance * (noise_text - noise_uncond)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user