flux-txt2img について
Flux を使った ComfyUI のテキストから画像を生成するワークフローを扱うスキルガイドです。Flux.1 Dev SRPO、Flux 2 Klein 9B、Flux 2 Turbo LoRA のモデル接続、プロンプト条件付け、サンプラー設定を説明します。
主な機能
- 01Flux ワークフローの三つの構成
- 02モデルとエンコーダーの設定
- 03ガイダンスとプロンプト条件付け
- 04モデル別のサンプラー設定
- 05解像度と VRAM の指針
- 06LoRA の適用
活用シーン
- 01Flux.1 Dev SRPO のグラフ構築
- 02蒸留版 Klein による4ステップ生成
- 03Turbo LoRA によるサンプリングの高速化
- 04プロンプトに応じたガイダンスと解像度の調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ artokun/ comfyui-mcp --skill flux-txt2imgインストール後、Claude Code で/flux-txt2imgを入力して読み込まれたか確認します。
詳細
Flux テキストから画像を生成するワークフロー
概要
Flux は、Black Forest Labs のガイダンス蒸留拡散モデルファミリーです。KSampler CFG(常に 1.0 に設定する必要があります)の代わりに、専用の FluxGuidance ノードを使用します。ローカルでは 3 種類のバリアントを利用できます。
- Flux.1 Dev SRPO. SRPO アライメントでファインチューニングされた Flux.1 Dev です。DualCLIPLoader(T5XXL + CLIP-L)を使用します。BF16 専用です。
- Flux 2 Klein 9B. Flux 2 の蒸留バリアントです。単一の CLIPLoader(Qwen3-8B)+
flux2-vae.safetensorsを使用します。4 ステップで高速に生成できます。 - Flux 2 Turbo LoRA. Flux.1 Dev に適用し、4 ステップで生成します。
モデル
Flux.1 Dev SRPO
| コンポーネント | ノード | モデル | 備考 |
|---|---|---|---|
| UNET | UNETLoader | flux.1-dev-SRPO-BFL-bf16.safetensors | 22.7GB、BF16 専用 — FP8 では正常に生成できません |
| CLIP | DualCLIPLoader (type=flux) | clip_name1: t5xxl_fp8_e4m3fn.safetensors、clip_name2: clip_l.safetensors | T5XXL(4.7GB)+ CLIP-L(235MB) |
| VAE | VAELoader | ae.safetensors | 標準 Flux VAE(320MB)。Z-Image も同じ VAE アーキテクチャ を使用しますが、重みは異なります。Z-Image の VAE は別ファイル(z-image-ae.safetensors)であり、こちらではありません |
Flux 2 Klein 9B
| コンポーネント | ノード | モデル | 備考 |
|---|---|---|---|
| UNET | UNETLoader | bigLove_klein1.safetensors | 17.3GB、Klein 9B バリアント |
| CLIP | CLIPLoader (type=flux2) | qwen_3_8b_fp8mixed.safetensors | text_encoders/ 内の Qwen3-8B(8.3GB)。flux2 を使用してください。flux ではありません。どちらも列挙型に存在しますが、flux はサンプラーで失敗します |
| VAE | VAELoader | flux2-vae.safetensors | Flux 2 専用 VAE(321MB) |
Klein 9B と Flux.1 Dev の違い:Klein は T5XXL + CLIP-L ではなく、Qwen3-8B テキストエンコーダーを使用します。VAE も異なり(flux2-vae.safetensors)、別のものを使用します。蒸留版 9B は 4 ステップで動作します。ベース版 9B では CFG 5.0 で約 50 ステップが必要です。FP8 では約 20GB の VRAM に収まります。
Flux 2 Turbo LoRA(Flux.1 Dev に適用)
| コンポーネント | ノード | モデル | 備考 |
|---|---|---|---|
| LoRA | LoraLoaderModelOnly | flux2-turbo-lora.safetensors | 2.6GB、強度 1.0 |
| 代替 LoRA | LoraLoaderModelOnly | Flux2TurboComfyv2.safetensors | コミュニティ版、同じサイズ |
コンディショニング
CLIPTextEncodeFlux(Flux.1 Dev に推奨)
各テキストエンコーダーに個別のプロンプト欄を用意します。
{
"class_type": "CLIPTextEncodeFlux",
"inputs": {
"clip": ["<dual_clip>", 0],
"clip_l": "short prompt for CLIP-L",
"t5xxl": "detailed description for T5XXL",
"guidance": 3.5
}
}
clip_l は主要な意味的特徴を捉えます。t5xxl は説明を拡張し、洗練します。簡単に使う場合は、両方の欄に同じプロンプトを入力してください。ガイダンスはこのノードに組み込まれているため、別途 FluxGuidance を使用する必要はありません。
FluxGuidance(代替方法)
CLIPTextEncodeFlux ではなく標準の CLIPTextEncode を使う場合は、ガイダンスを別途適用します。
{
"class_type": "FluxGuidance",
"inputs": {
"conditioning": ["<clip_text_encode>", 0],
"guidance": 3.5
}
}
ガイダンス値
| シナリオ | ガイダンス | 備考 |
|---|---|---|
| 短いプロンプト | 3.5–4.0 | プロンプトへの追従性が高まります |
| 長い/複雑なプロンプト | 1.0–1.5 | 創造性の幅が広がります |
| リアリズム | 2.5 | 肌の光沢を抑え、ディテールを豊かにします |
| 標準 | 3.5 | ほとんどの用途でのデフォルト値 |
ネガティブコンディショニング
Flux は、従来のネガティブプロンプトに対応していません(ガイダンス蒸留済み、CFG=1.0)。ConditioningZeroOut を使用してください。
{
"class_type": "ConditioningZeroOut",
"inputs": { "conditioning": ["<positive_cond>", 0] }
}
または、ネガティブ入力に空の CLIPTextEncode を使用してください。
サンプラー設定
Flux.1 Dev SRPO
| パラメーター | 標準 | 備考 |
|---|---|---|
| steps | 20 | 範囲:20–28 |
| cfg | 1.0 | 常に 1.0 — ガイダンスは FluxGuidance を介して適用します |
| sampler_name | ipndm | SRPO の作者推奨 |
| scheduler | beta | SRPO の作者推奨 |
| guidance | 3.5 | CLIPTextEncodeFlux または FluxGuidance を介して設定します |
| denoise | 1.0 |
SRPO の作者は ipndm/beta の組み合わせを推奨しています。標準の Flux 設定(euler/simple)も使用できますが、このファインチューニングモデルでは ipndm/beta のほうが良い結果になります。
Flux 2 Klein 9B(蒸留版)
| パラメーター | 値 | 備考 |
|---|---|---|
| steps | 4 | 蒸留モデルでは 4 ステップが最適です |
| cfg | 1.0 | 常に 1.0 |
| sampler_name | euler | |
| scheduler | simple | |
| denoise | 1.0 |
Flux 2 Klein 9B(ベース/未蒸留)
| パラメータ | 値 | 備考 |
|---|---|---|
| steps | 50 | 最高品質 |
| cfg | 5.0 | ベースモデル向けのより高い CFG |
| sampler_name | euler | |
| scheduler | simple |
Flux.1 Dev + Turbo LoRA
| パラメータ | 値 | 備考 |
|---|---|---|
| steps | 4 | Turbo 蒸留済み |
| cfg | 1.0 | |
| sampler_name | euler | |
| scheduler | simple | |
| lora_strength | 1.0 |
解像度
| アスペクト | 解像度 | メガピクセル |
|---|---|---|
| 正方形 | 1024x1024 | 1.0MP |
| ポートレート 3:4 | 896x1152 | 1.0MP |
| ランドスケープ 4:3 | 1152x896 | 1.0MP |
| ランドスケープ 16:9 | 1344x768 | 1.0MP |
| ポートレート 9:16 | 768x1344 | 1.0MP |
Flux はネイティブで約 1 メガピクセルで動作します。寸法は 8 の倍数にする必要があります。
プロンプトスタイル
自然言語による記述。SDXL/Illustrious とは異なり、品質タグは不要です。詳細で説明的なプロンプトが最も効果的です。
Good: "A young woman with auburn hair sits at a sunlit cafe in Paris, wearing a cream linen blazer, soft bokeh background, shot on Sony A7III 85mm f/1.4"
Bad: "masterpiece, best quality, 1girl, cafe, paris"
完全なワークフロー: Flux.1 Dev SRPO
{
"1": { "class_type": "UNETLoader", "inputs": { "unet_name": "flux.1-dev-SRPO-BFL-bf16.safetensors", "weight_dtype": "default" }},
"2": { "class_type": "DualCLIPLoader", "inputs": { "clip_name1": "t5xxl_fp8_e4m3fn.safetensors", "clip_name2": "clip_l.safetensors", "type": "flux" }},
"3": { "class_type": "VAELoader", "inputs": { "vae_name": "ae.safetensors" }},
"4": { "class_type": "CLIPTextEncodeFlux", "inputs": {
"clip": ["2", 0],
"clip_l": "<short prompt>",
"t5xxl": "<detailed prompt>",
"guidance": 3.5
}},
"5": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["4", 0] }},
"6": { "class_type": "EmptyLatentImage", "inputs": { "width": 896, "height": 1152, "batch_size": 1 }},
"7": { "class_type": "KSampler", "inputs": {
"model": ["1", 0],
"positive": ["4", 0],
"negative": ["5", 0],
"latent_image": ["6", 0],
"seed": 42, "steps": 20, "cfg": 1, "sampler_name": "ipndm", "scheduler": "beta", "denoise": 1
}},
"8": { "class_type": "VAEDecode", "inputs": { "samples": ["7", 0], "vae": ["3", 0] }},
"9": { "class_type": "SaveImage", "inputs": { "images": ["8", 0], "filename_prefix": "flux_srpo" }}
}
完全なワークフロー: Flux 2 Klein 9B(蒸留、4 ステップ)
{
"1": { "class_type": "UNETLoader", "inputs": { "unet_name": "bigLove_klein1.safetensors", "weight_dtype": "default" }},
"2": { "class_type": "CLIPLoader", "inputs": { "clip_name": "qwen_3_8b_fp8mixed.safetensors", "type": "flux2" }},
"3": { "class_type": "VAELoader", "inputs": { "vae_name": "flux2-vae.safetensors" }},
"4": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["2", 0], "text": "<prompt>" }},
"5": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["4", 0] }},
"6": { "class_type": "EmptyFlux2LatentImage", "inputs": { "width": 1024, "height": 1024, "batch_size": 1 }},
"7": { "class_type": "KSampler", "inputs": {
"model": ["1", 0],
"positive": ["4", 0],
"negative": ["5", 0],
"latent_image": ["6", 0],
"seed": 42, "steps": 4, "cfg": 1, "sampler_name": "euler", "scheduler": "simple", "denoise": 1
}},
"8": { "class_type": "VAEDecode", "inputs": { "samples": ["7", 0], "vae": ["3", 0] }},
"9": { "class_type": "SaveImage", "inputs": { "images": ["8", 0], "filename_prefix": "flux_klein" }}
}
Klein は単一の CLIPLoader(DualCLIPLoader ではない)を type: "flux2" とともに使用し、text_encoders/ にある Qwen3-8B テキストエンコーダーを利用します。CLIP ローダーのパスは models/text_encoders/ から解決されます。
Flux-2 固有の注意点は、いずれもローダーではなく KSampler で失敗するため、エラーが誤ったノードを指し示します:
typeはfluxではなくflux2でなければなりません。両方の値が CLIPLoader の列挙型に存在するため、fluxは問題なく読み込まれ、その後サンプリング中に停止します。EmptyLatentImageではなくEmptyFlux2LatentImageを使用してください。Flux 2 は異なる潜在チャネル数を使用します。- Klein 9B は Qwen3-8B エンコーダー(
Comfy-Org/vae-text-encorder-for-flux-klein-9bのqwen_3_8b*)と組み合わせます。似た名前のqwen_3_4bは klein-4b リポジトリに含まれており、4B モデル用です。これらを不一致にするとmat1 and mat2 shapes cannot be multiplied (512x7680 and 12288x4096)が発生します。ここで 7680 = 2560x3(4B の隠れ次元)であり、12288 = 4096x3(8B)です。これは誤ったファイルのエラーではなく、紛らわしい CLIP エラーとして表示されます。
完全なワークフロー: Flux.1 Dev + Turbo LoRA(4 ステップ)
{
"1": { "class_type": "UNETLoader", "inputs": { "unet_name": "flux.1-dev-SRPO-BFL-bf16.safetensors", "weight_dtype": "default" }},
"2": { "class_type": "LoraLoaderModelOnly", "inputs": { "model": ["1", 0], "lora_name": "flux2-turbo-lora.safetensors", "strength_model": 1.0 }},
"3": { "class_type": "DualCLIPLoader", "inputs": { "clip_name1": "t5xxl_fp8_e4m3fn.safetensors", "clip_name2": "clip_l.safetensors", "type": "flux" }},
"4": { "class_type": "VAELoader", "inputs": { "vae_name": "ae.safetensors" }},
"5": { "class_type": "CLIPTextEncodeFlux", "inputs": {
"clip": ["3", 0],
"clip_l": "<short prompt>",
"t5xxl": "<detailed prompt>",
"guidance": 3.5
}},
"6": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["5", 0] }},
"7": { "class_type": "EmptyLatentImage", "inputs": { "width": 1024, "height": 1024, "batch_size": 1 }},
"8": { "class_type": "KSampler", "inputs": {
"model": ["2", 0],
"positive": ["5", 0],
"negative": ["6", 0],
"latent_image": ["7", 0],
"seed": 42, "steps": 4, "cfg": 1, "sampler_name": "euler", "scheduler": "simple", "denoise": 1
}},
"9": { "class_type": "VAEDecode", "inputs": { "samples": ["8", 0], "vae": ["4", 0] }},
"10": { "class_type": "SaveImage", "inputs": { "images": ["9", 0], "filename_prefix": "flux_turbo" }}
}
LoRA サポート
カスタム LoRA(jellyfish など)
UNET と KSampler の間で LoraLoaderModelOnly を使用して Flux LoRA を適用します:
{
"class_type": "LoraLoaderModelOnly",
"inputs": {
"model": ["<unet_or_previous_lora>", 0],
"lora_name": "<lora_file>.safetensors",
"strength_model": 1.0
}
}
Klein LoRA
Klein 9B LoRA は loras/Flux.2 Klein 9B/ サブフォルダーに配置します:
klein_slider_detail.safetensors、詳細スライダー LoRA
VRAM の考慮事項
| モデル | VRAM | 備考 |
|---|---|---|
| SRPO BF16 + DualCLIP | ~24GB | RTX 4090 をちょうど使い切ります。BF16 を使用する必要があります — SRPO では FP8 は壊れています |
| Klein 9B FP8 + Qwen3-8B | ~20GB | 4090 に余裕を持って収まります |
| SRPO + Turbo LoRA | ~24GB | SRPO ベースと同じ |
- 別のモデルファミリーから Flux に切り替える前に、常に
clear_vramを実行してください - T5XXL は UNET と並ぶ主要な VRAM 消費元です。どちらもサンプリング中はロードされたままになります
- CLIP-L は小さく(235MB)、無視できる程度です
ヒント
- KSampler の CFG は常に 1.0 でなければなりません。すべてのガイダンスは
CLIPTextEncodeFluxまたはFluxGuidanceを通じて行います - SRPO には BF16 が必要です。FP8 量子化はこのファインチューニングで壊れた結果を生成することが知られています
- 短いプロンプト(1〜2 文)の場合、ガイダンスを 3.5 から 4.0 に上げてください。長いプロンプト(段落)の場合、1.0 から 1.5 に下げてください
- Flux は画像内に優れたテキストを生成します。レンダリングするテキストはプロンプト内で引用符で囲んでください
- Klein 9B は 4 ステップで最速の選択肢です。迅速な反復に使用し、最終的な品質のために SRPO に切り替えてください
出典
- 公式: 見つかりませんでした。
- 実証的:
packs/内の動作するグラフおよび観察されたレンダリングからのサンプラー値、配線、プロンプトの注意点。ベンダーのプロンプトガイドではありません。