top of page

[ComfyMaster52] 商用利用OK! 最新の StabilityAI REST API (v2beta) をComfyUIで活用しよう(後編)

更新日:4月10日


前回に引き続き、Stable Diffusion 3/3.5をComfyUI上でAPIで利用しましょう!後編はComfyUI 上でStability AIの高度な画像生成、画像編集技術としてアップスケール、Erase、inpaint、outpaint、search-and-replace、search-and-recolor、Control(画像制御)、Sketch、Structure、Style、Image-to-Videoについて学んでいきます。


[ComfyMaster51] 商用利用OK! 最新の StabilityAI REST API (v2beta) をComfyUIで活用しよう(前編) https://www.aicu.jp/post/cm-51



1. カスタムノード使用準備

今回も、以下のカスタムノード(comfyui-stability-ai-api)を使用します。このカスタムノードは、ComfyUI上でStability AI APIを実行し、その結果を画像や動画で出力するノードです。



このカスタムノードが提供する各種ノードには、APIキーを設定するウィジェット「api_key」が用意されています。ここにAPIキーを設定することで、Stability AI APIを使用可能になります。


5. ワークフローの実行

それでは、Stability AI APIをComfyUI上で実行していきます。ワークフローは、以下のGitHubリポジトリに格納されているので、こちらよりダウンロードし、ComfyUIにロードしてください。



  1. workflow_stability-creative-upscaler.json


  2. workflow_stability-image-editor_erase.json


  3. workflow_stability-image-editor_inpaint.json


  4. workflow_stability-image-editor_outpaint.json


  5. workflow_stability-image-editor_search-and-recolor.json


  6. workflow_stability-image-editor_search-and-replace.json


  7. workflow_stability-image-to-video.json


  8. workflow_stability-sketch-control.json


  9. workflow_stability-structure-control.json


  10. workflow_stability-style-control.json


  11. workflow_stability-ultra-image-generation_i2i.json


  12. workflow_stability-ultra-image-generation_t2i.json


Stable Image 生成系

前回は、workflow_stability-ultra-image-generation_t2i.json と workflow_stability-ultra-image-generation_i2i.json を使ってテキスト画像生成とimage2imageを行ってみました。以下のように男性の画像を入力し、プロンプトに「a man with afro hair」を設定し、実行すると、アフロヘアーの男性が出力されました。ControlNetなしでのimage2imageなので、顔や背景も変化してしまっていますが、入力画像とプロンプトだけで、これだけの制御が可能です。


Upscale(画像拡大・高解像度化)

UpscaleをConservative / Creative / Fastのそれぞれで試してみます。以下の150pxの画像を高解像度化してみましょう。


ワークフローは、以下のようになります。Upscale対象の画像をLoad Imageで読み込み、それを入力として使用します。

今回は、ポジティブプロンプトに以下の元画像の特徴を入力しています。


A young man with fair skin and black wavy hair, styled in a middle part, sitting in a modern indoor setting. He has deep, expressive eyes and a soft yet confident expression. He is wearing a white dress shirt with a black vest and tie, giving him a refined and elegant look. His pose is relaxed, with one hand resting near his head. The background has warm lighting, with a stylish lamp mounted on the wall and a cozy yellow cushion beside him. The atmosphere is sophisticated and inviting.

以下が比較結果です。CreativeとConservativeは4k、Fastは4倍(600x600)にUpscaleされています。Creativeは、しっかり高解像度化されていますが、変化が激しいです。Conservativeは、元画像からの変化は少ないですが、画像がぼやけてしまっており、しっかり高解像度化されていません。Fastは、元画像に近い状態で高解像度化されていますが、ところどころジャギーになっています。このように、それぞれ特徴があるので、状況による使い分けが求められます。


これらのノードの各ウィジェットの用途は以下になります。


  • image (必須)

    アップスケール対象の画像ファイル。


  • prompt (任意)

    (Creative Upscaler 等)補完・再構築時に参考となるプロンプトを指定できます。


  • `negative_prompt` (任意)

    生成結果に含めたくない要素を指定。


  • `seed` (任意)

    乱数シード。


  • `output_format` (任意)

    出力画像の形式。


  • `creativity` (任意, Creative Upscaler のみ)

入力画像に対してどれだけ創造的な補完を行うかの度合い(0.2~0.5 など)。


Edit(画像編集)

入力した画像を指定の方法で加工します。様々なスタイルで画像加工が可能です。このカスタムノードでは、ウィジェット「edit_type」により、加工方法を変えることができます。それでは、一つずつ試してみましょう。


まずはeraseです。男性の画像の後ろに照明があり、そこをマスキングして削除してみます。ここで必要なものは、入力画像・マスク、ウィジェットのseedになります。以下がワークフローです。


