Test Resolve import of FCPXML and metadata CSV #21

Closed
opened 2026-10-06 04:07:07 +00:00 by crowmaki · 1 comment
Owner

Part of #1

Question

What does the owner's installed DaVinci Resolve actually do with the export ingredients from "Resolve FCPXML import fidelity" (#16)? In a scratch project: (1) import a hand-made FCPXML 1.10 with a few clips, a still, linked stereo audio, markers, keywords, a note and a rating, and record what survives; (2) import a metadata CSV via File > Import Metadata To > Media Pool, and record the exact column headers Resolve expects for Good Take, Comments, Keywords, Scene/Shot/Take and the values Good Take accepts; (3) optionally try a native .otio with markers. Record the Resolve version used. See branch research/resolve-fcpxml.

Part of #1 ## Question What does the owner's installed DaVinci Resolve actually do with the export ingredients from "Resolve FCPXML import fidelity" (#16)? In a scratch project: (1) import a hand-made FCPXML 1.10 with a few clips, a still, linked stereo audio, markers, keywords, a note and a rating, and record what survives; (2) import a metadata CSV via File > Import Metadata To > Media Pool, and record the exact column headers Resolve expects for Good Take, Comments, Keywords, Scene/Shot/Take and the values Good Take accepts; (3) optionally try a native `.otio` with markers. Record the Resolve version used. See branch `research/resolve-fcpxml`.
Author
Owner

Resolution

Tested on the owner's DaVinci Resolve 21.1.1.10 (free edition), Windows, on 2026-10-06. Media for the test: four 3 s H.264 clips (12A-1.mov and others) at 1376×768, 24 fps, with stereo AAC and a 01:00:00:00 start, plus a PNG Board still.

1. FCPXML 1.10

  • Put only the Animatic project in the file: one event that holds one project. If the file also has events with loose browser asset-clips (we had used them for per-Scene bins), the whole import fails with "No valid sequences are present in the file". A bisect of 11 variants showed that only removing those events fixes it. None of these mattered: DOCTYPE, custom format name (FFVideoFormat1376x768p24), the still, notes/markers/keywords/rating, asset metadata, or a 01:00:00:00 tcStart. Resolve's own 1.10 export has the same shape: one event holding one project.

  • What survives:

    • cuts and offsets, with the 01:00:00:00 timeline start kept;
    • linked stereo audio, put on A1;
    • a Board still as <video ref=… duration="2s"> that points at a duration="0s" PNG asset, imported at the right length;
    • file:///E:/… URLs with %20 escapes.

    Clips are relinked by path to the existing Media Pool items.

  • What is lost: clip and timeline markers, and md com.apple.proapps.spotlight.kMDItemDescription. The test could not settle whether keyword, note and md scene/take reach the Media Pool, because the metadata CSV overwrote those fields afterwards. Treat them as unsupported, as #16 recommended.

  • Resolve exports FCPXML 1.10 as a .fcpxml bundle folder (Info.fcpxml inside it), with file://localhost/ URLs. It imports a flat .fcpxml without any problem.

