For the complete documentation index, see llms.txt. This page is also available as Markdown.

SAM3

Use Meta's SAM3 model through our Serverless Cloud API

We support Meta's Segment Anything Model 3 inferencing via our Serverless Cloud API. We offer two different SAM3 endpoints:

Training a SAM3 model on Roboflow is available on paid plans that include usage-based billing. From there, you can request access with the "Request Feature" button on the SAM3 architecture to use the feature training flow.

Fine-tuned SAM3 models cannot run on the Serverless Cloud API. Deploy them on a Dedicated Deployment or self-hosted Inference. The hosted sam3 endpoints on this page are unaffected.

Use this table to pick an endpoint:

You have
You want
Use

A text description (ex: "person")

Masks for every matching instance

/sam3/concept_segment

A box around one example object

Masks for every similar instance

/sam3/concept_segment

Text plus example boxes to include or exclude objects

Masks for every matching instance

/sam3/concept_segment

A click or a box on one specific object

A mask for that object only

/sam3/visual_segment

Pass your API key as the api_key query parameter on every request.

Concept Segmentation (PCS)

POST https://serverless.roboflow.com/sam3/concept_segment

Each entry in prompts describes one concept. The response contains one prompt_results entry per prompt, each holding every instance found. Requests accept at most 16 prompts.

Text prompts

import os
import requests

payload = {
    "image": {"type": "url", "value": "https://media.roboflow.com/inference/people-walking.jpg"},
    "prompts": [
        {"type": "text", "text": "person"},
        {"type": "text", "text": "backpack"},
    ],
    "output_prob_thresh": 0.5,
    "format": "polygon",  # or "rle"
}

response = requests.post(
    "https://serverless.roboflow.com/sam3/concept_segment",
    params={"api_key": os.environ["ROBOFLOW_API_KEY"]},
    json=payload,
)
for prompt_result in response.json()["prompt_results"]:
    print(prompt_result["echo"], len(prompt_result["predictions"]), "instances")

Images can also be sent inline as {"type": "base64", "value": "<BASE64_IMAGE>"}.

Exemplar box prompts

Instead of text, you can prompt with an exemplar: a box around one example object. The model finds every instance that matches the example, not just the boxed object.

Boxes use absolute pixel coordinates. Two formats are accepted:

  • {"x": ..., "y": ..., "width": ..., "height": ...} where x, y is the top-left corner

  • {"x0": ..., "y0": ..., "x1": ..., "y1": ...} for explicit corners

box_labels is required when boxes is set and must have one entry per box: 1 marks a positive exemplar (find objects like this), 0 marks a negative exemplar (exclude objects like this).

Combined text and exemplar prompts

A single prompt can carry both text and exemplar boxes. This is useful for narrowing a text concept with visual examples, or excluding lookalikes with negative exemplars:

Here the model segments people matching the first (positive) exemplar while suppressing instances similar to the second (negative) exemplar.

Visual Segmentation (PVS)

POST https://serverless.roboflow.com/sam3/visual_segment

PVS segments one specific object indicated by clicks or a box. Use it for interactive, human-in-the-loop mask refinement; use PCS when you want every instance of a concept.

A prompt can contain points, a box, or both:

  • points are absolute pixel coordinates. "positive": true includes the clicked region, false excludes it. Add more points to refine the mask.

  • box uses center-anchored coordinates: x, y is the box center, unlike PCS boxes which are top-left anchored.

The response contains the single highest-confidence mask for the prompt. multimask_output controls how many internal mask proposals the model generates (three when true), but the best proposal is always selected for the response.

For an interactive demo using OpenCV, see this GitHub Gist, which was used in this video:

Inference speed

Latency measured with Roboflow Inference on 1x NVIDIA L4, batch size 1, mean after warmup.

Model
Latency (ms)

sam3

251.4

Measured with concept segmentation from a single text prompt.

Endpoints

SAM3 PCS (promptable concept segmentation)

post

Concept Segmentation (Text Prompts)

Allows you to segment objects using text prompts.