以下が加工前、加工後の画像の比較結果です。マスキングした照明の部分がしっかり消えていることが分かります。


次はinpaintです。男性の髪型をアフロに変えてみます。髪の部分をマスキングし、画像とマスクをノードに入力します。そして、promptに変えたい内容を指示します。今回は、アフロにしたいので、「afro」を入力します。以下がワークフローです。


以下が加工前、加工後の画像の比較結果です。マスキングした箇所だけが変更され、髪型がアフロになっていることが確認できます。


次はoutpaintです。画像を上下左右方向に指定したピクセル分だけ拡張します。指定方法は、ウィジェットのleft、right、up、downに拡張したい分のピクセル値を入力します。以下がワークフローです。


以下が加工前、加工後の画像の比較結果です。加工後は、周囲が広がっていることが分かります。


次はsearch-and-replaceです。先ほどは、マスクでインペイント先を指定しましたが、ここではプロンプトでインペイント先を指定できます。指定方法は、ウィジェットのpromptに変更したい内容、search_or_select_promptに検索対象を入力することで指定とインペイントが可能です。今回は、promptに「afro」、search_or_select_promptに「hair」と入力します。以下がワークフローです。


以下が加工前、加工後の画像の比較結果です。マスキングなしでしっかり髪型が変更されています。


次はsearch-and-recolorです。これは、指定したオブジェクトの色を変更します。search-and-replaceと同様、ウィジェットのpromptに変更したい内容、search_or_select_promptに検索対象を入力します。今回は、promptに「red」、search_or_select_promptに「hair」を入力し、髪を赤髪にしてみます。


以下が加工前、加工後の画像の比較結果です。マスキングなしで髪を認識し、色だけを変えていることが分かります。


このノードの各ウィジェットの用途は以下になります。


  • image (IMAGE)


    • 用途: 編集対象の元画像を入力します。


    • ポイント: この画像に対して指定の編集処理(消去、インペイント、アウトペイントなど)が行われます。


  • edit_type (ドロップダウン選択)


    • 用途: どの編集モードを適用するかを選択します。


    • 選択肢:


      • erase: 画像内の不要な部分を消去する(例: 傷やノイズの除去)。


      • inpaint: マスクで指定した領域を新しいコンテンツで埋める。


      • outpaint: 画像の外側(上下左右)に新たなコンテンツを追加して拡張する。


      • search-and-replace: 画像内の特定オブジェクトを別のものに置き換える。


      • search-and-recolor: 画像内の特定オブジェクトの色を変更する。


      • remove-background: 背景部分を除去する。


  • ポイント: 選んだ編集タイプによって、後続の入力項目(マスク、拡張サイズ、プロンプトの使い分けなど)の必須性や解釈が変わります。


  • prompt (STRING, マルチライン)


    • 用途: 編集内容や新たに生成したい部分の説明を記述します。


    • ポイント: たとえば「傷を消す」「背景を青空にする」など、画像に反映させたい具体的な変更内容を指示します。


  • negative_prompt (STRING, マルチライン, デフォルト: 空文字)


    • 用途: 出力画像に入れたくない要素や特徴を指定します。


    • ポイント: 例として「人を入れない」「ノイズを排除する」など、望ましくない内容を除外するために使用します。


  • mask (MASK)


    • 用途: 編集領域を指定するマスク画像を入力します。


    • ポイント: 「erase」や「inpaint」など、編集タイプによってはマスクが必須になります。マスクはグレースケールで、領域ごとの編集強度を表現します。


  • grow_mask (INT, デフォルト: 5, 範囲: 0~100, step: 1)


    • 用途: マスクのエッジを外側に拡張するピクセル数を指定します。


    • ポイント: マスク境界のぼかしや、編集領域の広がり具合を調整するために使用します。通常はデフォルト値の 5px が設定されています。


  • seed (INT, デフォルト: 0, 範囲: 0~4294967295)


  • 用途: 生成に用いる乱数シードを指定します。


  • ポイント: 0または省略するとランダムシードとなり、同じプロンプトでも毎回異なる結果が得られます。特定の結果を再現したい場合は固定の値を設定します。


  • style_preset (ドロップダウン選択, デフォルト: "none")


    • 用途: 編集に適用するスタイルのプリセットを選択します。


    • 選択肢: "none", "3d-model", "analog-film", "anime", "cinematic", "comic-book", "digital-art", "enhance", "fantasy-art", "isometric", "line-art", "low-poly", "modeling-compound", "neon-punk", "origami", "photographic", "pixel-art", "tile-texture"


    • ポイント: 選択により、画像全体の雰囲気やタッチを変えることができます。


  • output_format (ドロップダウン選択, デフォルト: "png")


    • 用途: 出力画像のファイル形式を選択します。


    • 選択肢: "png", "jpeg", "webp"


    • ポイント: 目的や利用環境に合わせて適切な形式を選んでください。


  • search_or_select_prompt (STRING, マルチライン, デフォルト: 空文字)


    • 用途: 「search-and-replace」や「search-and-recolor」などで、画像内から置換または再着色する対象を指定するためのプロンプトです。


    • ポイント: 編集対象となるオブジェクトを言語的に指定するために使います。


  • fidelity (FLOAT, デフォルト: 0.5, 範囲: 0.0~1.0, step: 0.01)


    • 用途: 「search-and-recolor」編集で、元画像の色をどの程度保持するかを決めるパラメータです。


    • ポイント: 値が高いと元の色に近い結果、低いと大きく変化した結果になります。


  • left, right, up, down (各 INT, デフォルト: 0, 範囲: 0~2000, step: 1)


    • 用途: 「outpaint」編集で、画像の各方向(左、右、上、下)にどれだけ拡張(アウトペイント)するかを指定します。


    • ポイント: 少なくとも1方向で非ゼロの値を指定する必要があります。画像の枠外にどれだけ新たなコンテンツを生成するかを制御します。


  • creativity (FLOAT, デフォルト: 0.5, 範囲: 0.0~1.0, step: 0.01)


    • 用途: 「outpaint」編集で、新たに生成される外側部分の創造性(自由度)を指定します。


    • ポイント: 値が高いほど、より自由で創造的な内容に、低いと元画像に近い結果に仕上がります。


