Cloudflare Stream animated GIF thumbnail vs a Sume silent MP4 clip
Cloudflare Stream builds a GIF from thumbnail.gif at 5 seconds and 8 fps by default. Sume makes no GIF; video trim returns a silent MP4 at 24 fps or more.
Cloudflare Stream makes an animated GIF from a video you have already uploaded by changing the thumbnail URL to thumbnail.gif, and it defaults to 5 seconds at 8 frames per second. Sume does not produce GIF files: the closest thing is video trim, which cuts a range out of one clip and returns a new MP4, with the audio dropped if you ask for it.
This page compares the two on the settings people actually tune: length, frame rate, size, and cost model. Cloudflare's numbers come from its Display thumbnails page and Sume's from the video trim doc, both read on 2026-10-03.
What does a Cloudflare Stream animated thumbnail give you?
The URL shape is https://[domain]/[VIDEO_UID]/thumbnails/thumbnail.gif. The same time, height, width and fit options as the static thumbnail.jpg apply, and two GIF-only options sit on top: duration and fps.
Cloudflare's page also states that viewing animated thumbnails does not count toward billed minutes delivered or minutes viewed, and that Stream thumbnails are not supported for videos with non-square pixels.
| Option | Default | Meaning |
|---|---|---|
| time | 0s | Where in the video the thumbnail starts |
| duration | 5s | Length of the animated GIF |
| fps | 8 | Frames per second of the GIF |
| width / height | 640 / 640 | Output box, shaped by fit |
| fit | crop | crop, clip, scale or fill |
Can Sume make a GIF?
No. Nothing in the Sume docs lists a GIF output on any media route. Trim, filter, frames, compose and Timeline 1.0 all return MP4 video or still images, and the Timeline doc describes its output as an MP4.
If your destination takes a looping MP4 as a GIF replacement, you can build that on Sume. Chat apps and ad platforms often accept a silent MP4 where an animated GIF used to go, so check the target's own rules first. If the destination only accepts a .gif file, convert the MP4 outside Sume.
How do you cut a short silent loop with video trim?
Video trim takes one media.sume.com clip, a start, and exactly one of end or duration. Set audio to drop for a silent result, and use output to conform the size and frame rate. output only works with precision: exact, which is the default and a frame-accurate re-encode.
The request below cuts five seconds from the 2-second mark, drops audio, and conforms to 640 by 360 at 24 fps. The Idempotency-Key is required, so a retry does not queue a second cut.
curl -X POST https://api.sume.com/v1/video-trim \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: loop-cut-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"start": 2,
"duration": 5,
"audio": "drop",
"output": { "width": 640, "height": 360, "fps": 24 }
}'Where do the two differ?
The biggest difference is the model. Cloudflare transforms on request from a URL, with no job to wait for. Sume trim is a job: the default mode is async, mode: "sync" waits up to 30 seconds, and you read the new video_url from GET /v1/jobs/:id/result once result_ready is true. The public rate is $0.02 per job, which you can confirm in GET /v1/catalog.
The second difference is frame rate. Cloudflare's GIF defaults to 8 fps. Sume's output.fps accepts 24, 25, 30 or 60 only, so a Sume loop is smoother and larger than a Cloudflare GIF of the same length. Output length runs from 0.2 to 900 seconds, and the source clip must be 1800 seconds or shorter.
Finally, the source must already be a media.sume.com artifact or asset for this workspace. Off-host URLs are rejected at admit, so a clip hosted elsewhere has to be imported first.
| Setting | Cloudflare Stream | Sume video trim |
|---|---|---|
| Output file | GIF | MP4 |
| Default length | 5s | You set start and end or duration |
| Frame rate | 8 by default | 24, 25, 30 or 60 |
| How you ask | Edit the URL | Submit a job, poll, read the result |
| Audio | None in a GIF | Keep or drop |
What should you check before relying on a loop?
A loop only reads as a loop when the first and last frames match. Pull the first and last stills with video frames at at: [0, 4.9] on the trimmed clip and compare them. If they jump, move start or duration by a fraction of a second and cut again; a trim is $0.02, so a few retries cost cents.
Also confirm the result length with duration_seconds in the job result, and read warnings[]. A keyframe cut would start a GOP early and shift your loop point, so keep precision on its default of exact for loops. Cloudflare's GIF has no such concern because it samples frames at the rate you ask for from the stream directly.
When should you pick which?
Use Cloudflare's GIF when the clip already lives in Stream and you want a preview that appears from a URL change. Use Sume trim when the clip is Sume-generated, needs a precise in and out point, or has to go into a timeline or ad upload as video. If you plan to place the cut in a longer edit, drop the MP4 into a video[] slot in Timeline 1.0.
Sources
Related posts
More in Media tools
- Cloudflare Stream thumbnail fit modes vs Sume Timeline fit modes
Cloudflare Stream fit: crop, clip, scale, fill. Sume Timeline 1.0 fit: cover, contain, stretch, blur. Which names map and where they differ.
- Cloudinary ar_9:16,c_fill,g_auto vs Sume per-shot crop fractions
Cloudinary reframes video with ar_9:16,c_fill,g_auto. On Sume you pick crop x per shot (left, centre, right), with a runnable Python script.
- Cost of subtitling 20 Shorts in 5 languages: 100 caption jobs
20 Shorts x 5 languages is 100 Video captions jobs. Price it at $0.20 each, plan the idempotency keys, and know what a failed job costs.
- Flow edit modes Insert, Remove, Camera: the prompt wording for Sume
Flow's Omni edit offers Insert, Remove and Camera modes; Sume has one video_url edit and a prompt. Prompt templates for each mode and what to check.
Written by Sume