Flux 2 Klein 純粋 C 推論

2026/01/19 3:01

Flux 2 Klein 純粋 C 推論

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

ドキュメントは、テキストから画像および画像から画像へのタスクの両方をサポートする純粋なC実装であるFLUX.2‑klein‑4B画像生成モデルについて説明しています。外部依存関係はC標準ライブラリのみで、HuggingFace から小さな Python スクリプト (

pip install huggingface_hub
) を介して VAE、Transformer、Qwen3‑4B エンコーダ、トークナイザを含む約16 GBの事前学習済み重みをロードします。Apple の Silicon 上では Metal Performance Shaders、Linux/Intel macOS では BLAS(OpenBLAS)によるオプションの高速化が可能で、最大約30倍の速度向上と Apple マシン上で自動的に GPU を使用します。

ライブラリは単純な C API (

flux_load_dir
flux_generate
flux_img2img
など) を公開しており、ユーザーのプロジェクトへリンクできます。サンプルコードではプログラムから画像を生成または変換する方法が示されています。またコマンドライン利用も可能で、例として
./flux -d flux-klein-model -p "prompt" -o out.png
(テキスト→画像)や
-i input.png
-t strength
を付けて画像→画像を実行します。オプションには幅/高さ(64–1024 px、16ピクセル単位)、ステップ数(デフォルト 4)、シード、quiet/verbose フラグが含まれます。

プロンプトのエンコード後、Qwen3‑4B エンコーダは自動的に解放され(約8 GB が解放)拡散中のピークメモリを約16 GB に抑えます。複数のプロンプトが同じエンコーダを再利用でき、再ロードは不要です。サポートされる最大解像度は 1024×1024 ピクセル、最小は 64×64 で、VAE のダウンサンプリングにより 16 の倍数に制限されています。

MIT ライセンスの下で配布されるこのパッケージは、軽量かつ依存関係がないため組み込みシステム、高性能サーバー、クロスプラットフォームアプリケーションに適しています。オープンソースおよび商用プロジェクトの両方で広く採用されることを奨励します。

本文

FLUX.2‑klein‑4B Pure C実装

このプログラムは、Black Forest Labs の FLUX.2‑klein‑4B モデルを用いてテキストプロンプト(およびオプションで他の画像)から画像を生成します。
ライブラリとしても利用可能で、C だけで実装されており、標準ライブラリ以外に依存はありません。MPS と BLAS のアクセラレーションは任意ですが推奨です。


概要

  • ゼロ行の手作業コードで書かれた最初のオープンソースプロジェクト。すべてのロジックは Claude Code(Claude Max プラン)によって生成されました。
  • 量子化やモデル変換は不要です。float 重みを含む safetensors ファイルをそのまま使用します。
  • このコードベースは、Python スタックに依存しない推論システムが実用的であることを示し、オープンモデルの利用を解放し AI をより身近なものにしています。

クイックスタート

# ビルド(バックエンドを選択)
make mps        # Apple Silicon (最速)
make blas       # Intel Mac / Linux で OpenBLAS 使用時
make generic    # 純粋 C、依存なし

# モデルダウンロード (~16 GB)
pip install huggingface_hub
python download_model.py

# 画像生成
./flux -d flux-klein-model -p "A woman wearing sunglasses" -o output.png

推論時には Python ランタイム、PyTorch、CUDA ツールキットは不要です。


サンプル出力

./flux -d flux-klein-model \
       -p "A picture of a woman in 1960 America. Sunglasses. ASA 400 film. Black and White." \
       -W 250 -H 250 -o /tmp/woman.png

画像→画像変換:

./flux -d flux-klein-model -i /tmp/woman.png \
       -p "oil painting of woman with sunglasses" -v -H 256 -W 256 \
       -o /tmp/woman2.png

主な機能

機能説明
依存なし純粋 C 実装で、単体動作可能。
BLAS アクセラレーション約30倍速(macOS では Apple Accelerate、Linux では OpenBLAS)。
Metal GPU アクセラレーションApple Silicon Mac なら自動有効化。
テキスト→画像・画像→画像プロンプトから生成するか既存の画像を変換。
統合テキストエンコーダQwen3‑4B が組み込まれており、外部埋め込み計算不要。
メモリ効率エンコーダは使用後自動解放(約8 GBが開放)。

使い方

テキスト→画像

./flux -d flux-klein-model \
       -p "A fluffy orange cat sitting on a windowsill" \
       -o cat.png

画像→画像(スタイル転送)

./flux -d flux-klein-model \
       -p "oil painting style" \
       -i photo.png \
       -o painting.png \
       -t 0.7

