Winter coat lookbook clip with a size and care plate over the footage

Put a still size-and-care plate over a coat clip with Timeline compose overlay: width_ratio, margin_ratio and position set the plate, $0.02 a clip on Sume.

5 min readSume
All posts

To put a size and care plate over a winter coat clip, send the plate image and the clip to POST /v1/timeline-1.0/compose with operation: overlay and a layout that sets position, width_ratio and margin_ratio. It returns one MP4 with the plate on screen for the whole clip, and each compose job is a flat $0.02. Twelve coats cost $0.24.

Outerwear is a category where the buyer asks the same practical questions: which sizes, what fabric care, is it long or cropped. A plate that stays on screen answers them without a voice, and because it is a still you design it once in any tool and reuse it.

Overlay, not stack

Overlay and stack are different jobs. stack tiles two regions of one frame, as in a half banner. overlay leaves the video full frame and floats the still on top. In overlay, only video_fit is a valid fit, and the other layout keys are overlay-only: position (top, center or bottom), width_ratio (0.05 to 1 of the width, default 0.9, with the plate keeping its aspect) and margin_ratio (0 to 0.45 of the height, default 0.05).

Mixing the vocabularies is a 400: stack keys in an overlay request return compose_overlay_takes_no_stack_layout, and overlay keys in a stack request return compose_stack_takes_no_overlay_layout. The HTTP field is operation, not mode; mode is the usual async or sync switch.

Coat plate layout choices (read 2026-10-05)
FieldRangePlate behaviour
positiontop, center, bottomWhere the plate sits; bottom covers the least face and garment
width_ratio0.05 to 1, default 0.9Share of the frame width; the plate keeps its aspect
margin_ratio0 to 0.45, default 0.05Distance from the edge, as a share of height
video_fitcover, contain, stretchHow the clip fills the frame under the plate

Length, audio and size

Output length always comes from the video layer: video.duration, or the rest of the file from video.source_in. The still never makes the clip longer, and a duration past the end of the file is clamped with compose_duration_clamped_to_source. The ceiling is 300 seconds. The image must be a still (compose_image_not_still otherwise) and the video must be a video.

The output keeps the audio of the clip. A mute clip is only a warning, compose_video_has_no_audio, and the Timeline spine then supplies the sound when you assemble. The default output is 1080 by 1920 at the clip's own frame rate, which is the only rate that does not repeat or drop frames; set output.width and output.height to match the Timeline you assemble into so the shot is not rescaled twice.

Design the plate with a transparent or solid background at the aspect you want it to occupy. At the default 0.9 width a wide plate covers most of a portrait frame, so for a coat clip try 0.7 and a 0.06 margin, and look at one render before the batch.

A practical rule for plates: keep them to three lines of text, such as the size range, the fabric care line and the return window, and make the type big enough to read on a phone at arm's length. The plate is an image, so Sume never rewrites the words; whatever you design is what the shopper sees, and any claim on it, such as warmth ratings, has to come from your own product data.

One coat

import os
import uuid
import requests

body = {
    "operation": "overlay",
    "image": {"url": os.environ["PLATE_URL"]},   # media.sume.com still
    "video": {"url": os.environ["COAT_URL"], "duration": 8},
    "layout": {"position": "bottom", "width_ratio": 0.7, "margin_ratio": 0.06},
    "output": {"width": 1080, "height": 1920},
}
r = requests.post(
    "https://api.sume.com/v1/timeline-1.0/compose",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
             "Idempotency-Key": f"coat-{uuid.uuid4()}"},
    json=body, timeout=60)
print(r.status_code, r.json().get("request_id"))

Batch it

Run it for each coat with a stable Idempotency-Key per SKU instead of a random one, so a retry never double-bills a job. Poll each job, read video_url, and put those MP4s into one Timeline render: 12 clips of 8 seconds is 96 seconds, which bills two output minutes at $0.10 each, so the full lookbook is $0.24 for compose plus $0.20 for the render, or $0.44.

For the same pattern on sale prices see the price-plate overlay post, and for fitting a landscape clip under a plate see cover or contain in a compose stack.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume