1. ComfyUIのセグメント|SAM 3.1・しきい値・個別のマスク・動画

ComfyUI

ComfyUIのセグメント|SAM 3.1・しきい値・個別のマスク・動画

編集部 読了 約15分

  • SAM3 は、ComfyUI でどう使うの?
  • 「sofa」のように言葉で物を指して、マスクを自動で作りたい
  • segment anything のワークフローを、動画の場合まで知りたい

ComfyUI(コンフィユーアイ)で画像の一部を直すときは、直す範囲をマスク(白黒で範囲を示す画像)で決めます。しかし、家具の形に沿ってマスクを手で描くのは手間がかかります。

SAM 3.1 は、画像や動画の中から、英語の言葉で指した物の形を切り分けるモデルです。この記事では、SAM 3.1 で物を見つけてマスクにする方法を解説します。

見つける数と確からしさの設定、動画の中の物をフレーム(動画の1コマ)をまたいで追いかける方法も分かります。

画面:ComfyUI v0.37.0 ポータブル版(Windows・2026年9月)

SAM 3.1を使う前に

チェックポイントを読み込むのノード。ckpt名の欄で sam3.1_multiplex_fp16.safetensors を選んでいる
SAM 3.1 のモデルは、画像を作るモデルと同じ「チェックポイントを読み込む」で読む

SAM 3.1 は、画像や動画の中から、言葉で指した物の形を切り分けるモデルです。Meta が作ったモデルで、ノードの名前は「SAM3」で始まります。

画像を物ごとに切り分けることを、セグメンテーション(セグメント)と呼びます。

SAM 3.1 を使うのは、ComfyUI に初めから入っている組み込みのノードです。始める前に知っておくことは、次の4つです。

  • モデルのファイルは sam3.1_multiplex_fp16.safetensors の1つ。Hugging Face(AI のモデルを配るサイト)の Comfy-Org/sam3.1 で配られていて、ライセンスは Meta の SAM License
  • 落としたファイルは ComfyUI/models/checkpoints に置く。ポータブル版では ComfyUI_windows_portable\ComfyUI\models\checkpoints にあたる。ComfyUI を開いたまま置いたときは、キャンバスの上でRキーを押すとモデルの一覧が読み直される
  • ノード(処理を1つずつ受け持つ部品)は、キャンバス(ノードを並べる真ん中の広い所)の何も無い所をダブルクリックして開く「ノード検索」に、名前を打って置く。初めからあるノードは、そのまま残しておいてかまわない
  • マスクの形は、マスクを白黒で見せるノード「MaskPreview」で見る。日本語の表示でも、名前は英語のまま
ComfyUIの画面の全体。左の列、真ん中のキャンバス、右上の「実行する」
ComfyUI の画面。左の列・真ん中のキャンバス・右上の実行する

この記事では、ノードの名前を日本語の表示で書きました。画面が英語なら、左の列の設定(歯車)を押し、Language を日本語にします。

SAM3検出で画像の中の物をマスクにする

チェックポイント・CLIPテキストエンコード・画像を読み込む・SAM3検出・MaskPreview をつないで実行したところ
居間の画像から、「sofa:3」で見つけたソファのマスク(MaskPreview の白い所)

「SAM3検出」(SAM3_Detect)は、画像と言葉を受け取り、言葉で指した物のマスクを出すノードです。SAM3検出の使い方は、次の2つです。

  • ソファのマスクを作る
  • 見つける数を指定する

ソファのマスクを作る

居間の画像から、ソファの形のマスクを作ります(手元の部屋の画像でもかまいません)。

使うのは、チェックポイントを読み込む・CLIPテキストエンコード・画像を読み込む・SAM3検出・MaskPreview の5つのノードです。

SAM 3.1のモデルを読む

ノード検索でチェックポイントを読み込むを置き、ckpt名の欄を押して sam3.1_multiplex_fp16.safetensors を選びます。

ckpt名の欄に sam3.1_multiplex_fp16.safetensors が入りました。使う出力は、モデルとCLIP(打った言葉を読み取る部品)の2つです。

指す言葉を打つ

ノード検索でCLIPテキストエンコード(プロンプト)を置き、チェックポイントのCLIPの出力からクリップの入力へドラッグします。テキストの欄に sofa:3 と打ってください。

CLIPテキストエンコードのノード。文字の欄(sofa:3)を赤い枠で囲んでいる
「:3」は、最大で3つまで見つけるという指定

欄に sofa:3 が入りました。右の条件付けから、この言葉がモデルの読める形になって出ます。

物を探す画像を読み込む

ノード検索で画像を読み込むを置き、アップロードするファイルを選択を押して、ソファの写る画像を選びます。

ノードの中に、選んだ画像が出ました。

「SAM3検出」を置いてつなぐ