2. Metadata CSV (File > Import Metadata To > Media Pool)

  • Dialog defaults:
    • ✔ Match using filename
    • ☐ Ignore file extensions
    • ✔ Match using clip start and end Timecode
    • ☐ Match using Reel Name
    • ☐ New name using source file path
    • ✔ Import additional metadata fields as custom metadata
    • (•) Only update metadata items with entries in the source file
  • The CSV must carry Start TC and End TC. Without them the import reports "No matching media pool entries were found", because timecode matching is on by default. With them, a UTF-8 CSV matched all clips. Resolve's own export is UTF-16 LE with a BOM, but import doesn't need that.
  • Exact headers (copied from Resolve's export): File Name, Clip Directory, Start TC, End TC, Scene, Shot, Take, Comments, Keywords, Description, Tag, Good Take. Keywords take a comma-separated list in one quoted cell.
  • Circled status goes in Tag, not Good Take. The Inspector's File > Metadata > Tag control has three options: Untagged, Good Take and Rejected.
    • Export writes them as blank, 1 and 2.
    • Import of Tag=1 ticks Good Take, and Tag=0 clears it (tested).
    • True and Yes are stored as strings but tick nothing.
    • Tag=2 → Rejected is inferred from export only. It maps onto NG Takes.
    • The Good Take column is free text: 1, True and Yes were all stored as given, and none ticked the box. Don't use it.
  • The import is safe to re-run. Fields the CSV doesn't carry are left alone: a Description set earlier was kept.
  • Resolve only exports the Tag column once at least one clip has a tag.

3. Native OTIO

  • .otio written with OpenTimelineIO imports cleanly: cuts, linked audio and the Board still.
  • Clip marker names and colours survive (red and green). Marker comments are dropped.

Consequences for the edit package

  • animatic.fcpxml: single event and project. Don't put bins or markers in it.
  • Bins come from the per-Scene folder layout.
  • takes.csv: UTF-8, matched by File Name + Start TC/End TC, so Renditions need known start timecodes. Circled → Tag=1, NG → Tag=2. Notes go in Comments; Scene/Shot/Take go in their own fields.
  • If timecoded notes must show up as markers in Resolve, .otio is the only carrier that worked.

Test kit

Local and gitignored, in scratch/resolve-test/:

  • the generator and variants;
  • AIS_probe.lua and AIS_dump.lua (Resolve's console Lua: no io; use bmd/native exports);
  • takes*.csv;
  • results/: Resolve's reference FCPXML, OTIO and FCP 7 exports, and the metadata CSVs.

Not tested: FCP 7 XML import of bins and comments.

## Resolution Tested on the owner's **DaVinci Resolve 21.1.1.10 (free edition)**, Windows, on 2026-10-06. Media for the test: four 3 s H.264 clips (`12A-1.mov` and others) at 1376×768, 24 fps, with stereo AAC and a 01:00:00:00 start, plus a PNG Board still. ### 1. FCPXML 1.10 - **Put only the Animatic project in the file: one `event` that holds one `project`.** If the file also has events with loose browser `asset-clip`s (we had used them for per-Scene bins), the whole import fails with *"No valid sequences are present in the file"*. A bisect of 11 variants showed that only removing those events fixes it. None of these mattered: DOCTYPE, custom format name (`FFVideoFormat1376x768p24`), the still, notes/markers/keywords/rating, asset `metadata`, or a 01:00:00:00 `tcStart`. Resolve's own 1.10 export has the same shape: one event holding one project. - **What survives:** - cuts and offsets, with the 01:00:00:00 timeline start kept; - linked stereo audio, put on A1; - a **Board still** as `<video ref=… duration="2s">` that points at a `duration="0s"` PNG asset, imported at the right length; - `file:///E:/…` URLs with `%20` escapes. Clips are relinked by path to the existing Media Pool items. - **What is lost:** clip and timeline `marker`s, and `md com.apple.proapps.spotlight.kMDItemDescription`. The test could not settle whether `keyword`, `note` and `md` scene/take reach the Media Pool, because the metadata CSV overwrote those fields afterwards. Treat them as unsupported, as #16 recommended. - Resolve **exports** FCPXML 1.10 as a `.fcpxml` *bundle folder* (`Info.fcpxml` inside it), with `file://localhost/` URLs. It **imports** a flat `.fcpxml` without any problem. ### 2. Metadata CSV (File > Import Metadata To > Media Pool) - **Dialog defaults:** - ✔ Match using filename - ☐ Ignore file extensions - ✔ **Match using clip start and end Timecode** - ☐ Match using Reel Name - ☐ New name using source file path - ✔ Import additional metadata fields as custom metadata - (•) Only update metadata items with entries in the source file - **The CSV must carry `Start TC` and `End TC`.** Without them the import reports *"No matching media pool entries were found"*, because timecode matching is on by default. With them, a **UTF-8** CSV matched all clips. Resolve's own export is UTF-16 LE with a BOM, but import doesn't need that. - **Exact headers** (copied from Resolve's export): `File Name`, `Clip Directory`, `Start TC`, `End TC`, `Scene`, `Shot`, `Take`, `Comments`, `Keywords`, `Description`, `Tag`, `Good Take`. Keywords take a comma-separated list in one quoted cell. - **Circled status goes in `Tag`, not `Good Take`.** The Inspector's File > Metadata > **Tag** control has three options: Untagged, **Good Take** and **Rejected**. - Export writes them as blank, `1` and `2`. - Import of `Tag=1` ticks Good Take, and `Tag=0` clears it (tested). - `True` and `Yes` are stored as strings but tick nothing. - `Tag=2` → Rejected is inferred from export only. It maps onto NG Takes. - The `Good Take` *column* is free text: `1`, `True` and `Yes` were all stored as given, and none ticked the box. Don't use it. - The import is safe to re-run. Fields the CSV doesn't carry are left alone: a `Description` set earlier was kept. - Resolve only exports the `Tag` column once at least one clip has a tag. ### 3. Native OTIO - `.otio` written with OpenTimelineIO imports cleanly: cuts, linked audio and the Board still. - **Clip marker names and colours survive** (red and green). Marker comments are dropped. ### Consequences for the edit package - `animatic.fcpxml`: single event and project. Don't put bins or markers in it. - Bins come from the per-Scene folder layout. - `takes.csv`: UTF-8, matched by `File Name` + `Start TC`/`End TC`, so Renditions need known start timecodes. Circled → `Tag=1`, NG → `Tag=2`. Notes go in `Comments`; Scene/Shot/Take go in their own fields. - If timecoded notes must show up as markers in Resolve, `.otio` is the only carrier that worked. ### Test kit Local and gitignored, in `scratch/resolve-test/`: - the generator and variants; - `AIS_probe.lua` and `AIS_dump.lua` (Resolve's console Lua: no `io`; use `bmd`/native exports); - `takes*.csv`; - `results/`: Resolve's reference FCPXML, OTIO and FCP 7 exports, and the metadata CSVs. Not tested: FCP 7 XML import of bins and comments.
Sign in to join this conversation.
No description provided.