← Field notes
27 August 2026 · Field Notes · Timecode · Part one

XML timecode problems: why your edit lands a frame out

By Harry Winteringham, documentary PD and founder of Earwig

Everyone who has sent an XML to an editor has had the message back. The one that just says "these are all a frame out", or "nothing's relinking", or worse, the one where nobody notices for two days.

I have spent more hours than I want to admit working out why. Most of it is not mysterious once you know what an XML actually contains, which is not what most people assume it contains.

Here is what I have learned, mostly the slow way.

Timecode on set is a decision, not a setting

Before any of the XML stuff matters, the timecode has to be right on the card, and this is where most of it goes wrong.

Two modes. Record run counts only while you are rolling, so your timecode is really a clip counter. Free run keeps counting whether you are rolling or not, so if you set it to time of day, every clip carries the actual moment it was shot.

For anything with two cameras, a separate sound recorder, or a long day you will need to reconstruct, free run time of day is the one you want. It means every device that shares a clock is automatically in sync, and it means a note you make at 14:32 points at footage at 14:32.

The thing nobody tells you is that most cameras will happily lose it. Battery out for long enough and you are back to zero. Some bodies reset to 00:00:00:00 on a new card. Some drift a frame or two an hour, which sounds like nothing until you are four hours in on a two-camera shoot.

If it matters, jam sync at the top of the day and again after lunch. [Add your own routine here, and whether you use Tentacles or set it manually on the FX6.]

And write it down. The single most useful thing on a chaotic day is a note saying what the timecode was doing, because the person conforming it in three weeks has no way to work that out from the files.

What an FCP7 XML actually contains

Here is the bit that surprises people.

An XML does not really carry timecode. It carries frame counts, and it carries a starting timecode for each file so those frame counts can be turned back into timecode at the other end.

Open one in a text editor. Every clip on the timeline is a clipitem, and it has four numbers that matter:

xml <in>327</in> <out>408</out> <start>775</start> <end>856</end>

in and out are frames into the source file. start and end are frames along the sequence. That is the whole edit, expressed as arithmetic.

The timecode lives one level down, on the file itself:

xml <timecode> <rate> <timebase>25</timebase> <ntsc>FALSE</ntsc> </rate> <string>10:14:22:07</string> <frame>9185675</frame> <displayformat>NDF</displayformat> </timecode>

string is the timecode of the first frame of that file. frame is the same thing counted as an absolute frame number. Everything downstream is that starting point plus the frame counts above.

Which means the failure mode is obvious once you see it. If the frame rate is misread, every frame count is wrong, and the further into the timeline you go the worse it gets.

Four things that break the handoff

  1. FCP7 XML and FCPXML are both called "XML"

FCP7 XML is the old Final Cut format that everyone else adopted. It is what Premiere and Resolve exchange. FCPXML is the modern Final Cut format and it is a different thing entirely, with a different structure.

If a tool asks for "an XML" without saying which, it almost always means FCP7 XML. Final Cut itself only reads FCPXML. Sending the wrong one gets you an import error if you are lucky, and a silently wrong timeline if you are not.

  1. 23.976 is written as 24 with an NTSC flag

FCP7 XML does not write 23.976 anywhere. It writes this:

xml <timebase>24</timebase> <ntsc>TRUE</ntsc>

Timebase 24 with the NTSC flag true means 23.976. Timebase 24 with it false means true 24. Same for 30 and 29.97, and 60 and 59.94. PAL 25 has the flag false and is the one format that never causes an argument.

So if your timeline comes in reading 24fps when you shot 23.976, that flag is the first place to look. It is also the most common reason a conform starts fine and drifts by the end of the reel.

  1. Drop frame, and what Premiere writes instead

Drop frame does not drop frames. It skips timecode labels to keep the clock honest against 29.97, which is why drop frame timecode is written with semicolons (00;00;16;20) and non-drop with colons.

The problem is that Premiere's FCP7 XML export has never been reliable about this. It tends to write DF for anything at 29.97 whether or not the media is actually drop frame, and NDF for 23.976, true 24 and 59.94 regardless. The semicolons follow the same logic rather than the truth.

If you work in PAL this never comes up. If you deliver to anyone in the US it will, and the fix is to check the media's actual timecode format rather than trusting what the XML says about it.

  1. Why the media does not relink

Media lives in the XML as an absolute path:

xml <pathurl>file://localhost/Volumes/SHOOT01/DAY03/A001C0021.MXF</pathurl>

That is a URL, so spaces and accented characters get encoded, and it is absolute, so it describes exactly where the media sat on your machine when you exported.

Your editor's drive is not called SHOOT_01. So it will not relink, and that is not a bug, it is the format doing what it says. Most NLEs will offer to relink to a folder and find things by filename, which works as long as the filenames are unique. If you have renamed anything, or you have two cards that both start at A001C0021, you are in for an afternoon.

The practical answer is to keep the folder structure identical on both machines, and never rename source files. Rename in the bin instead.

Why the whole timeline is one frame out

If everything looks right and the whole timeline is exactly one frame out, it is usually an inclusive-versus-exclusive disagreement. Different tools disagree about whether out and end mean the last frame or the frame after the last frame.

One frame at the head of the timeline is invisible. The same error repeated across two hundred cuts is a conform that has to be redone.

If you are testing a new handoff route, the cheapest possible check is a two-clip timeline with a known cut point. Build it, send it, open it at the other end, look at the timecode of the cut. Do that once and you will find any off-by-one in five minutes rather than on a delivery day.

My timecode checklist for a self-shoot

A short list, and it has saved me more time than any piece of software.

Free run, time of day, jammed at the start of the day and after lunch.

One reference shot at the top of every card with the timecode visible, even if it is just a phone screen. If everything else goes wrong, that is the anchor.

A note of the frame rate and whether the timecode is drop frame, written somewhere that travels with the rushes and not just in my head.

A two-clip test export before the first real handoff on any new job, because the failure always shows up on the test and never on the deadline.

And when timecode has genuinely gone, which happens, sync on the audio waveform instead. The camera's own audio against a second source will get you frame accurate without any timecode at all. It is slower, but it always works, and it is the fallback I reach for most on run-and-gun days where nobody had time to jam anything.

Common questions

Why does my XML import at 24fps when I shot 23.976?

FCP7 XML writes 23.976 as timebase 24 with the NTSC flag set to true. If that flag is missing or false, the receiving application reads it as true 24 and every frame count after that is slightly wrong.

Why will my XML not relink to the media?

The XML stores an absolute file path, including the volume name. If the drive name or folder structure differs on the receiving machine, nothing matches. Relinking by folder usually works as long as no source files have been renamed.

What is the difference between FCP7 XML and FCPXML?

FCP7 XML is the older interchange format used between Premiere and Resolve. FCPXML is the modern Final Cut Pro format and has a completely different structure. Most tools asking for "an XML" mean FCP7 XML.

Should I use record run or free run timecode?

Free run set to time of day, for anything with more than one camera or a separate sound recorder. It makes every device carrying the same clock automatically syncable, and it means notes taken during the day point at real footage.

Why is my whole timeline one frame out?

Usually a disagreement about whether the out point is the last frame or the frame after it. Test with a two-clip timeline and a known cut point before trusting a new handoff route.

Earwig Marker automatically syncs to your camera with OCR - Optical Character Recognition - lets you log your footage so they're frame accurate. Try it here: https://apps.apple.com/gb/app/earwig-marker/id6763740508

Comments

No comments yet — be the first.

Comments are checked before they appear.

Try Earwig on your next shoot

Mark the exact line as it is said. Arrive at the edit with the selects already on the timeline.

See how it works More field notes