ノード検索でSAM3検出を置き、チェックポイントのモデルをmodelへ、画像の画像をimageへ、CLIPテキストエンコードの条件付けをconditioningへドラッグします。

SAM3検出のmodel・image・conditioningの3つが、つながりました。

MaskPreviewにつないで実行する

SAM3検出のmasksの出力から線を引き出し、何も無い所で離して開くノード検索でMaskPreviewを選びます。右上の実行するを押してください。

MaskPreview に、ソファの形の白いマスクが出ました。

これで、言葉で指したソファの形のマスクができました。masksの出力は、マスクを受け取るほかのノードにもつなげます。

見つける数を指定する

SAM3検出では、言葉のあとに「:数」を付けないと、見つかるのは1つだけです。テキストの欄を sofa と sofa:3 にして比べると、見つかる数が変わります。

左が sofa、右が sofa:3 で見つかった所を赤く重ねた画像
sofa では真ん中のソファだけ、sofa:3 では左の大きなソファまで見つかった

いくつかの物を指すときは、sofa:3, window:2 のようにカンマで区切り、物ごとに数を付けます。指す言葉は、sofa や window のような短い英語の名前です。

SAM3検出のthresholdとindividual_masks

threshold を 0.2・0.5・0.8 にして、見つかった所を赤く重ねた画像
同じ「sofa:3」で、threshold だけを変えた。0.2 と 0.5 は同じ、0.8 では何も見つからなかった

SAM3検出の見つけ方は、ノードの下の3つの欄で変えます。3つの欄と初めの値を、次の表にまとめました。

欄初めの値働き
threshold0.50見つけたと見なす確からしさの下限(0〜1)。大きいほど、確かな物だけが残る
refine_iterations2マスクの形を整え直す回数(0〜5)。0 は整え直さない
individual_masksfalsetrue にすると、見つけた物を1つずつ別のマスクで出す

threshold と individual_masks の使い方は、次の2つです。

  • thresholdを変える
  • 物ごとにマスクを分ける

thresholdを変える

見つからないときは threshold を下げ、ほかの物まで入るときは上げます。

「threshold」の欄を押す

SAM3検出のノードのthresholdの欄を押し、試す数(たとえば 0.8)を打ってEnterキーを押します。

SAM3検出のノード。「threshold」の欄を赤い枠で囲んでいる
thresholdの初めの値は 0.50

欄に、打った数が入りました。

実行して比べる

右上の実行するを押し、MaskPreview のマスクを見ます。

MaskPreview の白い所が、threshold に合わせて変わりました。試したあとは、thresholdを 0.50 に戻しておきます。

物ごとにマスクを分ける

individual_masks を false のままにすると、見つけた物はすべて1つのマスクにまとまります。true にすると、見つけた物ごとに別のマスクが出ます。

「individual_masks」をtrueにする

SAM3検出のノードの一番下のindividual_masksの欄を押します。

SAM3検出のノード。「individual_masks」の欄を赤い枠で囲んでいる
押すたびに false と true が入れ替わる

欄が false から true に変わりました。

実行して確かめる

sofa:3 のまま、右上の実行するを押します。

individual_masks を true にして出た3つのマスクを、それぞれ赤く重ねた画像
1つめは真ん中のソファ、2つめは左のソファ、3つめはソファ全体

MaskPreview に、見つけた物ごとに分かれた3枚の白黒のマスクが並びました。

SAM3ビデオトラックで動画の中の物を追いかける

1フレーム目・36フレーム目・72フレーム目に、追いかけたマスクを赤く重ねた画像
3秒・72フレームの動画。写る範囲が右へ動いても、ソファの形を追いかけている

「SAM3ビデオトラック」(SAM3_VideoTrack)は、動画の中の物を、フレームをまたいで追いかけるノードです。

動画では「:数」は使われず、追いかける数の上限はmax_objectsの欄で決まります。

動画を読み込むノードは、「ComfyUIの動画の読み込みと書き出し|Load Video・Save Video・VideoHelperSuite」(準備中)の記事で解説します。

SAM3ビデオトラックの使い方は、次の2つです。

  • ソファを追いかける
  • 動画のノードの設定

ソファを追いかける

始める前に、チェックポイントを読み込むで sam3.1_multiplex_fp16.safetensors を選び、そのCLIPにつないだCLIPテキストエンコード(プロンプト)に sofa と打っておきます。

動画を読み込む

ノード検索でビデオを読み込むを置き、アップロードするファイルを選択を押して、動画を選びます。

ノードに、選んだ動画が読み込まれました。

動画をフレームの画像に分ける

ノード検索でビデオコンポーネントの取得を置き、ビデオを読み込むのビデオの出力を、置いたノードのビデオの入力へドラッグします。

このノードの画像の出力から、フレームが1枚ずつの画像として出るようになりました。

