見出し画像

【#4】Hires Fixの構築(データ配布有り)【ComfyUI講座】【2025年版】

今回は「Hires Fixの構築」を実践していきます。ワークフローは第一回に作ったものを使います。ModelはNoobAI(NAI-XL)を使用していますが、第二回を参考にお好きなModelを使っていただいて構いません。


1.json「第一回で作成したワークフロー」

空のファイルを新規作成し、このjsonをD&Dするとワークフローが展開されます。

Hires Fixとは?

A1111系ではUIに組み込まれていますが、ComfyUIでは自分で作らなければなりません。

Hires Fix(High Resolution Fix)は、低解像度で一度画像を生成し、その後、高解像度へとアップスケール&再描画する手法です。

🔧 主な目的

  • 高解像度生成時のノイズ・崩れ・バグ を防ぐ

  • 高精細なディテールを描く

  • 解像度依存の破綻(顔のゆがみ、構図崩れ)を避ける

🧠 なぜ必要?

  • 直接高解像度を生成しようとするとVRAM負荷が増大+画像品質が不安定になります。

  • Hires Fixは2段階に分けることで品質と安定性を両立します。


✅ Kサンプラーの設定例

1段階目(txt2img)

  • ステップ:24~30(推奨:28)

  • CFG:6.5~8(推奨:7.5)

  • サンプラー名:DPM++ 2M Karras(推奨)

  • スケジューラ:karras(高品質向け)

  • ノイズ除去:固定:1.0

2段階目(Hires Fix:img2img)

  • 画像を拡大(指定サイズ):1.2~2倍に設定

  • ステップ:10~20(推奨:12~16)(1段階目の半分)

  • CFG:1段階目と同じ

  • サンプラー名:1段階目と同じ

  • スケジューラ:1段階目と同じ

  • ノイズ除去:0.4~0.6(推奨:0.5)(1段階目の半分)

一般的にHires Fixに書かれている項目は上から順に「Latent Upscale」「Steps」「CFG Scale」「Sampler」「Scheduler」「Denoise」と表記されます。今回はComfyUIの表記で統一しています。


💡補足Tips

  • 高解像度は「画像を拡大(指定サイズ)」で1.2~2倍が安定

  • 顔アップのような構図はノイズ除去を0.55以上にすることでディテール向上

  • モデルごとに推奨サンプラーやCFGが指定されている場合は「1段階目」に優先して適用すべきです。

ノイズ除去の目安(参考)

  • 顔の修正(顔だけ変えたい): 0.3 くらい

  • 構図を変えずに衣装や髪型を変える: 0.5~0.6

  • 完全に作り直したいけど元画像を参考にしたい: 0.8~0.95

  • 破綻しやすく非推奨 1.0

今回構築するHires Fixを含むワークフロー

① [CLIP Text Encode (Positive)]    ② [CLIP Text Encode (Negative)]
           │                                     │
           └────────────┬────────────────────────┘
                        ▼
             🧠 1段階目:低解像度生成(txt2img)
             ┌──────────────────────────────────────────────┐
             │ [Empty Latent Image] (例: 512x768)           │
             │ [KSampler①]                                   │
             │   - Steps: 28(推奨)                          │
             │   - CFG: 7~8(推奨)                          │
             │   - Sampler: DPM++ 2M Karras(推奨)           │
             │   - Scheduler: karras                          │
             │   - Denoise: 1.0(固定)                       │
             └──────────────────────────────────────────────┘
                        ▼
                [Latent → Image] → 低解像度画像完成

                        ▼
              🧠 2段階目:Hires Fix(高解像度再描画)
             ┌──────────────────────────────────────────────┐
             │ [Latent Upscale](例:2倍、768x1152)         │
             │ [KSampler②(img2img再描画)]                 │
             │   - Steps: 12~16(推奨)                     │
             │   - CFG: 7~8(同値)                         │
             │   - Sampler: 同上(例:DPM++ 2M Karras)       │
             │   - Scheduler: 同上                           │
             │   - Denoise: 0.4~0.6(推奨) ← ここが重要!     │
             └──────────────────────────────────────────────┘
                        ▼
                [Latent → Image] → 高解像度最終画像

                        ▼
               [Preview] / [Save Image]

Hires Fixの構築

