Flux 2 en C pur : génération d’images sans dépendances

Flux 2 en C pur : génération d’images sans dépendances

Flux 2 est la nouvelle vague de modèles de diffusion latente capables de transformer les invites en images époustouflantes en quatre étapes d’échantillonnage. Black Forest Labs a publié la petite variante « Klein » avec seulement 4 B de paramètres, mais le code d’inférence reste volumineux—16 GB de poids. Flux 2‑c vous offre une implémentation rapide, légère, pure C qui fonctionne sur macOS ou Linux sans nécessiter Python, CUDA ou une stack ML complète.

Pourquoi une implémentation en C ?

  • Aucun runtime externe – Seule la bibliothèque standard C est nécessaire, rendant le binaire portable dans tous les environnements capables de compiler du C.
  • Poids mappés en mémoire – Le mode --mmap par défaut garde les safetensors de 16 GB sur le disque et les charge à la demande, réduisant la mémoire de pointe à environ 4 à 5 GB.
  • Accélération GPU (optionnelle) – Apple Metal (MPS) sur les Macs ou BLAS sur Intel/Linux offre un gain d’environ 30× par rapport au baseline pure‑C.

Démarrage rapide

# 1. Cloner le dépôt
git clone https://github.com/antirez/flux2.c
cd flux2.c

# 2. Choisir un backend
make mps          # Apple Silicon (le plus rapide)
# make blas      # Mac Intel / Linux avec OpenBLAS
# make generic   # Pure C, sans dépendances

# 3. Télécharger le modèle de 16 GB
./download_model.sh          # script shell (curl)
# ou : pip install huggingface_hub && python download_model.py

# 4. Lancer la démo
./flux -d flux-klein-model \
       -p "Une femme portant des lunettes de soleil" \
       -o output.png

L'image apparaît immédiatement dans le terminal s’il prend en charge le protocole Kitty.

Fonctionnalités en un coup d’œil

Fonctionnalité Description
Text‑to‑Image Générer des images à partir d’invites à n’importe quelle résolution (64–1792 px).
Image‑to‑Image Utiliser des images existantes comme références via un conditionnement en contexte.
Multi‑Reference Combiner jusqu’à 16 images de référence pour des compositions.
CLI Interactive Omettre -p pour démarrer un REPL qui mémorise les IDs de référence.
Aperçu d’image en terminal --show / --show-steps affiche les images directement dans Kitty/Ghostty/iTerm2.
API Sans Dépendances Exporter une bibliothèque C simple (libflux.a) avec flux_generate() et flux_img2img().
PNGs riches en métadonnées Les images incluent la graine et les infos du modèle dans les métadonnées PNG pour la reproductibilité.
Benchmarks Sur un M3 Max avec 4 étapes, MPS pure‑C génère 512×512 en ~13 s, égalant PyTorch.

Construction à partir du code source

Prérequis – un compilateur C, optionnellement OpenBLAS pour la cible blas ou Apple Accelerate pour mps.

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

Exécutez make pour lister les backends disponibles. Chaque cible construit un binaire qui sélectionne automatiquement le chemin le plus rapide pour votre plateforme.

Utiliser la bibliothèque dans votre propre projet

#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, "A fluffy orange cat", &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;
}

Compilez avec gcc -o myapp myapp.c -L. -lflux -lm -framework Accelerate (macOS) ou l’équivalent OpenBLAS.

Débogage & Comparaison avec Python

Le dépôt inclut un dossier debug/ avec des scripts Python qui affichent les tenseurs exacts de la référence Black Forest. Lancez le binaire C avec --debug-py pour vérifier l’équivalence pixel‑par‑pixel.

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

C’est inestimable pour les vérifications de sanity quand vous ajustez les poids du modèle ou les tokenizers.

FAQ

Question Réponse
Puis-je l’utiliser sur Windows ? Oui – un compilateur C et la bibliothèque BLAS optionnelle construiront le binaire ; MPS est exclusif à macOS.
Ai-je besoin d’une GPU ? Pas strictement ; la version generic fonctionne sur CPU. Les backends GPU accélèrent simplement l’inférence.
Qu’en est‑il de la mise à jour de 16 GB ? Le binaire peut fonctionner avec des poids mappés en mémoire (--mmap), permettant aux systèmes de 8 GB de générer des images sans charger l’ensemble du modèle en RAM.

Conclusion

Flux 2‑c apporte la génération d’images de pointe aux développeurs souhaitant des performances sans le fardeau d’un runtime Python ou CUDA. Sa petite empreinte, son support GPU optionnel et la possibilité d’intégrer la bibliothèque dans des projets C/C++ le rendent idéal pour les systèmes embarqués, le edge computing ou simplement un outil CLI ludique pour les artistes. Clonez, construisez et commencez à créer — votre terminal peut désormais peindre des chefs‑d’œuvre gratuitement.

Original Article: Voir l’original

Partager cet article