Control(画像制御)

Stability AI APIでの画像の制御方法には、Sketch、Structure、Styleの3種類があります。それぞれどのような結果になるか、実際に動作させて確認していきます。


まずはSketchです。Sketchには、「Stability Sketch Control」ノードを使用します。Sketchは、ラフに描かれた画像を元に、プロンプトで指定された画像を生成します。今回は、ComfyUIに最初から同封されているexample.pngを参照元画像として使用し、ウィジェットのpromptに「1boy」と入力し、男性の画像を生成してみます。以下がワークフローです。


以下が生成結果です。左のラフ画を元に男の子の画像が生成されていることが分かります。


次はStructureです。Structureには、「Stability Structure Control」ノードを使用します。Structureでは、入力画像の構造を踏襲した画像を生成します。今回は、男性の画像を入力し、女性の画像を生成します。ウィジェットのpromptには「1girl」を入力します。以下がワークフローです。


以下が生成結果です。参照元画像と同じ態勢で女性が生成されていることが分かります。


最後にStyleです。Styleには、「Stability Style Control」ノードを使用します。Styleでは、入力画像のスタイルを踏襲し、プロンプトに合わせて画像を生成します。今回は、男性の画像を入力し、ウィジェット「prompt」に「1girl」を入力して生成してみます。以下がワークフローです。


以下が生成結果です。画像の雰囲気や、顔の特徴が継承されて生成されていることが分かります。


このノードの各ウィジェットの用途は以下になります。


  • image (必須)

    コントロール画像。たとえば、スケッチや入力となる元画像。


  • prompt (必須)

    生成したい画像の説明。


  • control_strength (任意)

    コントロール画像が結果に与える影響度。0~1 の値で調整。


  • negative_prompt (任意)

    結果に含めたくない内容を指定。


  • seed (任意)

    乱数シード。


  • output_format (任意)

    生成画像の形式。


  • style_preset (任意)

    参考にするスタイルのプリセット。


Image-to-Video

男性の画像を入力し、動画を生成してみます。ワークフローは以下になります。入力可能な画像サイズが制限されているため、Resize Imageノードで一度指定サイズに変更しています。


このノードの各ウィジェットの用途は以下になります。


  • image (必須)

    ビデオ生成のソース画像。サポートされる寸法例:1024x576, 576x1024, 768x768


  • seed (任意)

    乱数シード。


  • cfg_scale (任意)

    ソース画像に対する忠実度の調整。値が高いほど元画像に近い動きに。


  • motion_bucket_id (任意)

    動きの強度を調整するためのパラメータ(1~255 の値)。


7. まとめ

StabilityAI の REST API (v2beta) は、テキストから画像・3D・ビデオ生成、画像編集・アップスケールなど、さまざまなクリエイティブツールを提供しています。各エンドポイントのパラメータやレスポンスの仕様を正しく理解することで、ComfyUI のカスタムノードとして利用した際にも、柔軟かつ高品質な生成処理を実現できます。


この記事では、API の全体像と主要なエンドポイントの使い方、注意点について解説しました。ぜひ、実際に API キーを取得し、サンプルコードを試しながら自分のプロジェクトに組み込んでみてください!



Originally published at note.com/aicu on Feb 19, 2025.

Comments


bottom of page