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
--mmappredeterminado 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.