Image Input: The image field accepts either:

  • {"type": "url", "value": "<IMAGE_URL>"} - A publicly accessible image URL

  • {"type": "base64", "value": "<BASE64_DATA>"} - Base64 encoded image data

Prompts: Each prompt in the prompts array should have type: "text" and a text field with the object description.

Query parameters
api_keystringRequired

Your Roboflow API Key. Get one at https://app.roboflow.com/settings/api

Body
formatstringOptional

One of 'polygon', 'rle'

Default: polygon
image_idstringOptional

Optional ID for caching embeddings.

output_prob_threshnumberOptional

Score threshold for outputs.

Default: 0.5
model_idstringOptional

The model ID of SAM3. Use 'sam3/sam3_final' to target the generic base model.

Default: sam3/sam3_final
nms_iou_thresholdnumberOptional

IoU threshold for cross-prompt NMS. If not set, NMS is disabled. Must be in [0.0, 1.0] when set.

Responses
200

Successful Response

application/json
timenumberRequired

The time in seconds it took to produce the segmentation including preprocessing

post/sam3/concept_segment
POST /sam3/concept_segment?api_key=text HTTP/1.1
Host: serverless.roboflow.com
Content-Type: application/json
Accept: */*
Content-Length: 206

{
  "image": {
    "type": "url",
    "value": "https://media.roboflow.com/notebooks/examples/dog.jpeg"
  },
  "prompts": [
    {
      "type": "text",
      "text": "person"
    },
    {
      "type": "text",
      "text": "car"
    }
  ],
  "output_prob_thresh": 0.5,
  "format": "polygon"
}
{
  "prompt_results": [
    {
      "prompt_index": 0,
      "echo": {
        "prompt_index": 0,
        "type": "text",
        "text": "dog",
        "num_boxes": 0
      },
      "predictions": [
        {
          "masks": [
            [
              [
                345,
                251
              ],
              [
                344,
                252
              ],
              [
                343,
                253
              ]
            ]
          ],
          "confidence": 0.89453125,
          "format": "polygon"
        }
      ]
    }
  ],
  "time": 0.221
}

SAM3 PVS (promptable visual segmentation)

post

Interactive Segmentation (SAM 2 Style)

SAM 3 also supports interactive segmentation using points and boxes.

Image Input: The image field accepts either:

  • {"type": "url", "value": "<IMAGE_URL>"} - A publicly accessible image URL

  • {"type": "base64", "value": "<BASE64_DATA>"} - Base64 encoded image data

Note: NumPy arrays are NOT supported on the serverless API. Use URL or base64 encoding only.

Prompts: Support point-based prompts with positive/negative clicks for interactive segmentation.

Query parameters
api_keystringRequired

Your Roboflow API Key. Get one at https://app.roboflow.com/settings/api

Body

SAM2 visual segmentation request.

image_idstringOptional

The ID of the image to be segmented used to retrieve cached embeddings. If an embedding is cached, it will be used instead of generating a new embedding. If no embedding is cached, a new embedding will be generated and cached.

Example: image_id
formatstringOptional

The format of the response. Must be one of 'json', 'rle', or 'binary'. If binary, masks are returned as binary numpy arrays. If json, masks are converted to polygons. If rle, masks are converted to RLE format.

Default: jsonExample: json
sam2_version_idstringOptional

The version ID of SAM to be used for this request. Must be one of hiera_tiny, hiera_small, hiera_large, hiera_b_plus

Default: hiera_largeExample: hiera_large
multimask_outputbooleanOptional

If true, the model will return three masks. For ambiguous input prompts (such as a single click), this will often produce better masks than a single prediction.

Default: trueExample: true
save_logits_to_cachebooleanOptional

If True, saves the low-resolution logits to the cache for potential future use.

Default: false
load_logits_from_cachebooleanOptional

If True, attempts to load previously cached low-resolution logits for the given image and prompt set.

Default: false
Responses
200

Successful Response

application/json
timenumberRequired

The time in seconds it took to produce the segmentation including preprocessing

post/sam3/visual_segment
POST /sam3/visual_segment?api_key=text HTTP/1.1
Host: serverless.roboflow.com
Content-Type: application/json
Accept: */*
Content-Length: 294

