Edit decision list (EDL): what it is, with an example
An edit decision list (EDL) is the ordered list of edits that rebuilds a cut: source, track, transition, and timecodes. An example and its JSON form.

An edit decision list (EDL) is the ordered list of edits that rebuilds a finished cut: for each event, which source it comes from, which track, which transition, the source in and out points, and where it lands on the program timeline. Classic EDLs are plain-text CMX 3600 files; AI video pipelines write the same list as JSON and hand it to a render API.
The format facts come from the Wikipedia article and the OpenTimelineIO CMX 3600 adapter, which reads and writes these files. The render facts come from Sume's Timeline 1.0 docs. All were read on 2026-09-28.
What does an edit decision list look like?
Wikipedia describes the list as "reel and timecode data representing where each video clip can be obtained in order to conform the final cut". This is a short CMX 3600 EDL from the adapter's test files: a cut, then a 10-frame dissolve from clip_A to clip_B. Lines starting with * are comments.
TITLE: dissolve test
FCM: NON-DROP FRAME
001 TST V C 01:00:04:05 01:00:04:14 01:00:00:00 01:00:00:09
* FROM CLIP NAME: clip_A
002 TST V C 01:00:04:14 01:00:04:14 01:00:00:09 01:00:00:09
002 TST V D 010 01:00:08:08 01:00:08:18 01:00:00:09 01:00:00:19
* BLEND, DISSOLVE
* FROM CLIP NAME: clip_A
* TO CLIP NAME: clip_BWhat does each column in an EDL mean?
The adapter's parser splits each event line on spaces. A cut has eight fields; a dissolve or wipe has nine, because it adds a duration in frames.
| Column | Parser field | In the example |
|---|---|---|
| Event number | clip_num / transition_id | 001 |
| Reel (source tape or file) | reel | TST |
| Channel (video or audio track) | channel_code | V |
Transition: C cut, D dissolve, W### wipe | transition_type | C, D |
| Transition length in frames | transition_data | 010 |
| Source in, source out | source_tc_in, source_tc_out | 01:00:04:05, 01:00:04:14 |
| Record in, record out | record_tc_in, record_tc_out | 01:00:00:00, 01:00:00:09 |
What can a CMX 3600 EDL not hold?
It records simple decisions well and leaves out a lot around them:
- Complex edits. Wikipedia: "Some formats, such as CMX3600, can represent simple editing decisions only." It names Final Cut Pro XML and AAF as formats that can hold more.
- More than one video track, in this adapter: its feature matrix marks "Multiple Video Tracks" as unsupported.
- The frame rate. The adapter's README says EDLs "don't contain metadata specifying the rate", so a reader has to be told it.
- The media itself. An EDL only points at sources, so the editor rebuilding the cut needs the same files.
How do AI pipelines use an edit decision list?
An agent plans the cut, writes it as JSON, and a render API turns it into one file. Sume's Timeline 1.0 takes "a declarative document (one audio spine + ordered video[] slots)" and returns one MP4; callers never send filtergraphs or codecs. Its slots map onto EDL columns, measured in seconds rather than timecode. There is no EDL import in the docs, so a CMX file has to be converted first.
- Record in →
start. The first slot must start at 0, and later starts must increase. - Record out →
startplusduration, which is at least 0.2 s. - Source in →
source_in. Reel →source_url, which must be this workspace'smedia.sume.comfile, such as an earlier Sume job's output. DorW###→transitionon a slot after the first:fade,wipeleft,wiperight,slideup,slidedown, ordissolve, up to 1 s. A slot without one is a hard cut.- Audio → the
audiospine. In current code the render takes sound only from the spine and an optional soundtrack, so each clip's own audio is dropped.
{
"audio": {
"url": "https://media.sume.com/artifacts/artf_demo/voice.wav",
"duration_seconds": 24
},
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/intro.mp4",
"start": 0, "duration": 8 },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"start": 8, "duration": 16,
"transition": { "type": "dissolve", "duration": 0.25 } }
]
}How do I check an EDL before rendering?
Send the document to POST /v1/timeline-1.0/plan. It runs the schema and compiler checks and returns the duration, segment count, and estimated cost without creating a job or reserving credits. A bad list is refused with a stable code, such as timeline_must_start_at_zero, segment_overlap, or transition_too_long. Validate a timeline before rendering walks through the response, and How to assemble a long-form video covers the render call.
Sources
Related posts
More in Developers
- What is serverless inference? How it works and is billed
Serverless inference means calling a hosted AI model over HTTP with no servers of your own. Providers bill for compute time or for each output.
- yuv420p10le vs yuv420p: 8-bit vs 10-bit pixel formats
yuv420p and yuv420p10le are both planar YUV 4:2:0. yuv420p stores 8 bits per sample; yuv420p10le stores 10, little-endian, in 16-bit words.
- Where to store API keys: server, CI, and local dev
Keep API keys server-side: an env var fed by a secret manager in production, your CI's secret store in pipelines, a git-ignored file on your laptop.
- Zero data retention for AI video APIs: what Sume keeps
Zero data retention means a provider stores nothing after it answers. Async AI video APIs can't: the video is a stored file. What Sume keeps, and why.
Written by Sume