Dip to black transition: fade out and in between clips

A dip to black fades one clip out to black, then fades the next in from black. How to build one when a render's fade is a crossfade, and the limits.

5 min readSume
All posts

A dip to black transition fades the first clip out to a black frame, then fades the next clip in from black. The picture passes through black instead of blending the two shots, as a crossfade does.

The Sume facts below come from the Video filter, Timeline 1.0, Video inspect and Audio detach docs and the Sume API reference, and the FFmpeg facts from the FFmpeg filters documentation, all read on 2026-09-28. Anything described as current behavior is read from Sume's code.

How is a dip to black different from a crossfade?

A crossfade overlaps the two shots: while it runs, one fades into the other. A dip keeps them apart: the first shot reaches full black before the second one starts to appear.

Sume's Timeline 1.0 render has six transition types, fade, wipeleft, wiperight, slideup, slidedown and dissolve, and none is documented as a dip. Its fade maps to FFmpeg's xfade filter, which FFmpeg's docs describe as a cross fade from one video to another. Crossfades themselves are covered in video transitions API.

How do I make a dip to black with Sume?

Fade each clip on its own with the video filter, then join the two with a plain cut. fade is on the filter's allowlist, and FFmpeg's fade fills the picture with its color, black by default, at the end of a fade-out.

  • Both clips must already be in your workspace on media.sume.com, such as outputs of earlier Sume jobs (which URLs each endpoint accepts).
  • Read the first clip's length with a free probe: POST /v1/video-inspect with frames: false returns probe.duration_seconds.
  • Send each clip to POST /v1/video-filter with one fade as its filtergraph, as in the table. End the fade-out a few frames before the clip ends, so its last frames are fully black.
fade options from the FFmpeg filters documentation; fade is on the allowlist in Video filter. Both read 2026-09-28.
Clip`filtergraph`What it does
First clip, 8.0 sfade=t=out:st=7.4:d=0.5Fades out from 7.4 s; black from 7.9 s to the end
Second clipfade=t=in:st=0:d=0.5Starts black and fades in over 0.5 s
Dip to whiteAdd :color=white to bothFades through white; black is only the default color
# An 8.0 s clip: fade out over 0.5 s, fully black from 7.9 s
curl -X POST https://api.sume.com/v1/video-filter \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: scene-a-fade-out-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/scene-a.mp4",
    "filtergraph": "fade=t=out:st=7.4:d=0.5"
  }'

How do I join the faded clips?

Put the two new files in adjacent video[] slots with no transition; in current code, that joins them with a plain cut. The render's sound comes from its audio spine, and in current code each slot's own audio is dropped, so detach each clip's sound with POST /v1/audio-detach and list the two files as audio.parts[].

Only the picture dips. The parts join end to end with no silence inserted at the seam, so the sound cuts straight from one clip to the next.

curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: dip-to-black-001" \
  -d '{
    "audio": {
      "duration_seconds": 14,
      "parts": [
        { "url": "https://media.sume.com/artifacts/artf_demo/scene-a.wav", "duration": 8 },
        { "url": "https://media.sume.com/artifacts/artf_demo/scene-b.wav", "duration": 6 }
      ]
    },
    "output": { "width": 1920, "height": 1080 },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/scene-a-out.mp4", "start": 0, "duration": 8 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/scene-b-in.mp4", "start": 8, "duration": 6 }
    ]
  }'

Can I fade from black at the very start or end instead?

Yes, with no filter: the render's output.fade_in_seconds and output.fade_out_seconds fade the whole video up from black at its start and down to black at its end, as video transitions API explains. They work only at the ends of the render, not between two clips.

What are the limits and costs?

  • The video filter reads clips up to 300 seconds. For a longer clip, cut its last few seconds into a new file with video trim, fade only that piece, and put it in the slot right after one that plays the rest of the original.
  • A filtered clip keeps the source's frame size, frame rate and audio.
  • POST /v1/video-filter/check runs the same allowlist for free, but a program that passes it can still fail when it runs.
  • Each filter encode is $0.02 per job, each detach $0.01 per job and the render $0.10 per output minute, plus a 5.5% agent fee by default.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume