Video aspect ratios by Sume row: Kling 3, Gemini, Wan 3.0, MiniMax H3

Which aspect_ratio values each Sume video row takes: kling-3 has three, Gemini two, Wan and MiniMax add adaptive, and MiniMax adds 21:9. From the catalog.

4 min readSume
All posts

The accepted aspect_ratio values differ by row in Sume's Video Router catalog. kling-3 takes 16:9, 9:16 and 1:1. gemini-omni-flash-1.1 takes only 16:9 and 9:16, and its edit mode takes none. wan-3.0 adds auto and adaptive plus 4:3 and 3:4. The two MiniMax H3 rows list adaptive and 21:9 on top of the common set. A value outside a row's list is rejected, so check before you fan out a batch.

The lists

These come from the catalog rows read on 2026-10-04. Seedance and the other rows are not shown here; read them live with the models route.

Aspect ratios per Sume video id (catalog read 2026-10-04)
IdAccepted aspect_ratio values
kling-316:9, 9:16, 1:1
gemini-omni-flash-1.1 (text to video)16:9, 9:16
wan-3.0auto, adaptive, 16:9, 4:3, 1:1, 3:4, 9:16
minimax-h3adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16
minimax-h3-maxadaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16

Practical consequences

Three things follow from the lists. Square clips are not available on the Gemini row, so a 1:1 feed post needs another id. Ultra-wide 21:9 is only a MiniMax H3 choice in this set. And adaptive lets the provider follow your input image shape, which is useful when your image set mixes orientations.

  • Vertical 9:16 works on all five rows listed above.
  • 1:1 works on kling-3, wan-3.0 and both MiniMax rows.
  • 21:9 works on the MiniMax rows only.

Validate before submitting

A small guard in your own code saves a failed request. This reads the live list for one id and checks your value.

import asyncio
import os

import httpx


async def main() -> None:
    headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
    async with httpx.AsyncClient(headers=headers, timeout=30) as client:
        r = await client.get("https://api.sume.com/v1/video-router/models/kling-3")
        r.raise_for_status()
        ratios = r.json()["data"]["model"]["capabilities"]["aspect_ratios"]
    want = "21:9"
    print(want, "ok" if want in ratios else f"not in {ratios}")


asyncio.run(main())

Where to read more

The Video Router page documents the catalog and the model route. The Video generation page covers the /v1/videos route. Reserve and refund rules for a rejected request are on generation admission.

Sources

Related posts

More in Models

All Models posts

Written by Sume