Phone clip with rotation metadata: vertical? Read video inspect
A phone MP4 can store 1920x1080 pixels plus a rotation tag and play as vertical. Read width, height and rotation from video inspect before you judge a Short.

Not from width and height alone. A phone can record 1920x1080 stored pixels with a rotation tag of 90, and a player shows it as 1080x1920 vertical. Sume's video inspect returns width, height and rotation in its probe, so compute the displayed shape yourself: swap width and height when rotation is 90 or 270. Do that before you apply YouTube's square-or-vertical rule for Shorts.
The rule you are checking
YouTube Help: Understand three-minute Shorts, read 2026-10-04, says Shorts are square or vertical videos up to 3 minutes and that 16:9 stays long-form. So the aspect test has to run on displayed dimensions. A raw stored-pixel check of a rotated clip would call a vertical phone video landscape.
| Stored w x h | rotation | Displayed w x h | Square or vertical? |
|---|---|---|---|
| 1080 x 1920 | 0 | 1080 x 1920 | Yes, vertical |
| 1920 x 1080 | 90 | 1080 x 1920 | Yes, vertical |
| 1920 x 1080 | 0 | 1920 x 1080 | No, landscape |
| 1080 x 1080 | 0 | 1080 x 1080 | Yes, square |
Read the probe
Video inspect is a probe on one Sume-hosted clip and returns duration_seconds, width, height, rotation and fps among others. Pass frames: false to skip stills. Import the clip first with POST /v1/media-imports, because the video must be on media.sume.com.
def displayed(width, height, rotation):
if rotation in (90, 270, -90, -270):
width, height = height, width
return width, height
def shorts_shape(width, height, rotation, seconds):
w, h = displayed(width, height, rotation)
return h >= w and seconds <= 180
print(shorts_shape(1920, 1080, 90, 45)) # TrueWhat to do with the answer
If the clip is landscape, a vertical Short means either a crop or a letterbox. Video filter crops with fractions of the frame, and Timeline 1.0 renders 1080x1920 by default with fit set to cover, contain, stretch or blur per slot. If the probe reports a duration above 180 s, video trim cuts it, since output can be 0.2 to 900 s. The docs read here do not say how trim treats a rotation tag, so probe the output as well.
Sources
Related posts
More in Developers
- Phone-quality TTS: 8 kHz mu-law on Sume and where MAI Flash fits
Sume's TTS output_format accepts 8000 Hz and pcm_mulaw in wav or raw. What that gives a phone system, what it does not, and how MAI Flash is positioned.
- Pick seedance-2 or seedance-2.5 in code by clip length, with price
A small Python helper that sends clips up to 15 s to seedance-2 and longer ones to seedance-2.5, with the 720p price from Sume token math. Runs as written.
- Pick a subtitle translation model with a 20-cue pilot
Vendor benchmark scores do not tell you how a model handles your captions. Run the same 20 cues through each candidate, burn them, and compare on screen.
- Pin AI music model ids: music_v2_5, v6, lyria-3.5 and sume/music-auto
Which model id to pin for ElevenLabs Music, Suno and Google Lyria, and what Sume does with sume/music-auto. A config table and a rule for logging the engine.
Written by Sume