Flux 2 en Puro C: Generación de Imágenes Sin Dependencias

Flux 2 en Puro C: Generación de Imágenes Sin Dependencias

Flux 2 es la nueva ola de modelos de difusión latente que pueden convertir indicaciones en impresionantes imágenes en cuatro pasos de muestreo. Black Forest Labs lanzó la variante pequeña “Klein” con solo 4 B de parámetros, pero el código de inferencia sigue siendo grande—16 GB de pesos. Flux 2‑c le ofrece una implementación rápida, ligera y pura C que funciona en macOS o Linux sin requerir Python, CUDA o una pila ML completa.

Por qué una implementación en C?

  • Sin tiempo de ejecución externo – Solo la biblioteca estándar de C es necesaria, lo que hace que el binario sea portable entre entornos que puedan compilar C.
  • Pesos mapeados en memoria – El modo --mmap predeterminado mantiene los safetensors de 16 GB en disco y los carga bajo demanda, reduciendo la memoria máxima a ~4–5 GB.
  • Aceleración GPU (opcional) – Apple Metal (MPS) en Macs o BLAS en Intel/Linux ofrece un aumento de velocidad de ~30 × comparado con la línea base en puro‑C.

Inicio rápido

# 1. Clonar el repositorio
git clone https://github.com/antirez/flux2.c
cd flux2.c

# 2. Elegir un backend
make mps          # Apple Silicon (más rápido)
# make blas      # Intel Mac / Linux con OpenBLAS
# make generic   # Puro C, sin dependencias

# 3. Descargar el modelo de 16 GB
./download_model.sh          # script shell (curl)
# o: pip install huggingface_hub && python download_model.py

# 4. Ejecutar la demostración
./flux -d flux-klein-model \
       -p "Una mujer usando gafas de sol" \
       -o output.png

La imagen aparece inmediatamente en la terminal si soporta el protocolo Kitty.

Características en una vista rápida

Característica Descripción
Texto‑a‑Imagen Genera imágenes a partir de indicaciones en cualquier resolución (64–1792 px).
Imagen‑a‑Imagen Usa imágenes existentes como referencia mediante condicionamiento en contexto.
Multi‑Referencia Combina hasta 16 imágenes de referencia para composiciones.
CLI Interactiva Omite -p para iniciar un REPL que recuerda los IDs de referencia.
Vista previa de imagen en terminal --show / --show-steps muestra imágenes directamente en Kitty/Ghostty/iTerm2.
API sin dependencias Exporta una biblioteca C simple (libflux.a) con flux_generate() y flux_img2img().
PNGs con metadatos enriquecidos Las imágenes incluyen semilla e info del modelo en metadatos PNG para reproducibilidad.
Benchmarks En un M3 Max con 4 pasos, pure‑C MPS genera 512×512 en ~13 s, igualando a PyTorch.

Construcción desde código fuente

Requisitos – un compilador C, opcionalmente OpenBLAS para el objetivo blas o Apple Accelerate para mps.

# En macOS
clang -framework Accelerate -o flux flux.c flux_h*.c ...
# En Linux mediante OpenBLAS
gcc -fopenmp -L/usr/lib -lopenblas -o flux flux.c flux_h*.c ...

Ejecute make para listar los backends disponibles. Cada objetivo construye un binario que automáticamente selecciona la ruta más rápida para su plataforma.

Uso de la biblioteca en su propio proyecto

#include "flux.h"
#include <stdio.h>
int main(void) {
    flux_ctx *ctx = flux_load_dir("flux-klein-model");
    if (!ctx) { printf("Failed: %s\n", flux_get_error()); return 1; }

    flux_params p = FLUX_PARAMS_DEFAULT;
    p.width = 512; p.height = 512; p.seed = 42;

    flux_image *img = flux_generate(ctx, "Un gato naranja esponjoso", &p);
    if (!img) { printf("Error: %s\n", flux_get_error()); return 1; }

    flux_image_save(img, "cat.png");
    flux_image_free(img);
    flux_free(ctx);
    return 0;
}

Compile con gcc -o myapp myapp.c -L. -lflux -lm -framework Accelerate (macOS) o el equivalente para OpenBLAS.

Depuración y comparación con Python

El repositorio incluye una carpeta debug/ con scripts Python que descargan los tensores exactos de la implementación de referencia de Black Forest. Ejecute el binario C con --debug-py para verificar la paridad pixel‑perfecta.

./flux -d flux-klein-model --debug-py -o c_debug.png

Esto es invaluable para comprobaciones de coherencia al ajustar pesos del modelo o tokenizadores.

Preguntas frecuentes

Pregunta Respuesta
¿Puedo usarlo en Windows? Sí – un compilador C y la biblioteca BLAS opcional construyen el binario; MPS es exclusivo de macOS.
¿Necesito una GPU? No estrictamente; la compilación generic funciona en CPU. Los backends GPU simplemente aceleran la inferencia.
¿Qué pasa con la descarga de 16 GB? El binario puede ejecutarse con pesos mapeados en memoria (--mmap), permitiendo que sistemas de 8 GB generen imágenes sin cargar todo el modelo RAM.

Conclusión

Flux 2‑c lleva la generación de imágenes de última generación a los desarrolladores que buscan rendimiento sin el estrangulamiento de un tiempo de ejecución Python o CUDA. Su huella huella minúscula, soporte opcional de GPU y la posibilidad de integrar la biblioteca en proyectos C/C++ la hacen ideal para sistemas embebidos, computación de borde o simplemente como una herramienta CLI divertida para artistas. Clone, compile y comience a crear—su terminal ahora puede pintar obras maestras de forma gratuita.

Artículo original: Ver original

Compartir este artículo