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ツールとして理想的です。クローン、ビルド、作成を始めましょう― あなたのターミナルが今すぐに無料で傑作を描くようになります。