-t
(strength) は画像の変化量を制御します。

  • 0.0 – 変更なし(出力=入力)
  • 1.0 – 完全生成(入力は構図ヒントのみ)
  • 0.7 – スタイル転送に適したバランス

コマンドラインオプション

オプション短縮形説明
-d, --dir PATH
モデルディレクトリへのパス(必須)。
-p, --prompt TEXT
生成用テキストプロンプト(必須)。
-o, --output PATH
出力画像パス (.png または .ppm)(必須)。
生成
-W, --width N
出力幅 (デフォルト 256)。
-H, --height N
出力高さ (デフォルト 256)。
-s, --steps N
サンプリングステップ数 (デフォルト 4)。
-S, --seed N
再現性のための乱数シード。
画像→画像
-i, --input PATH
img2img 用入力画像。
-t, --strength N
画像変更量 (0.0–1.0、デフォルト 0.75)。
出力
-q, --quiet
静かなモード(何も表示しない)。
-v, --verbose
詳細設定とタイミング情報を表示。
その他
-e, --embeddings PATH
事前計算済みテキスト埋め込みのロード(上級者向け)。
-h, --help
ヘルプを表示。

再現性

乱数シードは必ず stderr に出力されます。

$ ./flux -d flux-klein-model -p "a landscape" -o out.png
Seed: 1705612345
out.png

同じ画像を再生成するには、印刷されたシードを使用します:

./flux -d flux-klein-model -p "a landscape" -o out.png -S 1705612345

ビルド

ビルド時にバックエンドを選択

make            # 利用可能なバックエンド一覧表示
make generic    # 純粋 C、依存なし(遅い)
make blas       # BLAS アクセラレーション (~30倍高速)
make mps        # Apple Silicon Metal GPU (最速、macOS 限定)

推奨設定

  • macOS Apple Silicon:
    make mps
  • macOS Intel:
    make blas
  • Linux OpenBLAS 使用時:
    make blas
  • Linux で OpenBLAS 未使用時:
    make generic

make blas
(Linux)の手順

# Ubuntu/Debian
sudo apt install libopenblas-dev

# Fedora
sudo dnf install openblas-devel

その他のターゲット

make clean      # ビルドアーティファクトを削除
make info       # このプラットフォームで利用可能なバックエンド表示
make test       # 参照画像テスト実行

モデルダウンロード

モデル重みは HuggingFace から取得します。

pip install huggingface_hub
python download_model.py

これにより

./flux-klein-model
に約16 GBがダウンロードされます:

コンポーネントサイズ
VAE (AutoencoderKL)~300 MB
Transformer~4 GB
Qwen3‑4B テキストエンコーダ~8 GB
Tokenizer

技術詳細

モデル構成

コンポーネント説明
Transformer5 ダブルブロック + 20 シングルブロック、隠れ次元 3072、注意ヘッド数 24
VAEAutoencoderKL、128 ラティットチャネル、8×空間圧縮
テキストエンコーダQwen3‑4B、36 層、隠れ次元 2560

推論は「ディルクションモデル」で 4 ステップ のサンプリングを使用します。

メモリ要件

フェーズ推定メモリ
テキストエンコード~8 GB(エンコーダ重み)
ディフュージョン~8 GB(トランスフォーマー約4 GB + VAE 約300 MB + 活性化)
ピーク~16 GB(エンコーダが解放されていない場合)

テキストエンコーダは使用後自動で解放され、ディフュージョン時のピークメモリを削減します。異なるプロンプトで複数画像を生成する際には、エンコーダが再ロードされます。

解像度制限

  • 最大: 1024 × 1024 ピクセル(それ以上は膨大なメモリが必要)
  • 最小: 64 × 64 ピクセル
  • VAE の下り圧縮係数により、寸法は必ず 16 の倍数である必要があります。

C ライブラリ API

libflux.a
をリンクし、
flux.h
をインクルードしてください。

コア関数

flux_ctx *flux_load_dir(const char *model_dir);   /* モデルをロード、失敗時は NULL */
void flux_free(flux_ctx *ctx);                     /* すべてのリソース解放 */

flux_image *flux_generate(flux_ctx *ctx,
                          const char *prompt,
                          const flux_params *params);
flux_image *flux_img2img(flux_ctx *ctx,
                         const char *prompt,
                         const flux_image *input,
                         const flux_params *params);

画像操作

flux_image *flux_image_load(const char *path);     /* PNG または PPM をロード */
int flux_image_save(const flux_image *img, const char *path);  /* 0=成功、-1=エラー */
flux_image *flux_image_resize(const flux_image *img,
                              int new_w, int new_h);
void flux_image_free(flux_image *img);

