Blackmagic Design publishes no description of this format. What follows comes from the
UK National Archives’ PRONOM
record fmt/2064 and from open-source tools that read and write exported projects,
checked against exports from DaVinci Resolve 18.5 to 21. The element names are those of
Resolve’s project database (the same Sm2… names appear as tables in a local
project library’s SQLite file), and they change between versions.
The ZIP archive
A .drp file is a ZIP archive, so it
starts with 50 4B 03 04. Its members are XML files:
| Member | Holds |
|---|---|
project.xml | The project: its name, settings and a reference to the media pool. Root element SM_Project. |
Gallery.xml | Named after the Color page gallery of stills; its contents are not publicly described. It also carries the Resolve version. |
MediaPool/Master/MpFolder.xml | The media pool’s Master bin, with its sub-bins, clips and timelines. Further folders under MediaPool/ may hold other bins. |
SeqContainer/id.xml | One file per timeline, named by its ID: the tracks and the clips on them. |
PRONOM identifies a project by the presence of both project.xml and
Gallery.xml. A timeline exported on its own (.drt,
PRONOM fmt/2063) uses the same layout but has no Gallery.xml. Sources
disagree on whether a .drt also has a project.xml: one tool
treats its absence as the difference, while a Resolve 21.1 timeline export was found to
contain one.
project.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--DbAppVer="19.1.3.0007" DbPrjVer="14"-->
<SM_Project DbId="…">
<FieldsBlob/>
<ProjectName>…</ProjectName>
<MediaPoolRef>…</MediaPoolRef>
…
</SM_Project>
The XML declaration is followed by a comment giving the version of Resolve that wrote
the file and the version of the project schema. PRONOM’s signature looks for the
bytes <SM_Project (3C 53 4D 5F 50 72 6F 6A 65 63 74)
within the first 128 bytes of the member.
| Item | Meaning |
|---|---|
DbAppVer | Resolve version and build, such as 18.5.0b.0031 or 21.1.0.0017; b marks a beta. |
DbPrjVer | Project schema version. Older Resolve versions refuse a newer schema. |
DbId attribute | The record’s ID in the project database: 32 hexadecimal digits, or a GUID with dashes. |
ProjectName | The project’s name. |
MediaPoolRef | The DbId of the media pool. |
FieldsBlob | Binary fields, as hexadecimal text (see below). |
| DbPrjVer | Seen with |
|---|---|
| 13 | Resolve 18.5 |
| 14 | Resolve 19.1.3 |
| 15 | Resolve 20.0.1 |
| 17 | Resolve 21.0 and 21.1 |
Other values, and the versions in between, are not publicly recorded.
Media pool: MpFolder.xml
The root element is the Master bin, an Sm2MpFolder. Each element that is a
database record carries a DbId attribute.
| Element | Children seen |
|---|---|
Sm2MpFolder | Name, UniqueMediaPoolItemId, ColorTag (such as FOLDER_COLOR_NONE), Folded, FolderVec (sub-bins), MediaVec (items). |
Sm2MpVideoClip, Sm2MpAudioClip | Name, MediaFilePath, UniqueMediaPoolItemId, MediaFrameRate, a binary clip record, FieldsBlob. |
Sm2MpTimelineClip | A timeline in the media pool. |
Sm2Timeline | Name and Sequence, which holds an Sm2Sequence whose DbId the timeline’s tracks refer to. |
Resolve links a media pool clip to its file through the path stored in the clip’s binary
record, not the plain MediaFilePath text. In that record the path is framed
as a 4-byte tag, a 4-byte big-endian length, then two length-delimited fields in protocol
buffer style: 0A length folder, 12
length file name.
Timelines: SeqContainer
| Element | Children seen |
|---|---|
Sm2TiTrack | Type (0 video, 1 audio), SubType, Flags, Sequence (the Sm2Sequence ID), the clips in Items, and a user-defined name. |
Sm2TiVideoClip, Sm2TiAudioClip | Name, Start, Duration, In, Out, MediaRef, MediaFilePath, MediaReelNumber, MediaStartTime, MediaFrameRate, PrettyType, FieldsBlob, the grade versions in pLmVerTable, and Fusion compositions in CompositionTable. |
StartandDurationare whole frames on the timeline. With a start timecode of 01:00:00:00 at 24 frames a second, a clip at the start hasStart86400.InandOutare source frames, written frame|hex, as in47|0000eaffffffef3f. The part after the bar is a little-endian double in hexadecimal; its meaning is not known.- Frame rates (
FrameRate,MediaFrameRate) are a little-endian IEEE 754 double written as 16 hexadecimal digits: 24 is0000000000003840. pLmVerTablelists grade versions, each aListMgt::LmVersionwithName,HasCorrectionand the grade itself as hexadecimalBody;pActivenames the active one. The grade body is not publicly decoded.- A Fusion title’s composition is in
CompositionTable/Sm2TiCompositionTable/CompositionBA.
Binary fields
Much of the project is in binary fields stored as hexadecimal text. What is known:
CompositionBA: a 32-bit big-endian size and a zlib stream. Inside is a map with UTF-16BE keys (count,0_name,0_mediaIdList,0_data);0_dataholds a FusionComposition { … }header, a NUL, a 32-bit little-endian size and a zlib stream of the tools in Fusion’s.settingtext syntax.FieldsBlobon a timeline clip is in a protocol-buffer-like encoding and repeats the start frame as a varint.- The marker blob of a clip (seen in the SQLite library rather than the export) has a
header containing
BlobDatain UTF-16LE, a byte usually0x81, then a zstd frame; inside, each marker has its source frame × 2 as a varint and its name in UTF-8.
The colour grade bodies, gallery stills, Fairlight data and most other blobs have no public description.