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.

5 min readSume
All posts

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.

Cloudflare Stream thumbnail defaults (read 2026-10-03)
OptionDefaultMeaning
time0sWhere in the video the thumbnail starts
duration5sLength of the animated GIF
fps8Frames per second of the GIF
width / height640 / 640Output box, shaped by fit
fitcropcrop, 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.

Looping clip settings compared (read 2026-10-03)
SettingCloudflare StreamSume video trim
Output fileGIFMP4
Default length5sYou set start and end or duration
Frame rate8 by default24, 25, 30 or 60
How you askEdit the URLSubmit a job, poll, read the result
AudioNone in a GIFKeep 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

All Media tools posts

Written by Sume