Flux 2 Pure C版: Zero‑Dependency 画像生成

Flux 2 Pure C版: Zero-Dependency 画像生成

Flux 2は、プロンプトを素晴らしい画像に変換できるlatent-diffusionモデルの新しい波で、4回のサンプリングステップで実現します。Black Forest Labsは4 Bパラメータだけの小さな「Klein」バリアントをリリースしましたが、推論コードは大きく残ります—16 GB の重み。Flux 2‑cは、Python、CUDA、またはフルMLスタックを必要とせず、macOSまたはLinux上で動作する高速で軽量のpure C実装を提供します。

なぜC実装なのか?

  • 外部ランタイム不要 – C標準ライブラリのみで、Cコンパイル可能な環境ならどこでも実行可能です。
  • メモリマップド重み – デフォルトの --mmap モードは、16 GB の safetensors をディスク上に保持し、必要時に読み込み、ピークメモリを約4〜5 GBまで削減します。
  • GPU加速(オプション) – Mac では Apple Metal (MPS)、Intel/Linux では BLAS を用いると、プレーンCベースモデルより約30倍の高速化が実現します。

クイックスタート

# 1. リポジトリをクローン
git clone https://github.com/antirez/flux2.c
cd flux2.c

# 2. バックエンドを選択
make mps          # Apple Silicon (最速)
# make blas      # Intel Mac / Linux (OpenBLASと共に)
# make generic   # 純C、依存なし

# 3. 16 GBモデルをダウンロード
./download_model.sh          # シェルスクリプト (curl)
# あるいは: pip install huggingface_hub && python download_model.py

# 4. デモを実行
./flux -d flux-klein-model \
       -p "A woman wearing sunglasses" \
       -o output.png

ターミナルがKittyプロトコルをサポートしていれば、画像がすぐに表示されます。

特徴一覧

Feature Description
Text‑to‑Image どの解像度(64–1792 px)でもプロンプトから画像を生成
Image‑to‑Image 既存の画像を参照として使用(イン・コンテキスト条件付け)
Multi‑Reference 合成に最大16枚の参照画像を組み合わせられる
Interactive CLI -p を省略すると、レファレンスIDを記憶するREPLが起動
Terminal image preview --show / --show-steps で Kitty/Ghostty/iTerm2 に直接表示
Zero‑Dependency API シンプルなCライブラリ(libflux.a)をエクスポート (flux_generate()flux_img2img())
Metadata‑rich PNGs PNGメタデータにシードとモデル情報を埋め込み、再現性を保証
Benchmarks M3 Maxで4ステップの場合、純C MPSで512×512が約13 秒で生成、PyTorchと同等

ソースからのビルド

必須要件 – Cコンパイラ、blas ターゲットの場合はオプションで OpenBLAS、mps の場合は Apple Accelerate。

# macOSの場合
clang -framework Accelerate -o flux flux.c flux_h*.c ...
# OpenBLASを用いるLinux
gcc -fopenmp -L/usr/lib -lopenblas -o flux flux.c flux_h*.c ...

make を実行して利用可能なバックエンドを一覧表示します。各ターゲットは、プラットフォームに最適なパスを自動で選択するバイナリをビルドします。

ご自身のプロジェクトでライブラリを使う

#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;
}

gcc -o myapp myapp.c -L. -lflux -lm -framework Accelerate(macOS)または OpenBLAS 等の等価コマンドでコンパイルします。

デバッグとPythonとの比較

リポジトリには debug/ フォルダにPythonスクリプトが同梱され、Black Forest実装から正確なテンソルをダンプします。Cバイナリを --debug-py で実行してピクセルレベルの整合性を確認できます。

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

これは、モデル重みやトークナイザを調整する際の実用的なチェックになります。

よくある質問

質問 回答
Windowsでも使えますか? はい – CコンパイラとオプションのBLASライブラリがあればビルドできます。MPSはmacOS専用です。
GPUは必要ですか? 必須ではありません。generic ビルドはCPUで動作します。GPUバックエンドは推論を高速化します。
16 GBダウンロードは大丈夫ですか? バイナリはメモリマップド重み(--mmap)で動作でき、8 GBシステムでも重み全体をメモリにロードせずに画像生成が可能です。

結論

Flux 2‑cは、PythonランタイムやCUDAの膨大なオーバーヘッドを排除しつつ、最先端の画像生成を実装した高速で軽量のpure Cソリューションを提供します。その小さなフットプリント、オプションのGPUサポート、そしてC/C++プロジェクトへの統合の容易さは、組み込みシステム、エッジコンピューティング、またはアーティスト向けの楽しいCLIツールとして理想的です。クローン、ビルド、作成を始めましょう― あなたのターミナルが今すぐに無料で傑作を描くようになります。

この記事を共有