ユーティリティ

void flux_set_seed(int64_t seed);                  /* 乱数シード設定(再現性) */
const char *flux_get_error(void);                  /* 最後のエラーメッセージ取得 */
void flux_release_text_encoder(flux_ctx *ctx);     /* 手動で ~8 GB を解放(任意) */

パラメータ構造体

typedef struct {
    int width;              /* 出力幅 (デフォルト 256) */
    int height;             /* 出力高さ (デフォルト 256) */
    int num_steps;          /* デノイズステップ数、klein 用は 4 (デフォルト 4) */
    float guidance_scale;   /* CFG スケール、klein 用は 1.0 (デフォルト 1.0) */
    int64_t seed;           /* 乱数シード、-1 はランダム (デフォルト -1) */
    float strength;         /* img2img のみ: 0.0–1.0 (デフォルト 0.75) */
} flux_params;

#define FLUX_PARAMS_DEFAULT { 256, 256, 4, 1.0f, -1, 0.75f }

サンプルプログラム

テキスト→画像生成

#include "flux.h"
#include <stdio.h>

int main(void) {
    flux_ctx *ctx = flux_load_dir("flux-klein-model");
    if (!ctx) {
        fprintf(stderr, "Failed to load model: %s\n", flux_get_error());
        return 1;
    }

    flux_params params = FLUX_PARAMS_DEFAULT;
    params.width = 512;
    params.height = 512;
    params.seed = 42;          /* -1 はランダムシード */

    flux_image *img = flux_generate(ctx,
                                    "A fluffy orange cat in a sunbeam",
                                    &params);
    if (!img) {
        fprintf(stderr, "Generation failed: %s\n", flux_get_error());
        flux_free(ctx);
        return 1;
    }

    flux_image_save(img, "cat.png");
    printf("Saved cat.png (%dx%d)\n", img->width, img->height);

    flux_image_free(img);
    flux_free(ctx);
    return 0;
}

コンパイル例:

# macOS
gcc -o myapp myapp.c -L. -lflux -lm -framework Accelerate

# Linux
gcc -o myapp myapp.c -L. -lflux -lm -lopenblas

画像→画像変換

#include "flux.h"
#include <stdio.h>

int main(void) {
    flux_ctx *ctx = flux_load_dir("flux-klein-model");
    if (!ctx) return 1;

    flux_image *photo = flux_image_load("photo.png");
    if (!photo) {
        fprintf(stderr, "Failed to load image\n");
        flux_free(ctx);
        return 1;
    }

    flux_params params = FLUX_PARAMS_DEFAULT;
    params.strength = 0.7;     /* 0.0: 変更なし、1.0: 完全再生成 */
    params.seed = 123;

    flux_image *painting = flux_img2img(ctx,
                                       "oil painting, impressionist style",
                                       photo,
                                       &params);
    flux_image_free(photo);

    if (!painting) {
        fprintf(stderr, "Transformation failed: %s\n", flux_get_error());
        flux_free(ctx);
        return 1;
    }

    flux_image_save(painting, "painting.png");
    printf("Saved painting.png\n");

    flux_image_free(painting);
    flux_free(ctx);
    return 0;
}

エラーハンドリング

失敗する可能性のある関数は

NULL
を返します。
flux_get_error()
で説明を取得してください。

flux_ctx *ctx = flux_load_dir("nonexistent-model");
if (!ctx) {
    fprintf(stderr, "Error: %s\n", flux_get_error());
    /* 例: "Failed to load VAE - cannot generate images" */
}

ライセンス

MIT © Salvatore
すべてのソースファイルは MIT ライセンスで公開されています。

同じ日のほかのニュース

一覧に戻る →

2026/01/19 2:40

ガウス・スプラッティング ― A$AP ロッキー「ヘリコプター」ミュージックビデオ

## Japanese Translation: ## Summary: A$AP Rocky の新しい「Helicopter」ビデオは、ライブアクション撮影におけるブレークスルーを示しています。動的ガウシアン・スプラッティング(dynamic Gaussian splatting)という手法により、カメラ映像が即座にレンダリング可能な体積データへ変換されます。56 台の RGB‑D カメラからなる大規模アレイを使用してチームは 10 TB 超の原始映像と約 30 分間の事前レンダリング済みスプラッティングコンテンツを生成しました。Houdini(シーケンス作業)、OctaneRender(ライティング調整)、Blender(レイアウト・プロキシキャッシュ)を組み合わせることで、セット上で数秒以内にショットのプレビューが可能となり、重いポストプロダクション作業に入る前に迅速なクリエイティブ判断を行うことができました。 これは A$AP Rocky の 2023 年に「Shittin’ Me」で実施した NeRF ベースの放射場(radiance fields)実験を踏襲しています。現在のワークフローは、各テイク後すぐにライブ空間フィードバックとメッシュプレビューを提供することで、動的ガウシアン・スプラッティングの最も高度な実世界利用例の一つです。この手法は、体積キャプチャがリアルなモーションを保持しながら、監督に広範なポストプロダクションの柔軟性を提供できることを示しています。 広く採用されれば、この技術はミュージックビデオ、映画、広告などを変革し、セット上のリソース削減、ワークフロー高速化、アーティストやスタジオにとっての創造的可能性拡大につながるでしょう。

