buildborderless/FLUX.MF-lightning_8step-uncen

buildborderless
Texto a imagen

Modelo de generación de imágenes a partir de texto basado en FLUX, creado como una fusión de black-forest-labs/FLUX.1-dev y FLUX.1-schnell, con LoRAs adicionales. Está orientado a generación y evaluación de datasets dentro del proyecto OpenSight, y recomienda producir imágenes en unas 6 a 8 etapas para acelerar la inferencia frente a FLUX.1-dev completo.

Como usar

Instalación y uso con Diffusers:

pip install -U diffusers transformers accelerate
import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained(
    "buildborderless/FLUX.MF-lightning_8step-uncen",
    dtype=torch.bfloat16,
    device_map="cuda"
)

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

Código de fusión sub-memory-efficient incluido en la ficha:

from diffusers import FluxTransformer2DModel
from huggingface_hub import snapshot_download
from accelerate import init_empty_weights
from diffusers.models.model_loading_utils import load_model_dict_into_meta
import safetensors.torch
import glob
import torch

with init_empty_weights():
    config = FluxTransformer2DModel.load_config("black-forest-labs/FLUX.1-dev", subfolder="transformer")
    model = FluxTransformer2DModel.from_config(config)

dev_ckpt = snapshot_download(repo_id="black-forest-labs/FLUX.1-dev", allow_patterns="transformer/*")
schnell_ckpt = snapshot_download(repo_id="black-forest-labs/FLUX.1-schnell", allow_patterns="transformer/*")
dev_shards = sorted(glob.glob(f"{dev_ckpt}/transformer/*.safetensors"))
schnell_shards = sorted(glob.glob(f"{schnell_ckpt}/transformer/*.safetensors"))

merged_state_dict = {}
guidance_state_dict = {}

for i in range(len((dev_shards))):
    state_dict_dev_temp = safetensors.torch.load_file(dev_shards[i])
    state_dict_schnell_temp = safetensors.torch.load_file(schnell_shards[i])
    keys = list(state_dict_dev_temp.keys())

    for k in keys:
        if "guidance" not in k:
            merged_state_dict[k] = (state_dict_dev_temp.pop(k) + state_dict_schnell_temp.pop(k)) / 2
        else:
            guidance_state_dict[k] = state_dict_dev_temp.pop(k)

    if len(state_dict_dev_temp) > 0:
        raise ValueError(f"There should not be any residue but got: {list(state_dict_dev_temp.keys())}.")
    if len(state_dict_schnell_temp) > 0:
        raise ValueError(f"There should not be any residue but got: {list(state_dict_dev_temp.keys())}.")

merged_state_dict.update(guidance_state_dict)
load_model_dict_into_meta(model, merged_state_dict)
model.to(torch.bfloat16).save_pretrained("merged-flux")

Funcionalidades

Generación texto-a-imagen con Diffusers y FluxPipeline.
Pesos en formato Safetensors.
Modelo fusionado a partir de FLUX.1-dev y FLUX.1-schnell.
Optimizado para inferencia rápida, con 6 a 8 pasos recomendados.
Compatible con herramientas locales como Draw Things y DiffusionBee.
Licencia flux-1-dev-non-commercial-license; requiere revisar las licencias base antes de uso comercial.
El repositorio indica que algunas LoRAs fusionadas pueden ser NSFW y recomienda uso responsable.
Existe una versión más reciente: buildborderless/FLUX.MF-8step_lightning_v2.

Casos de uso

Generar imágenes sintéticas a partir de prompts textuales con menor número de pasos de inferencia.
Crear datasets visuales para evaluación o entrenamiento dentro de flujos de investigación.
Probar variantes rápidas de FLUX fusionadas con LoRAs en entornos locales o notebooks.
Experimentar con generación de retratos, escenas estilizadas y composición visual usando Diffusers.