Wix Stores product video: 50 MB limit and an AI clip
Wix Stores takes AVI, MP4, MOV or MPEG product video up to 50 MB. Measure a Sume clip, then shorten it, drop audio or conform its size with video trim.

Wix Stores accepts product videos in AVI, MP4, MOV and MPEG, up to 50 MB each (Wix Help Center, read 2026-10-03). A short Sume clip will usually fit, but the API does not let you set a bitrate, so measure the file before you upload, and shrink it with the video trim endpoint if it is over.
This post is about the product-page video in Wix Stores. It is a different limit from Wix Video's, which another post in this series covers.
What does Wix Stores say about product video?
The Help Center article covers images, GIFs and videos in one place. For video it names the formats and the size, and gives the dashboard path: Products, select a product, Add Media, then pick a video or Upload Media (read 2026-10-03). It also says a video hosted on a platform like YouTube cannot be uploaded as media. You add that link to the product description or the product info section instead.
| Item | What the Wix page says |
|---|---|
| Video formats | AVI, MP4, MOV, MPEG |
| Size | Up to 50 MB |
| Add a file | Products, select product, Add Media, Upload Media |
| External video | Link it in the description or info section |
| Media per option | Link to each option choice, not to each variant |
| Image ratios | 16:9, 3:2, 4:3, 1:1, 3:4, 2:3, 9:16; square is recommended for mobile |
How do you check the size of a Sume clip?
Download the finished video and measure it. The Sume video flow is: submit to POST /v1/videos, poll GET /v1/videos/{id} until it is done, then read the file from GET /v1/videos/{id}/content?index=0. The script below does the last step and compares the result with 50 MB. It uses 50,000,000 bytes, the stricter reading of Wix's 50 MB, so a file that passes here passes under either definition. The video id is the argument. Nothing is written to disk unless the file fits.
import os, sys, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
job = sys.argv[1]
r = requests.get(f"https://api.sume.com/v1/videos/{job}/content?index=0",
headers=H, timeout=120)
r.raise_for_status()
size = len(r.content)
print(f"{size / 1e6:.1f} MB")
if size <= 50_000_000:
open(f"{job}.mp4", "wb").write(r.content)
print("fits the Wix Stores limit")
else:
print("over 50 MB: shorten, drop audio, or conform to a smaller size")What can you change at generation time?
Two parameters move file size in the direction you want. duration sets the length in whole seconds, and resolution picks the output tier. Models differ, so read supported_durations and supported_resolutions from GET /v1/videos/models before a batch. Seedance 2, for example, lists 480p, 720p and 1080p and 4 to 15 seconds there. For a product-page loop, five seconds at 720p is a sensible start.
generate_audio is also a request field and defaults to the model's capability. A silent product loop does not need a soundtrack, and Wix's page does not ask for one. You can turn audio off at generation, or keep one source clip with sound and drop the audio in the trim step, which keeps your options open if the same clip also goes to a channel that plays sound. Either way, the size check at the end decides.
How do you shrink a clip that is over 50 MB?
Video trim cuts a range out of a Sume-hosted clip into a new MP4, and its optional fields cover exactly what you need. audio: "drop" removes the soundtrack. output conforms the result to a width, height (each 256 to 2160) and fps of 24, 25, 30 or 60, and works only with precision: "exact", the default frame-accurate re-encode. The Sume docs list a public rate of $0.02 per job and say to confirm it live in GET /v1/catalog.
Lower resolution and frame rate normally shrink a file, but the docs make no size promise, so run the size check again on the output. The source must be a media.sume.com clip in your workspace, which a Sume-generated video is. For a file from elsewhere, import it first with POST /v1/media-imports; off-host URLs are refused. Trim defaults to async, so pass mode: "sync" to wait up to 30 seconds for a finished job, or poll.
curl -sS -X POST https://api.sume.com/v1/video-trim \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: wix-trim-sku-1042-v1" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"start": 0,
"duration": 6,
"audio": "drop",
"output": {"width": 720, "height": 720, "fps": 24}
}'What should you check before you upload to Wix?
There is no GET /v1/video-trim/{id}. Poll the job at GET /v1/jobs/{id}/status, then read GET /v1/jobs/{id}/result. It returns kind: video_trim with a new video_url and duration_seconds, and the source is untouched. Download that new file and run the size check again before you upload it. The same result also carries an output field and optional warnings, for example when an end point past the source was clamped, so log both.
- Measure every file. Do not assume a 5 second clip is under 50 MB.
- Keep one source clip and make the trimmed copy from it, so you can redo the shrink at a different size.
- Read
warnings[]on the trim result before you trust the cut. - Add a square image alongside the video, since Wix recommends 1:1 for mobile.
- Use a distinct Idempotency-Key per SKU and version for both the generation and the trim.
Sources
Related posts
More in Integrations
- How to add an MCP server to ChatGPT with developer mode
Turn on ChatGPT developer mode, create an app for the server's URL, and sign in with OAuth. The steps, with Sume's hosted MCP server as the example.
- How to add subtitles to a video in Python
Add subtitles to a video in Python with Requests: POST the video URL to Sume's /v1/video-captions, poll the job, then read the captioned video_url.
- Add Sume to Claude as a custom connector (remote MCP)
Add Sume's hosted MCP server to Claude under Customize > Connectors, see what Sume's OAuth consent grants, and decide whether to allow paid tools.
- Airflow HTTP sensor: wait for an AI video job to finish
Submit an AI video job with Airflow's HttpOperator, then wait with an HttpSensor in reschedule mode that passes once the job's status is completed.
Written by Sume