A project’s folders, compositions and footage form a tree rooted at
LIST:Fold. An item belongs to the folder whose container holds it; there are
no parent-folder IDs. Item IDs and layer IDs come from one project-wide counter, stored
in head, which After Effects
trusts on open. This page follows the
py_aep specification,
which also covers the footage records and panel state not given here.
The item tree
LIST:Fold holds an fdta chunk of 14 bytes, then one item block
for each root item. LIST:Sfdr, a folder’s contents, holds the same blocks.
| Item type | Block |
|---|---|
| Folder | LIST:Item only. |
| Composition | LIST:Item, LIST:FEE (Timeline panel state) and one item UI record. |
| Footage | LIST:Item and one item UI record. |
Children of LIST:Item
Folder
| Child | Occurs | Meaning |
|---|---|---|
iide | 1 (AE 17 on) | Item ID, little-endian copy. |
idpc | 1 (AE 17 on) | Dependency count, 0. |
idta | 1 | Item header. |
Utf8 | 1 | Folder name. |
cmta | 0–1 | Comment. |
sfdt | 1 | Folder flag word. |
LIST:Sfdr | 1 | The folder’s contents. |
Composition
| Child | Occurs | Meaning |
|---|---|---|
iide | 1 (AE 17 on) | Item ID, little-endian copy. |
idpc | 1 (AE 17 on) | Number of idpi that follow. |
idpi | 0 or more | IDs of compositions nested in this one. |
idta | 1 | Item header, type 4. |
Utf8 | 1 | Name. |
cmta | 0–1 | Comment. |
LIST:dats | 1 | Data-driven sources; empty in the samples. |
cdta | 1 | Composition settings. |
cdrp | 1, after cdta | Drop-frame timecode flag. |
comr | 1 (AE 17 on) | Media replacement wrapper flag. |
LIST:PRin | 1 | The 3D renderer. |
| Layer blocks | 0 or more | LIST:Layr, LIST:Ewst and two item UI records for each layer, top first. |
| View layer blocks | 11 | The same shape, with LIST:DLay once, LIST:SLay six times, LIST:CLay three times and LIST:SecL once. They hold the 3D view cameras and the composition markers. |
LIST:CIFO, LIST:CIF2, LIST:CIF3 | 1 each | Essential Graphics, three copies. |
LIST:Gide | 1 | Composition guides. |
LIST:Pin | 0–1 | Proxy source. |
AE 15 (92.14) has no iide, idpc, comr,
LIST:DLay or LIST:CIF3, so ten view layers, and has an extra
LIST:OvdG in every layer list.
Footage
| Child | Occurs | Meaning |
|---|---|---|
iide, idpc | 1 each (AE 17 on) | As above. |
idta | 1 | Item header, type 7, with footage flags. |
Utf8 | 1 | Item name, usually empty. |
LIST:Pin | 1 | The main source: file, solid or placeholder. |
ftgi | 1 | Footage interpretation. |
mdls, mdld | 0–1 each | 3D model footage. |
Utf8 | 1 | Unknown; empty in the samples. |
LIST:Gide | 1 | Viewer guides. |
LIST:Pin | 0–1 | Proxy source. |
An item’s first Utf8 is its name. For file footage, empty means “derive
the name from the source”; solids and placeholders keep theirs in the source’s
opti record.
idta: item header (84 bytes)
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 2 | u2 | Type | 1 folder, 4 composition, 7 footage. |
| 0x02 | 14 | bytes | 0 in the samples. | |
| 0x10 | 4 | u4 | ID | Item ID, unique across items and layers. |
| 0x14 | 2 | bytes | 0 in the samples. | |
| 0x16 | 1 | u1 | Proxy | Bit 0: use proxy. |
| 0x17 | 1 | u1 | Kind flags | See below. |
| 0x18 | 32 | bytes | 0 in the samples. | |
| 0x38 | 1 | u1 | Has proxy | 1 when a proxy source is assigned. |
| 0x39 | 1 | u1 | Has comment | 1 when a cmta exists. |
| 0x3A | 1 | u1 | Label | Label colour, 0 (none) to 16. |
| 0x3B | 1 | u1 | 0 in the samples. | |
| 0x3C | 8 | f8 | 0.0 in the samples. | |
| 0x44 | 8 | f8 | 0.0 in the samples. | |
| 0x4C | 4 | u4 | 0 in the samples. | |
| 0x50 | 4 | u4 | Time | Inferred: seconds since 1904-01-01 UTC. Can be 0. |
| Kind flag | Mask | Meaning |
|---|---|---|
| Bit 0 | 0x01 | Folders only; unknown. |
| Bit 2 | 0x04 | Footage has audio. |
| Bit 4 | 0x10 | Footage is a still: a single image, a solid or a data file. |
| Bit 5 | 0x20 | Footage has video. Always set on compositions. |
cdta: composition settings (204 bytes)
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 2 | u2 | Horizontal resolution factor | 1 Full, 2 Half, 3 Third, 4 Quarter, custom 1–99. |
| 0x02 | 2 | u2 | Vertical resolution factor | The same. |
| 0x04 | 4 | u4 | Time scale | Multiplied by 256 (24.8 fixed point; 1024 means 4.0). |
| 0x08 | 4 | u4 | Timebase | Time units per second. |
| 0x0C | 4 | u4 | Unknown. | |
| 0x10 | 4 | u4 | 600 in the samples. | |
| 0x14 | 4 | s4 | Current time | Dividend. |
| 0x18 | 4 | u4 | Current time | Divisor (600 or the timebase). |
| 0x1C | 4 | s4 | Work area start | Dividend. |
| 0x20 | 4 | u4 | Work area start | Divisor. |
| 0x24 | 4 | u4 | Work area end | Dividend; 0xFFFFFFFF means the end of the composition. |
| 0x28 | 4 | u4 | Work area end | Divisor. |
| 0x2C | 4 | u4 | Duration | Dividend. |
| 0x30 | 4 | u4 | Duration | Divisor (the timebase in the samples). |
| 0x34 | 3 | u1 × 3 | Background | Red, green and blue, 0 to 255. |
| 0x37 | 81 | bytes | 0 in the samples. | |
| 0x88 | 4 | u4 | Flags | See below. |
| 0x8C | 2 | u2 | Width | Pixels, 1 to 30000. |
| 0x8E | 2 | u2 | Height | Pixels, 1 to 30000. |
| 0x90 | 4 | u4 | Pixel aspect | Dividend. |
| 0x94 | 4 | u4 | Pixel aspect | Divisor. |
| 0x98 | 4 | u4 | 0 in the samples. | |
| 0x9C | 4 | fixed 16.16 | Frame rate | 29.97 is 0x001DF852. |
| 0xA0 | 4 | u4 | 0 in the samples. | |
| 0xA4 | 4 | s4 | Display start | Dividend. Negative means the ruler starts before 0. |
| 0xA8 | 4 | u4 | Display start | Divisor. |
| 0xAC | 4 | u4 | Shutter angle | Degrees, 0 to 720. Default 180. |
| 0xB0 | 4 | u4 | 360 in the samples. | |
| 0xB4 | 4 | s4 | Shutter phase | Degrees, -360 to 360. |
| 0xB8 | 4 | u4 | 360 in the samples. | |
| 0xBC | 4 | u4 | Unknown: 0, 1 or 2. | |
| 0xC0 | 4 | u4 | Unknown. | |
| 0xC4 | 4 | s4 | Adaptive sample limit | Motion blur; default 128, at most 256. |
| 0xC8 | 4 | s4 | Samples per frame | Motion blur; 2 to 64, default 16. |
| Flag | Mask | Meaning |
|---|---|---|
| Bit 0 | 0x00000001 | Hide shy layers. |
| Bit 3 | 0x00000008 | Motion blur enabled. |
| Bit 4 | 0x00000010 | Frame blending enabled. |
| Bit 5 | 0x00000020 | Preserve frame rate when nested or in the render queue. |
| Bit 7 | 0x00000080 | Preserve resolution when nested. |
| Bit 8 | 0x00000100 | Unknown. |
| Bit 9 | 0x00000200 | Unknown. |
| Bit 15 | 0x00008000 | Draft 3D (inferred). |
Composition timing
Every time is a dividend and a divisor. The composition’s timebase is usually the divisor, and 600 is used for some initial values. Timebase equals the frame rate times the time scale times 256: at 24 frames a second one frame is 1024 units and the timebase is 24576, at 25 it is 1024 and 25600, at 30 frames it is 1024 and 30720, at 60 it is 512 and 30720. The NTSC rates share a timebase of 23976: 23.976 gets 1000 units a frame and 29.97 gets 800. Keyframe times in the composition are counted in timebase units too.
Not covered here
Layers, properties and keyframes, the footage source records (LIST:Pin,
sspc, opti), Essential Graphics and panel state are described
in the py_aep specification but not yet on this site. Fields marked unknown above have
no public explanation.