Adobe does not document this format. These pages follow the specification written by the py_aep project, which worked from about 1,350 projects saved by After Effects CC 2018 to AE 2026 and from opening files changed in a single field. Unless noted, the layouts are those of AE 2026.
Types and notation
The file is big-endian, except for the chunks and fields listed under Little-endian data. Offsets are from the start of the chunk body, in hexadecimal; lengths are in bytes; bit 0 is the least significant.
| Type | Size | Meaning |
|---|---|---|
u1, u2, u4, u8 | 1, 2, 4, 8 | Unsigned integer. |
s1, s2, s4, s8 | 1, 2, 4, 8 | Two’s-complement signed integer. |
f4, f8 | 4, 8 | IEEE 754 floating point. |
| fixed 16.16 | 4 | A u2 integer part, then a u2 fraction in 65536ths. |
| fourcc | 4 | Four ASCII characters. Codes may end in spaces, as in Pin . |
| char[N] | N | Text padded with NUL bytes. |
| bytes[N] | N | Raw bytes. |
Most times are written as a dividend and a divisor; seconds equal dividend divided by divisor. Most frame rates are fixed 16.16.
File layout
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 4 | fourcc | ID | RIFX. |
| 0x04 | 4 | u4 | Size | Size of the RIFX body, up to the XMP packet. |
| 0x08 | 4 | fourcc | Form | Egg!. |
| 0x0C | varies | chunks | Chunks | The project, in the order below. |
| … | varies | UTF-8 | XMP | An XMP packet, optional, running to the end of the file. Nothing records its length. |
Chunks
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 4 | fourcc | Tag | The chunk’s name. |
| 0x04 | 4 | u4 | Size | Body length, without this header or the pad byte. |
| 0x08 | n | Body | The content. | |
| 0x08 + n | 0 or 1 | Pad | One zero byte when the body is odd in length, so the next chunk starts at an even offset. |
LIST and other containers
A LIST chunk groups chunks. These pages write LIST:Item for a
LIST whose type is Item. The root RIFX chunk has
the same layout, with type Egg!.
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 4 | fourcc | Type | The list type. |
| 0x04 | varies | chunks | Children | Up to the end of the body. LIST:btdk, a text document, instead holds raw bytes. |
Five tags are containers with no list type; their body is normally a single
Utf8 and the tag says what it is.
| Tag | Holds |
|---|---|
tdsn | A property’s display name. -_0_/- means it has not been renamed. |
pdnm | An effect parameter’s name, or a popup’s items separated by |. |
fnam | The match name of an effect instance. |
vfdn | A variable font axis name (AE 26 on). |
RCom | A render queue item’s comment. |
Strings
A Utf8 chunk is the whole string: UTF-8, with no length prefix, terminator
or byte order mark. Most strings sit directly after the chunk they belong to. Three do
not follow this rule: expr holds UTF-8 with a NUL in files older than
version 92.0, wsnm is UTF-16LE, and cmta is UTF-8 followed
by NUL bytes.
Little-endian data
These whole chunks are little-endian: CsCt, EfDC,
dwga, idpc, idpi, iide,
linl, mrid, sfid, StVS,
strt, btov, mtov, mdlv and
mdld. Little-endian fields also appear inside big-endian chunks:
shph at 0x14, tdb4 at 0x3C, NmHd at 0x10, the
orientation values in LIST:otst, and some plug-in data.
How After Effects reads a file
- It reads a list’s children by tag, scanning forward from the last chunk it read. A tag it does not know is skipped.
- Most chunks are required. A missing or out-of-order required chunk gives the error “missing data in file”.
- Some optional chunks end the scan when missing, losing the chunks after them in the same list.
- A writer should keep chunks in After Effects’ order, and not drop chunks it does not understand.
Root chunks in order
| Chunk | Meaning |
|---|---|
svap | The saving application’s build word. |
head | File version, build word, next item ID. |
nhed, nnhd | Project display settings. |
adfr | Project audio sample rate. |
LIST:Pefl | Effects used by the project. |
LIST:EfdG | Parameter definitions, one per effect type used. After Effects rebuilds them. |
qtlg | Legacy QuickTime gamma setting (inferred). |
LIST:gpuG | GPU renderer ID. |
LIST:sfnm | Solids folder name and ID. |
mrid | Media Replacement Comps folder ID (AE 2020 on). |
acer | Compensate for scene-referred profiles. |
LIST:CPPl | ICC profiles the project refers to. |
cpid | Working colour space profile ID. |
lnrb, lnrp | Present when linear blending is on, and when the working space is linearised. |
dwga | Working gamma. |
pcms + Utf8 | Colour management settings (AE 2022 on). |
PwCs + Utf8 | Working colour space (AE 2022 on). |
pdvc + Utf8 | Display colour space (AE 23 on). |
LIST:ExEn | Expression engine (CC 2019 on). |
LIST:Fold | The project’s items. |
wsns, wsnm, Utf8 | Workspace name. |
fcid | The active item. |
oacc, acid, ocid | Essential Graphics panel state (rare). |
LIST:LSIf | Project panel state. |
LIST:LRdr | The render queue. |
LIST:PTRE | Project panel tree state. |
File versions
The first four bytes of head are the file version, a u2 major
and a u2 minor. After Effects refuses a file whose major is higher than its
own, and chooses some chunk layouts by version.
| Release | Major | Seen |
|---|---|---|
| CC 2018 (15.x) | 92 | 92.14 |
| CC 2019 (16.x) to AE 2022 (22.x) | 93 | 93.40, 93.43 |
| AE 23 | 94 | 94.9 |
| AE 24 | 95 | 95.6 |
| AE 25 | 96 | 96.5, 96.9 |
| AE 26 | 97 | 97.2, 97.7 |
From AE 2022 on, the major is the release number plus 71. For example, the
ldta layer record is 160 bytes
before AE 23 and 164 bytes from AE 23.
Header chunks
svap (4 bytes)
A u4: the build word of the program that saved the file, the same value as
head at 0x04. It is not used to decide whether a file can be opened.
head (20 bytes)
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| 0x00 | 2 | u2 | Major | File version major. |
| 0x02 | 2 | u2 | Minor | File version minor. |
| 0x04 | 4 | u4 | Build word | See below. |
| 0x08 | 4 | u4 | 0x80000000 in every sample. | |
| 0x0C | 4 | u4 | Next ID | Greater than every item ID in the project. |
| 0x10 | 4 | u4 | Revision | Grows as the project is edited and saved. |
Build word
| Bits | Meaning |
|---|---|
| 31 | 0. |
| 30–26 | Major version divided by 8. |
| 25–22 | Operating system: 12 Windows, 14 macOS. |
| 21–19 | Major version modulo 8. Major is the high part times 8, plus this. |
| 18–15 | Minor version. |
| 14–11 | Bug-fix version (inferred). |
| 10 | 1 in every sample. |
| 9 | 1 release build, 0 beta. |
| 8 | 0 in every sample. |
| 7–0 | Build number. |
For AE 26.0 build 67 on Windows the word is 0x0F100643.
nhed (32 bytes) and nnhd (40 bytes)
Both hold project settings, and After Effects keeps their shared fields equal.
| Field | nhed | nnhd | Meaning |
|---|---|---|---|
| Time display | 0x08 | 0x08 | Bit 7, feet and frames film type (1 is 16 mm, 0 is 35 mm). Bits 6–0, time display type (0 timecode, 1 frames). |
| Footage start | 0x09 | 0x09 | 0 start at 0, 1 use the media’s timecode. |
| Feet and frames | 0x0B | 0x0B | Bit 0: show frames as feet and frames. |
| Timecode base | 0x0C (u1) | 0x0E (u2) | Frames a second of the timecode display. 1 to 999 in nnhd. |
| Frame count | 0x0E | 0x14 | 0 start at 0, 1 start at 1, 2 timecode conversion. |
| Colour depth | 0x0F | 0x18 | 0 8 bpc, 1 16 bpc, 2 32 bpc. |
| Transparency grid | 0x10 | 0x19 | 1: thumbnails use the transparency grid. |
| Text encoding | 0x12 (u2) | 0x1A (u2) | System text encoding of the saving machine: 0x04E4 (Windows-1252) up to AE 25, 0xFDE9 (UTF-8) from AE 26, 0x0100 on macOS. |
| Save-dependent bytes | 0x14 (12 bytes) | 0x1C (12 bytes) | Vary from save to save; ignored when opening. |
The other bytes are zero in the samples, or have unknown purposes.