作成するノード「画像を拡大(指定サイズ)」「VAEエンコード」「Kサンプラー」「VAEデコード」

「VAEデコード」ノードと「画像を保存」ノードのワイヤーを切断します。
画面をダブルクリックして「画像を拡大(指定サイズ)」ノードを作成
画面をダブルクリックして「VAEエンコード」ノードを作成
画面をダブルクリックして「Kサンプラー」ノードを作成
画面をダブルクリックして「VARデコード」ノードを作成
先ほど切断した「VAEデコード」ノードと「画像を保存」ノードの間に、
作成した4つのノードを並べます

ノードの接続方法

画像ー画像ーピクセルで接続します。水色のワイヤー
「チェックポイントを読み込む」にあるVAEを「VAEエンコード」と「VAEデコード」のVAEに接続します。赤のワイヤー。
「チェックポイントを読み込む」にあるモデルを「Kサンプラー」のモデルに接続します。薄紫のワイヤー。
CLIPテキストエンコード(プロンプト)上とCLIPテキストエンコード(プロンプト)下を「Kサンプラー」のポジティブ(上)とネガティブ(下)に接続します。オレンジ色のワイヤー。
「VAEエンコード」の潜在を「Kサンプラー」の潜在画像に接続、「Kサンプラー」の潜在を「VAEデコード」のサンプルに接続します。ピンクのワイヤー。
「VAEデコード」の画像から「画像の保存」の画像に接続します。水色のワイヤー。
接続完了

2.json「ここまでのワークフロー」

補足:このjsonはHires Fixの値が適正ではありません。

前半は1枚目のT2imgです。
後半は2枚目のHires Fix(I2img)です。

画像を拡大(指定サイズ)の拡大方法について

スケールバイをお好みの倍率(1.2~2.0)に設定します。選択できる拡大方法はいずれもAIによる超解像ではなく、古典的な補間による拡大・縮小処理です。

  • nearest-exact(最近傍補間):荒くてドットが目立つ。高速。

  • bilinear(バイリニア補間):ラフなプレビューや簡易拡大に

  • area(面積平均補間):縮小に最適。拡大には不向き

  • bicubic(バイキュービック補間):風景や人物、汎用画像の拡大におすすめ

  • lanczos(ランチョス補間):最も高画質。輪郭がはっきりした画像に最適

割愛しますが画像拡大系カスタムノードに「ComfyUI-ESRGAN」(単なる高画質化)、「ComfyUI-Impact-Pack」(再描写と高繊細化)があります。Kサンプラーを通過する画像は鮮明であるほど有利な結果になります。ただし、高画質化と引き換えに処理速度が遅くなるためバランスが重要です。

Kサンプラー「シード」「生成後の制御」

Kサンプラーには潜在画像と合わせて「シード」を組み合わせることでノイズを生成します。シードを制御するものが「生成後の制御」です。

  • fixed:値を固定して変更しない。

  • increment:実行ごとに値を一定ステップで増加させる。

  • decrement:実行ごとに値を一定ステップで減少させる。

  • randomize:実行ごとにランダムな値を指定範囲で選択する。

つまり、

  • 生成結果を固定する場合は「fixed

  • 生成結果に不規則性をもたせる場合は「randomize

  • 生成結果を規則的な変化をもたせる場合は「increment」「decrement

T2imgのKサンプラーとHires FixのKサンプラーのシード値を同じにした場合

  • 安定した再描画をしたいとき(再現性):推奨

  • 高解像で少し表情を変えたいとき:効果が薄い

  • ランダム性を強調した再描画がしたいとき:非推奨(randomizeやincrementのほうが効果的)

【重要】値を持つノードは値を持つノードに接続出来ない

1枚目のKサンプラーにあるシードと2枚目のKサンプラーのシードをつなぐことはできない

たとえば、Kサンプラー(左)はシードに8732から始まる値を持ち、Kサンプラー(右)はシードに0という値を持っています。このように値をすでに持っているノードはつなぐことができません

次回は値の一括管理とワークフローの管理についてです。

前回:LDM、VAE、ControlNet、LoRAの導入について解説

📌 AIイラストの構成設計や生成安定化に興味がある方へ

このnoteでは再現性重視の技術を発信しています。詳細なテンプレートやLoRAは、メンバーシップで限定公開しています。


いいなと思ったら応援しよう!