AI video generator for YouTube: get 16:9 from a Sume Format
Sume's first-party example prompts are vertical. To get a 16:9 YouTube video from a Format, say so in instruction and check the width and height.

To get a landscape YouTube video from a Sume Format, write the ratio into the run's instruction and then read the finished file's size from the receipt. Do not assume the Format's default. Sume's own example prompts for the catalog Formats ask for 9:16, and some Formats are vertical by definition.
What do we actually know about the default?
Two facts are documented. First, the docs say instruction is placed after the Format body, so it wins where the two do not agree. Second, the first-party example prompt for the close-camera UGC Format reads "Create a 9:16 close-camera UGC ad", and the card for sume-fruits-drama says it makes a vertical clip about 5 seconds long, so that one is not a YouTube candidate.
What the docs do not publish is a default ratio for each catalog Format. So treat the instruction as a request, not a guarantee, and verify the output.
| Question | Answer from the docs | Action |
|---|---|---|
Does instruction override the Format? | Yes, where they disagree | State 16:9 and the use, for example a YouTube video |
| Is there a ratio field on the run? | No such field in the request table | Put it in instruction |
| Can I see the output size? | artifacts[] carries width, height, duration_ms | Assert width > height |
| Which models do 16:9 natively? | GET /v1/videos/models lists supported_aspect_ratios | Check before pinning a model |
Ask, then assert
Send the run with the ratio in plain words and a per-run cap, then read the receipt. The docs list width and height on each artifact, and they can be null, so the script below treats a missing size as a failure to investigate, not a pass. It needs SUME_API_KEY and a run id.
import json, os, sys, urllib.request
def receipt(run_id):
req = urllib.request.Request(
f"https://api.sume.com/v1/format-runs/{run_id}",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]})
with urllib.request.urlopen(req) as r:
return json.load(r)["data"]
def landscape(data):
vids = [a for a in data["artifacts"] if a["type"] == "video"]
return bool(vids) and all(
a.get("width") and a.get("height") and a["width"] > a["height"]
for a in vids)
if __name__ == "__main__":
d = receipt(sys.argv[1])
print(d["status"], "landscape" if landscape(d) else "CHECK SIZE")What about YouTube's own rules?
YouTube's help page, read today, says realistic altered or synthetic content must be disclosed, and gives fantastical scenes such as a unicorn as an example that does not need a label. It also lists AI-generated music as something to disclose. A product ad made from your own packshot is yours to judge against that page; Sume does not apply a label for you.
If you want a specific model rather than the Format's choice, pin it through POST /v1/videos instead, after reading supported_aspect_ratios in the video catalog.
Sources
Related posts
More in Formats
- Black Friday ads for cosmetics and apparel: which Sume Formats
Adobe expects $9.2B in cosmetics and $51.3B in apparel online this season. Which Sume beauty and fashion Formats fit, and which are still, video or try-on.
- Black Friday ads for electronics and furniture: Sume Formats
Adobe forecasts $63.3B in electronics and $33.4B in furniture online this season. Which Sume Formats show a gadget in use or a room before and after.
- enum and const in a Sume output schema: a status that cannot drift
Use enum and const in a Sume output_schema to pin a status field to values your publisher expects, since oneOf and allOf are rejected. Examples that pass.
- 400 previous_run_format_mismatch: continue a run on its own Format
Continuing a Format run on a different Format returns 400 previous_run_format_mismatch. Call the Format where the run started, or start a new run.
Written by Sume