「SAM3ビデオトラック」をつなぐ

ノード検索でSAM3ビデオトラックを置きます。

ビデオコンポーネントの取得の画像をimagesへ、チェックポイントのモデルをmodelへ、CLIPテキストエンコードの条件付けをconditioningへドラッグしてください。

SAM3ビデオトラックのノード。左の3つの入力に画像・モデル・条件付けがつながっている
images・model・conditioningがつながり、右のtrack_dataから追いかけた結果が出る

SAM3ビデオトラックのimages・model・conditioningの3つが、つながりました。

マスクとプレビューのノードをつなぐ

ノード検索でSAM3トラックからマスクとSAM3トラックプレビューを置き、SAM3ビデオトラックのtrack_dataを2つにつなぎます。

SAM3トラックからマスクの出力にはノード検索でMaskPreviewを置いてつなぎ、SAM3トラックプレビューのimagesにはビデオコンポーネントの取得の画像をつないでください。

追いかけた結果を、マスクと色を重ねた動画の両方で見られるようになりました。

実行する

右上の実行するを押します。

動画のワークフロー全体。SAM3ビデオトラックのノードを赤い枠で囲んでいる
SAM3トラックプレビューでは見つけた物ごとに色が変わり、MaskPreview には72枚のマスクが並ぶ

SAM3トラックプレビューに、ソファに色を重ねた動画が出ました。

これで、動画のフレームのそれぞれに、ソファのマスクができました。

動画のノードの設定

動画で使う3つのノードには、追いかけ方と見せ方を決める欄があります。欄と初めの値は、次の表のとおりです。

ノード欄初めの値働き
SAM3ビデオトラックdetection_threshold0.50見つけたと見なす確からしさの下限
SAM3ビデオトラックmax_objects4追いかける物の数の上限。0 にすると上限は 64
SAM3ビデオトラックdetect_interval1何フレームごとに見つけ直すか。大きくすると処理が軽くなる
SAM3トラックからマスクobject_indices空マスクにする物の番号(0 から数える)を「0,2」のようにカンマで指定する。空なら全部
SAM3トラックプレビューopacity・fps0.50・24重ねる色の濃さと、プレビューの動画のコマの速さ

SAM3ビデオトラックのinitial_maskの入力には、1フレーム目のマスクをつなげます。つないだマスクの物を、フレームをまたいで追いかけます。

SAM 3.1でうまくいかないとき

左が sofa、右が sofa:3 で見つかった所を赤く重ねた画像
「sofa」だけでは、真ん中のソファしか見つからなかった(左)

SAM 3.1 でうまくいかないときの症状は、次の3つです。

  • 何も見つからない
  • 1つしか見つからない
  • 動画で同じ物を追いかけられない

何も見つからない

原因の1つは、SAM3検出のthresholdが高いことです。作例では、0.8 にすると何も見つかりませんでした。

thresholdを初めの値の 0.50 に戻すか、それより下げて実行し直します。

1つしか見つからない

原因は、言葉に見つける数を付けていないことです。数を付けない言葉で見つかるのは、1つまでです。

sofa:3 のように、言葉のあとに「:数」を付けて実行し直します。

動画で同じ物を追いかけられない

原因は、動画のフレームに SAM3検出をかけていることです。SAM3検出は、フレームをまたいで同じ物を追いかける情報(track_data)を出しません。

動画では、SAM3ビデオトラックを使います。

公式のテンプレート「動画セグメンテーション: SAM3」も SAM3検出を全フレームにかける組み方なので、追いかけたいときは SAM3ビデオトラックに組み替えます。

SAM 3.1で、部屋の家具を言葉で選んでマスクにしよう

individual_masks を true にして出た3つのマスクを、それぞれ赤く重ねた画像
「sofa:3」で見つけ、物ごとに分けた3つのマスク

SAM 3.1 は、言葉で指した物の形を切り分けるモデルです。この記事の要点は、次の4つです。

  • 画像では、チェックポイントを読み込む(SAM 3.1)・CLIPテキストエンコード・画像を読み込むを SAM3検出につなぐ
  • 見つける数は「sofa:3」のように言葉のあとに付け、付けないと1つだけ
  • threshold で見つけ方の厳しさを、individual_masks で物ごとに分けるかを決める
  • 動画では SAM3ビデオトラックで追いかけ、SAM3トラックからマスクでマスクにする

まずは部屋の画像を読み込んで、sofa:3 でソファのマスクを作ってみてください。

あわせて読みたい

会員登録(無料)

記事やテーマのお気に入り・学習履歴・フォローが使えます。

この記事について

PERSC編集部が、建築の制作に関わる知識を実務目線で整理しています。内容は公開・更新日時点の情報にもとづきます。誤りや古い情報にお気づきの場合はお問い合わせよりご連絡ください。

あわせて読みたい