AEP File Documentation
Summary
An AEP file is an Adobe After Effects Project, the editable project document of Adobe’s motion-graphics and visual-effects application. It is not a video: the .aep stores compositions, layers, keyframes, effects and expressions plus references (links) to your source footage, which must travel with it. Its MIME type is application/octet-stream. Only After Effects opens it; to get a playable clip you render the project to MP4 or MOV.
Technical details
| Feature | Value |
|---|---|
| Full name | Adobe After Effects Project |
| File extension | .aep (XML variant .aepx, template .aet) |
| MIME type | application/octet-stream |
| Format type | Binary project file (references assets; stores no rendered video) |
| Developer | Adobe Inc. (originally CoSA, 1993) |
| Introduced | 1993 (After Effects 1.0) |
| Container / base format | RIFX (big-endian RIFF), form type Egg! |
| Byte order | Big-endian |
| Magic number | 52 49 46 58 (“RIFX”) at offset 0 |
| Open standard | No (proprietary, undocumented) |
| Specification | None published; format is internal to After Effects |
| Stores | Compositions, layer stack, keyframes, masks, effects, expressions, render settings |
| Does not store | Source footage, images or audio (kept as links) |
| Opens with | Adobe After Effects (Creative Cloud, paid) — the only reader |
| Platforms | Windows, macOS (same project format on both) |
| Forward compatibility | Limited; a newer-version .aep will not open in an older After Effects |
| Related extensions | .aepx, .aet, .mogrt, .prproj |
| Typical output | Rendered to .mp4 / .mov via the Render Queue or Media Encoder |
| Specification URL | helpx.adobe.com/after-effects/using/projects.html |
What is an AEP file?
An AEP file is the native project document of Adobe After Effects, the compositing and motion-graphics application first released in 1993 by the Company of Science and Art (CoSA) and bought by Adobe Systems in 1994. The .aep extension stands for After Effects Project. It is the working file you save while building an animation: it records the structure of the job, not the finished picture.
The distinction matters more here than for almost any other media extension. A .mp4 or a .png contains the actual pixels. An .aep contains none. It stores the compositions, the layer stack, every keyframe and mask, the applied effects and their parameters, expressions, and the render-queue settings, together with links to the source footage, images and audio on disk. Nothing you can watch exists inside the file until After Effects reads the project, pulls in the linked assets, and renders frames. This is why an .aep opened on a second machine so often shows footage as “missing”: the recipe arrived, the ingredients did not.
The RIFX container: big-endian RIFF and the Egg! form
An .aep is a binary file built on RIFF, the Resource Interchange File Format, the same tagged-chunk model behind WAV and AVI. RIFF stores data as a tree of chunks, each introduced by a four-character ASCII identifier and a length. After Effects uses the big-endian flavour, which is signalled by the identifier RIFX rather than the little-endian RIFF.
offset 0 "RIFX" 4 bytes container magic (big-endian RIFF)
offset 4 size uint32 total payload length, big-endian
offset 8 "Egg!" 4 bytes form type: After Effects project
offset 12 ... chunks nested LIST / data chunks follow
The first four bytes are 52 49 46 58, ASCII RIFX. Bytes 4–7 are a 32-bit size, and because this is RIFX that integer is stored most-significant-byte first (big-endian), the opposite of a normal RIFF file. Bytes 8–11 are the form type Egg!, a nod to CoSA’s original codename, which marks the file specifically as an After Effects project rather than any other RIFF form.
Everything after the form type is a sequence of chunks and LIST groups. Each chunk begins with its own four-character tag and a big-endian length, so a parser can walk the tree by reading a tag, reading the length, and skipping forward. The internal chunk names (for compositions, layers, keyframe streams and so on) are not published by Adobe; the container grammar is standard RIFF, but the meaning of the payload chunks is private to After Effects.
Binary AEP versus XML AEPX
The same project can be saved in two encodings. The default .aep is the compact binary RIFX file described above. The alternative, chosen through File > Save As > Save a Copy as XML, is an .aepx file: the identical project serialised as plain-text XML instead of binary chunks. An .aepx opens with an XML declaration (<?xml version=…) rather than the RIFX signature, and it is far larger because tags and values are spelled out as text.
AEPX exists mainly for tooling: text diffs it under version control, scripts can rewrite asset paths with a text editor, and a broken project is sometimes recoverable by hand. It carries the same references-not-media model, so an .aepx still needs its linked footage. Most people never see one; After Effects treats the two as interchangeable and can open either.
Compositions and the layer stack
The unit of work inside a project is the composition (comp): a timeline with a fixed resolution, frame rate, pixel aspect and duration. A project holds any number of comps, and a comp can be nested inside another as a single layer, which is how complex shots are assembled from reusable pieces. The .aep records each comp’s settings and its ordered stack of layers.
Layers are the elements stacked in a comp: footage layers (pointing at a source clip or still), solids, shape layers, text layers, cameras, lights and adjustment layers. Every layer carries a transform group (anchor point, position, scale, rotation, opacity), an in/out point on the timeline, a blending mode, and any masks drawn on it. The file stores this hierarchy per comp, along with parenting relationships that let one layer inherit another’s transform.
Keyframes, effects and expressions
Animation is stored as keyframes on individual properties. A keyframe records a time and a value; between keyframes After Effects interpolates. The project also stores the interpolation type per keyframe (linear, bezier, hold) and the bezier tangent handles that shape ease-in and ease-out, so the exact motion curve is reproduced on reopening, not recomputed.
Effects are stored as an ordered list per layer: each entry names an effect (a built-in like Gaussian Blur, or a third-party plug-in) and holds its parameter values, themselves keyframeable. Because an effect can reference a plug-in that is not installed, opening a project on another machine can report a missing effect the same way it reports missing footage.
Expressions are small JavaScript snippets attached to a property that compute its value at each frame instead of reading a keyframe. An expression can read another layer’s properties, the current time, or project variables, which is how rigs and data-driven templates work. The expression text is saved verbatim in the .aep. This scripting capability is also the reason a downloaded project is not entirely passive: a template can ship .jsx scripts or expression-driven setups, so run scripts only from templates you trust.
Linked assets and the missing-footage problem
The single most common surprise with .aep files follows directly from the format. Source media is referenced by path, never embedded. The project stores a link to each footage item, and when After Effects opens the file it tries to resolve those paths on the current system. Any it cannot find are flagged as missing, shown as colour bars, and the comp renders with placeholders until you relink them.
The correct way to move a project is File > Dependencies > Collect Files, which copies the .aep and every linked asset into one folder with the paths rewritten to be relative. Sending only the .aep is like sending a spreadsheet formula without the cells it points at. This is also why a project file is tiny (often kilobytes to a few megabytes) while the footage it drives can be hundreds of gigabytes.
Rendering the project, and where AEP sits among Adobe formats
There is no such thing as converting an .aep to a video, because the file contains no video to convert. To produce a playable clip you render: add a comp to the Render Queue, or send it to Adobe Media Encoder, and export to MP4 (H.264), MOV (ProRes), an image sequence, or an animated GIF. Rendering evaluates every layer, effect and expression against the linked footage frame by frame and writes out pixels. No third-party tool can do this, because reading an .aep means reimplementing the After Effects engine.
Within Adobe’s ecosystem the .aep has close relatives. A project can be exported as a Motion Graphics Template (.mogrt) so its editable controls can be reused inside Premiere Pro. An After Effects project and a Premiere Pro project (PRPROJ) are not interchangeable files: you cannot convert one to the other, but Dynamic Link lets a comp live inside a Premiere sequence without rendering an intermediate. The .aet extension is simply an After Effects template project, structurally an .aep saved as a starting point.
FAQ
Why does an AEP use RIFX instead of a plain binary blob?
RIFF gives After Effects a self-describing, chunk-based container: each piece of the project is tagged and length-prefixed, so the format can grow (new chunk types for new features) while older readers skip what they do not recognise. The big-endian RIFX variant was chosen historically; the trade-off is that all sizes are stored most-significant-byte first, unlike the little-endian RIFF of WAV and AVI.
Can I open an AEP without After Effects?
No. The container is standard RIFF, but the payload chunks are undocumented and only the After Effects engine can interpret compositions, effects and expressions, then render them. There is no viewer, because a project has nothing to view until it is rendered. If you only need the result, ask the sender to export an MP4 or MOV.
References
- Adobe — After Effects projects and compositions
- Adobe — Collect files and manage dependencies
- Adobe After Effects — product page
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.