{
  "image": {
    "type": "url",
    "value": "http://www.example-image-url.com"
  },
  "image_id": "image_id",
  "prompts": [
    {
      "prompts": [
        {
          "points": [
            {
              "positive": true,
              "x": 100,
              "y": 100
            }
          ]
        }
      ]
    }
  ],
  "format": "json",
  "sam2_version_id": "hiera_large",
  "multimask_output": true,
  "save_logits_to_cache": false,
  "load_logits_from_cache": false
}
{
  "prompt_results": [
    {
      "prompt_index": 1,
      "predictions": []
    }
  ],
  "time": 1
}

Use with Inference (self-hosted)

SAM3 can also run on your own hardware, either loaded in-process with the inference package or served from a GPU container.

Run in Docker

The server exposes the same /sam3/concept_segment and /sam3/visual_segment endpoints documented above at http://localhost:9001.

Load the model in Python

Weights download automatically on first use.

Interactive segmentation in Python

Sam3ForInteractiveImageSegmentation implements the SAM2-style point and box interface, for human-in-the-loop mask refinement:

Use in Workflows

Two SAM3 image blocks are available in Workflows:

  • SAM 3 runs concept segmentation. Enter the classes you want in class_names (for example ["person", "vehicle"]) and the block outputs instance segmentation predictions that other steps can consume.

  • SAM 3 Interactive runs promptable visual segmentation. Supply labeled points (kind labeled_points), for example [{"x": 320, "y": 240, "positive": true}], and optionally connect detections from another model to the boxes field. Each box becomes a separate prompt, and its class name is forwarded to the predicted mask.

Video tracking

The SAM3 Video Tracker block (roboflow_core/sam3_video@v1) runs SAM3's streaming concept tracker frame by frame. You provide concepts as text in class_names, and the model runs fused detection and tracking on every frame. Objects matching a concept keep a stable tracker_id, and, unlike detector-seeded tracking, objects that enter the scene mid-stream are picked up automatically with no re-prompting and no upstream detection model. Each mask carries the concept it matched as its class name and the model's detection score as its confidence (filter with threshold, default 0.5).

  • Stateful and local-only. One tracking session is kept per video_metadata.video_identifier. The block requires WORKFLOWS_STEP_EXECUTION_MODE=local, a GPU, and a persistent WebRTC session.

  • No prompt scheduling. Concept prompts are registered once per session; the session is re-seeded only when the stream restarts or class_names changes. For detector-driven (box-prompted) video tracking, use the SAM2 Video Tracker block on the SAM2 page, which also accepts sam3trackervideo as model_id.

  • Model. model_id defaults to sam3video, the HuggingFace transformers port of SAM3 video, which exposes the frame-by-frame streaming interface. The native sam3 package's video predictor requires the whole video upfront and cannot be used for live streams.

SAM3-3D (beta)

SAM3-3D turns a 2D image plus masks into 3D assets: meshes and Gaussian splats.

Install the dependencies (Python 3.10 recommended):

Or build and run the 3D-enabled GPU container:

Input. An RGB image plus mask_input, which defines the object regions. Masks are accepted as binary arrays ((H, W) or (N, H, W)), COCO flat polygons, point-pair polygons, RLE dicts, or an sv.Detections object from SAM2 or another segmentation model.

Output. mesh_glb (combined scene mesh, GLB), gaussian_ply (combined Gaussian splat, PLY), objects (per-object mesh_glb, gaussian_ply, and metadata with rotation, translation, and scale), and time.

Setting SPARSE_ATTN_BACKEND and ATTN_BACKEND to flash_attn speeds up the pipeline. In Workflows, SAM3-3D supports local execution and remote execution through the sam3_3d_infer() client method or the /sam3_3d/infer endpoint.

See also

  • SAM2 - point and box prompted segmentation, plus detector-seeded video tracking.

  • Segment Anything (SAM) - the original single-object model.

Last updated

Was this helpful?