Adobe does not publish the layout of a Premiere Pro project. This page follows py_premiere, an open-source library that reads and writes projects byte for byte and checks what it reads against Premiere’s own scripting interfaces, and Adobe’s scripting documentation for the time unit. Element names and class versions change between releases of Premiere Pro; the examples come from recent ones.
The gzip wrapper
The file is a single gzip member (RFC 1952) holding one XML document. Premiere writes a fixed 10-byte header with no optional fields, a raw deflate stream compressed at zlib’s default level 6, and the usual 8-byte trailer.
| Offset | Size | Value | Meaning |
|---|---|---|---|
| 0x00 | 2 | 1F 8B | gzip signature. |
| 0x02 | 1 | 08 | Compression method: deflate. |
| 0x03 | 1 | 00 | Flags: no name, comment, extra field or header CRC. |
| 0x04 | 4 | 00 00 00 00 | Modification time, left at 0. |
| 0x08 | 1 | 00 | Extra flags. |
| 0x09 | 1 | 0A or 13 | Operating system byte: 10 in current builds, 19 in older ones. In RFC 1952’s table 10 is TOPS-20 and 19 is unassigned, so the byte does not describe the system that wrote the file. |
| 0x0A | varies | Deflate stream. | |
| end − 8 | 4 | u32 LE | CRC-32 of the XML. |
| end − 4 | 4 | u32 LE | Length of the XML, modulo 232. |
A project re-compressed by another tool may carry the optional gzip fields; a reader should parse the flags rather than assume 10 bytes.
The XML
The decompressed document is UTF-8. Premiere’s writer is uniform:
- The prolog is exactly
<?xml version="1.0" encoding="UTF-8" ?>(note the space before?>) and a line feed. - Lines end with LF and nesting is indented with tabs. Empty elements are self-closing.
- Line breaks inside a text value are written as character references,
and , so every raw line feed in the file is formatting. Attribute values also escape tabs as	. - The root element is followed by two line feeds.
- There are no comments, processing instructions or CDATA sections, and no mixed content: an element holds either text or child elements.
PremiereData and the object table
The root element is PremiereData with a Version attribute
(3 in current projects). Its children form a flat table of objects. The
first child is a reference to the project object; everything else is an object
definition:
<PremiereData Version="3">
<Project ObjectRef="1"/>
<Project ObjectID="1" ClassID="62ad66dd-0dcd-42da-a660-6d8fbde94876" Version="45">
…
<RootProjectItem ObjectURef="…"/>
<ProjectSettings ObjectRef="3"/>
…
</Project>
<RootProjectItem ObjectUID="…" ClassID="1c307a89-9318-47d7-a583-bf2553736543" Version="1">
…
</PremiereData>
| Attribute | On | Meaning |
|---|---|---|
ObjectID | Object definitions | A decimal integer, unique in the table. New objects take the highest ID plus one. |
ObjectUID | Object definitions | A GUID, used instead of ObjectID by some objects, such as the root bin and sequences. |
ClassID | Object definitions | A GUID naming the object’s class. The element name is the class’s readable name. |
Version | Object definitions and their inner elements | The version of that class’s layout. It changes between Premiere releases. |
ObjectRef | Reference elements | Points at the object with this ObjectID. |
ObjectURef | Reference elements | Points at the object with this ObjectUID. |
Premiere writes the identifier first, then ClassID, then
Version. A reference element has no content; its name says what role the
referenced object plays, as in <ProjectSettings ObjectRef="3"/>.
A few objects contain nested definitions with their own ObjectIDs, such as
the project panel’s view state and its column classes. IDs inside those belong to the
nested scope and do not point into the top-level table.
Class layers
An object definition is built from layers, one for each class it derives from, nested as
child elements that each carry their own Version. A bin, for example, is a
BinProjectItem containing a ProjectItem layer (with a
Node, its Properties and the Name) and a
ProjectItemContainer layer (with the Items it holds). Generic
settings live in Node/Properties as leaf elements whose names are dotted
keys, such as MZ.Project.GUID or Column.PropertyText.Label.
Binary payloads
Binary data, such as caption and graphics text, Lumetri settings and other effect
state, is stored as base64 text in a leaf element. A given payload is stored once: the
first element that needs it carries the base64 text and a BinaryHash
attribute, and every further copy is an empty element with the same
BinaryHash. Styled text payloads (captions and Essential Graphics source
text) are FlatBuffers that start with the bytes 44 33 22 11. Most other
payloads are not publicly decoded.
An empty project
Premiere writes about 40 objects for a new, empty project. Nine of them hold state it cannot rebuild; it restores the rest from its defaults when it opens a project that lacks them.
| Object | ClassID | Holds |
|---|---|---|
Project | 62ad66dd-0dcd-42da-a660-6d8fbde94876 | Workspace name, build versions (MZ.BuildVersion.Created, .Modified), application ID, project GUID, and references to the root item and the settings; NextID, the next node ID to hand out. |
RootProjectItem | 1c307a89-9318-47d7-a583-bf2553736543 | The root bin, named Root Bin, node ID 1000000. Its ObjectUID is the project’s document ID. |
ProjectSettings | 50c16708-a1a1-4d2f-98d5-4e283ae28353 | References to video, audio, compile, capture and default sequence settings; colour management JSON; time display formats; safe margins. |
ScratchDiskSettings | 4c6ed82b-a81c-4df1-8bd0-750504c4b560 | Preview, auto-save, capture and other scratch locations, by default SameAsProject. |
IngestSettings | 2db8f76b-2c37-48ee-925d-9a4f7278152d | Ingest action and whether it is on. |
WorkspaceSettings | c4372273-e1aa-4683-98aa-a2ceadf3066c | Workspace state. |
DummyCaptureSettings | 328c2aa2-47f9-4211-805b-b6a6dbd4ca29 | Placeholder capture settings. |
DefaultSequenceSettings | 567bdf53-d6d9-4d61-b2f1-f4834bebea9b | Track counts for new sequences: video tracks, and mono, stereo and 5.1 audio and submix tracks. |
What the file does not hold
- The media. Clips refer to files by path (
Media/FilePath). - XMP metadata set on an item: Premiere writes it into the media file, not the project.
- Node IDs of project items are reassigned by Premiere on every load, from 1000000 in depth-first order; stored IDs are not authoritative.
- Selection, playhead positions and other live application state.