2026/01/18 17:18

ソーシャル・ファイルシステム

2026/01/19 6:05

**警察は数百万ドルを投資し、影の電話追跡ソフトウェアに費やす―使用方法は明かさない** 米国各地の警察署が、秘密裏に開発された電話追跡ソフトウェアに数百万ドルを投入しています。しかし、当局はその技術がどのように利用されているか、また何らかのデータを収集しているかについて公表することを拒否しています。プライベート企業によって開発された本プログラムは、最初は行方不明者の捜索や容疑者のリアルタイム追跡という法執行機関向けツールとして市場に投入されました。しかし批判派は、その機能が適切な監視を欠いたまま市民の大規模監視を可能にする恐れがあると主張しています。 多額の投資にもかかわらず、ソフトウェアが実際に広範囲で展開されているか、また既存のデータ収集システムとの連携方法については公的な報告がありません。いくつかの機関はまだ有効性を試験中と主張し、他の機関は「初期段階にある」ため、さらなる法的検討が完了するまでリリースされないと述べています。 透明性の欠如はプライバシー擁護者の懸念を呼び起こしています。彼らは、このようなツールが不差別的に使用された場合、憲法上の保護を迂回する可能性があると警告しています。デジタル監視に対するより厳格な規制を議論する中で、本ソフトウェアを取り巻く継続的な秘密主義は、その実際の影響について多くの疑問を解決できていません。

## Japanese Translation: > 本稿では、テキサス州および連邦法執行機関が「Cobwebs Technologies」のAI駆動型監視ツール「Tangles」に数百万ドルを投入した経緯について検証する。TanglesはWebLocプラットフォームのアドオンで、オープンウェブ・ディープウェブ・ダークウェブからデータをスクレイピングし、ジオフェンス機能によりモバイルデバイスを追跡できるため、ワラントなしで携帯電話を監視することが可能である。 > > ゴリアド郡警察は2021年6月、疑わしい人身売買事件と関連付けられた捨てられたレシートを発見した後に初めてこのツールを使用し、技術訓練を受けていない保安官ロイ・ボイドはiPhone 10を使用し続けながら州境界安全補助金から約30万ドルのライセンスを取得した。以来、テキサス州の機関(公共安全局が2021年に20万ドル、2024年に530万ドルで230ユーザーを対象とする支出、ICEが2025年に約200万ドル、DEAが2025年に1000万ドル超)もTanglesを購入している。 > > ボイドのタスクフォースは「確実な原因を見つける道筋」をソフトウェアが提供したと主張するが、ツールに直接結び付く逮捕や起訴は存在しないと認めている。公的記録によれば、Tanglesへの国内支出が最低でも800万ドルであるにもかかわらず、そのデータに関連する逮捕や起訴の文書化は確認されていない。 > > 2023年にCobwebsを買収したPenLink Ltd. は、Tanglesをオープンソース情報プラットフォームとして市場に投入し、デバイスIDのみ(名前ではなく)を返すと述べる。また、特定の契約については言及せず、プライバシー法への準拠を主張している。会社の経営陣には元DEAエージェントが含まれており、同社と連邦機関との間に循環的な関係があることを示唆している。 > > エルサルバドルでは2020年にTanglesが購入され、その後の刑法改正により州警察は市民に対するワラントなし監視を実施できるようになった。他のテキサス州機関(ダラス、ヒューストン、キルーイン、モンタゴ)は主に犯罪分析または状況認識のためにTanglesを使用しているが、WebLoc機能の利用は稀である。 > > 議会努力(Capriglioneによる下院法案など)はAIツール使用の開示を義務付けようとしたが妥協され、テキサス州法では警察がレポートにAI展開を記録することを要求していない。機関が高度な監視ツールを追求し続ける中で、ワラントなしモニタリングの拡大リスクは高まり、「Carpenter v. U.S.」によって設定された憲法上の基準に照らして重大な市民自由への懸念が生じている。

Flux 2 Klein 純粋 C 推論 | そっか~ニュース