AI model holding your product: photos and video via API

Pose an AI model with your product via the Sume API: sume-model-product-portrait for stills, sume-beauty-studio for video, or image edits you control.

5 min readSume
All posts

To make a photo or a video of an AI model holding your product with the Sume API, run a catalog Format at POST /v1/formats/sume/{slug}/runs with the packshot attached and the pose requested in instruction: sume-model-product-portrait makes a still and sume-beauty-studio makes a video. To control each step, make the still on POST /v1/images from product and model reference images, then animate it on POST /v1/videos as the first frame.

The facts below come from Sume's Format catalog, Format API, Image API, and Video generation docs, read on 2026-09-27. A presenter who speaks about the product is a different route, covered in AI avatar video with your product and background.

Which Format makes the still, and which makes the video?

Both descriptions are about beauty: they name skincare and cosmetics. The last clause gives the output: “Not for: animated or motion deliverables” marks the still, and “Not for: static campaign deliverables” marks the video. The quoted wording is each Format's stated aim, not a guarantee about any one result.

Quoted from each Format's description, which GET /v1/formats/sume/{slug} returns; slugs from the Format catalog, read 2026-09-27.
SlugOutputStated aimUse when the brief is for
sume-model-product-portraitImage“intimate beauty framing, natural skin, accurate packaging, and editorial composure”“skincare endorsements, cosmetic portrait campaigns, and model-led product stills”
sume-beauty-studioVideo“a model, cosmetic product, soft editorial lighting, and polished tabletop or vanity styling”“skincare launches, makeup campaigns, beauty product reels, and clean studio brand films”

Can the model hold the product?

Neither description says how the product is posed. Name the pose in instruction, for example “the model holds the jar at chin height”. The instruction is composed after the Format body and wins where they disagree, but it is still a request, so review what comes back.

Attach the packshot as an input_image with a public HTTPS URL. You can attach a photo of a specific person too, but the portrait description does not say it takes a supplied person, as the sume-virtual-fitting description does (“on a supplied person”). Only send photos of people who agreed to it.

curl -sS -X POST "https://api.sume.com/v1/formats/sume/sume-model-product-portrait/runs" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: serum-portrait-v1" \
  -d '{
    "instruction": "The model holds the serum bottle at chin height.",
    "attachments": [
      { "type": "input_image", "image_url": "https://example.com/serum.png" }
    ],
    "generation_spend_cap_usd": 10
  }'

How do I make the still myself?

Send the packshot and a model photo to POST /v1/images as input_references. ChatGPT Image 2.5 (openai/gpt-image-2.5) takes up to 16 image references. Other models publish their own input_references range on GET /v1/images/models, and a model whose maximum is 0 is text-to-image only. Reference URLs must be public HTTPS.

  • data[].url in the response is Sume-hosted and signed. Host the still you pick at your own public HTTPS URL before you reuse it as a video frame.
curl -X POST https://api.sume.com/v1/images \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-image-2.5",
    "prompt": "Beauty portrait: the model holds the serum bottle at chin height, soft window light",
    "input_references": [
      { "type": "image_url", "image_url": { "url": "https://example.com/serum.png" } },
      { "type": "image_url", "image_url": { "url": "https://example.com/model.jpg" } }
    ]
  }'

How do I turn the portrait into a video?

Run sume-beauty-studio with the same packshot, or send your chosen still to POST /v1/videos in frame_images with frame_type: "first_frame", which sets the clip's first frame, and describe the motion in prompt. Check the model's supported_durations and supported_aspect_ratios on GET /v1/videos/models first. How first frames and references differ for packaging is covered in Product logo warping in image-to-video.

Video models do not lip-sync to generated TTS or to a later voice-over, so a model who speaks belongs on the avatar route linked above.

What does each path cost?

A Format run's generation is metered at the API pricing rates and capped by generation_spend_cap_usd, up to $500 per run. Image generation is all-or-nothing: a completed generation is billed in full, and a failed or canceled one is not billed. Each image model's pricing line on GET /v1/images/models/{model_id}/endpoints already includes Sume's margin. A video job is reserved on submit at the provider's list price × 1.25, plus a 5.5% agent fee by default.

What are the limits?

The inputs on each path are bounded:

From Format API, Create a run, and Image API, read 2026-09-27.
InputLimit
Format run attachmentsUp to 30 images: JPEG, PNG, WebP, GIF, or AVIF, 30 MB each and 500 MB per run.
Format run instructionUp to 8,000 characters; about the first 4,000 reach the run as prompt text.
ChatGPT Image 2.5 input_referencesUp to 16 images.
POST /v1/images n1–10 images per call; per-model ceilings are lower.
POST /v1/images waitBlocks up to 30 seconds and answers 200; a longer generation answers 202 with a job to poll.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume