Problem: After Effects 26.3 pastes copied vector artwork as shape layers. Edit ▸ Paste only
knew the app's own clipboard, so SVG markup on the system clipboard was ignored; turning SVG
into shapes needed an imported footage file and Create Shapes from Vector Layer.
Fix: a new `edit.pasteSvg {svg, name?, comp?}` command builds a shape layer from SVG text with
the same conversion as Create Shapes from Vector Layer (paths, fills, strokes, gradients, clip
masks), above the selected layer with the SVG canvas centred in the comp, as one undo step;
oversized, non-SVG or shapeless text is rejected. In the UI, Ctrl/Cmd+V (and the native Edit ▸
Paste) run it when the system clipboard holds SVG. Copying in the app already replaces the
system clipboard with a note, so SVG there is newer than the app's clipboard.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8.0 KiB
File format parity
Last reviewed: 2026-10-10 · Last updated: 2026-10-10 · Change: major (first per-format table, measured against the After Effects 2026 26.5 bundle and this repository's import/export registries) · Target: Adobe After Effects 2026
Every format After Effects reads or writes, with EffectCraft's support. After Effects' list comes
from its installed bundle (26.5.0.89: Info.plist CFBundleDocumentTypes, Plug-ins/Format,
Resources/usd_plugins) and its public documentation; ours from crates/media/src/lib.rs
(STILL_EXTENSIONS, VIDEO_EXTENSIONS, MODEL_EXTENSIONS, FilmCraft's AUDIO_EXTENSIONS),
crates/engine/src/commands/file.rs (DATA_EXTENSIONS) and OutputFormat::ALL in
crates/project/src/render_queue.rs. Video codecs come from FilmCraft's pure-Rust crates
(architecture.md).
Overall ≈ 50% (estimated, weighted by use): modern delivery and interchange formats are strong, but After Effects' own project, template and preset formats, which decide whether existing work moves over, are 0%.
Fidelity key: exact (bit-exact or within a stated tolerance of a reference), good (round trips and renders, checked by tests, not against After Effects), partial (named limitations), none.
After Effects' own formats
| Format | After Effects | EffectCraft read | Write | Fidelity / notes | Tested by |
|---|---|---|---|---|---|
Project .aep |
R/W (native) | none | none | Main file format; needs an owner decision on clean-room scope (#190, #248: py-aep as an external converter). Blocks beta | — |
XML project .aepx |
R/W | none | none | Same decision as .aep |
— |
Templates .aet / .aetx |
R/W | none | none | Own .ectemplate (Home ▸ Templates, Save as Template) |
templates.rs tests |
Motion Graphics template .mogrt |
W (and R in Premiere) | none | none | Own .ectemplate Essential Graphics templates; FilmCraft rejects our .fcgt export (#611) |
essential.rs tests |
Animation preset .ffx |
R/W, 621 bundled | none | none | Own JSON .ecpreset; .ffx is out of clean-room scope (AGENTS.md §2) |
animation.rs tests |
Render Settings / Output Module templates .ars / .aom |
R/W | none | none | Templates are stored in the project and settings instead | render_templates.rs tests |
Scripts .jsx |
R (run) | yes | — | After Effects object model and ScriptUI (scripting-parity.md) | crates/script tests |
Binary scripts .jsxbin |
R (run) | none | — | No public specification: out of scope | — |
Motion graphics JSON .mgjson |
R (data) | none | none | Media Browser lists it; import accepts only .json / .csv / .tsv data |
— |
Captions .aecap, graphics .aegraphic |
R/W | none | none | — | — |
Native .ecproj |
— | yes | yes | Versioned JSON; schema migrations tested; absolute footage paths, no relinking (gap 18) | engine project tests |
Footage: stills
| Format | After Effects | Read | Write | Fidelity / notes |
|---|---|---|---|---|
| PNG | R/W | yes | yes (sequence) | good |
| JPEG | R/W | yes | yes (sequence) | good |
| TIFF | R/W | yes | yes (sequence) | good |
| OpenEXR (multi-layer, Cryptomatte) | R/W | yes | yes (32-bit sequence) | good; HTJ2K compression fails (#482); EXRs without an unnamed RGB layer decode twice (#474) |
| Photoshop PSD / PSB | R (footage, composition) / W (layers, sequence) | yes (layers, groups, masks, styles, smart objects) | Save Frame As ▸ Photoshop Layers; no Photoshop sequence output | good, from Adobe's published spec |
Illustrator .ai, PDF, EPS |
R | yes (vector, Continuously Rasterize, Create Shapes) | — | partial: no JPX / JBIG2 images, no Illustrator procset EPS |
| SVG | R | yes | — | good; SVG markup on the clipboard pastes as a shape layer (26.3, #738); Illustrator's own clipboard data (PDF/AI) doesn't |
| GIF | R/W | yes | yes (animated) | good |
| BMP | R | yes | — | good |
| WebP | — | yes | — | beyond After Effects |
Targa .tga |
R/W | none | none | Media Browser lists it but import refuses (gap 17) |
DPX / Cineon .dpx .cin |
R/W | none | none | Same; common in film VFX |
Radiance .hdr |
R/W | none | none | Same |
| SGI, PICT, ElectricImage, RLA/RPF images | R | none | none | Legacy; RPF camera data import exists (keys.rpfCameraImport) |
| Camera Raw (DNG, CR3, NEF…) | R (Camera Raw) | none | none | LightCraft has decoders that could be shared |
| HEIF / AVIF | R (platform) | none | none | — |
Footage: video and audio
| Format | After Effects | Read | Write | Fidelity / notes |
|---|---|---|---|---|
| MP4 / MOV with H.264 | R/W | yes | yes (own encoder, + AAC) | decoder bit-exact on conformance streams (FilmCraft) |
| HEVC (H.265) | R/W | yes | yes (MP4 hvc1, Main / Main 10) |
encoder bit-exact with ffmpeg's decode; no B-frames / SAO, larger files |
| AV1 | R | yes | yes (MP4 av01, WebM) |
beyond After Effects' export; no B-frames / CDEF |
| Apple ProRes (422 family, 4444) | R/W | yes | yes | good; 4444 colour tag wrong (#340); no ProRes RAW |
| WebM / Matroska (VP9, AV1, Opus) | R (limited) | yes, incl. VP9 alpha | yes | beyond After Effects |
| MXF (OP1a / OP-Atom) | R/W | none (FilmCraft reads it; not wired) | none | Media Browser lists it |
| AVI | R | none | none | Media Browser lists it |
| DNxHD / DNxHR | R/W | unverified (FilmCraft decodes it; reachable only inside .mov) |
none | — |
| BRAW, R3D, ARRIRAW | R (plug-ins / SDKs) | none | none | proprietary SDKs |
| Variable-frame-rate phone video | R | unverified | — | needs a real-media corpus |
| WAV, AIFF | R/W | yes | yes (16-bit PCM) | good |
| MP3, AAC / M4A, FLAC, Ogg, Opus | R | yes | AAC and Opus inside video only | MP3 layer can go silent (#324) |
3D models
| Format | After Effects 26 | Read | Notes |
|---|---|---|---|
| glTF / GLB | R | yes (meshes, PBR, skins, animations) | good |
| OBJ / MTL | R | yes | good |
| FBX | R (usdFbx) |
none | gap 13 |
| USD / USDZ | R (usd_plugins) |
none | gap 13 |
| STL | R (usdStl) |
none | gap 13 |
Substance 3D materials .sbsar |
R (26.0) | none | gap 13 |
Interchange and data
| Format | After Effects | Read | Write | Notes |
|---|---|---|---|---|
Premiere Pro .prproj |
R (import) | none | none | Out of clean-room scope pending a decision; we interchange through FCP7 XML, FCPXML, OTIO, EDL, AAF and OMF instead (beyond After Effects) |
| Lottie JSON / dotLottie | via third-party plug-ins | yes | yes | beyond After Effects; a warnings list names what Lottie can't express |
| JSON / CSV / TSV data | R | yes (footage(), data layers) |
— | good |
LUTs (.cube, .3dl, .csp, .spi1d/3d, CDL) |
R | yes (Apply Color LUT, OCIO effects) | — | Apply Color LUT bug (#514) |
| OpenColorIO configs | R (OCIO 2.5.1, ACES 2.0 in 26.5) | yes (OCIO v2 subset, Blender configs) | — | partial: no ACES 2.0 output transforms |
| Fonts (TTF, OTF, TTC, variable) | R | yes | — | good |
| Mocha shapes | R (Mocha AE) | own documented JSON | — | Mocha's format is not public |
Vanishing Point .vpe |
R | none | — | no public specification; the menu entry explains why |
Render queue outputs (OutputFormat::ALL, 12)
H.264 MP4, HEVC MP4, AV1 MP4, ProRes MOV, WebM (VP9 or AV1 + Opus), PNG / JPEG / TIFF / OpenEXR sequences, animated GIF, WAV, AIFF. Missing against After Effects + Media Encoder: uncompressed or lossless single-file video (#372), DPX / Targa / Photoshop sequences, MXF, DNxHR, hardware encoders (hardware-parity.md), and rendering safely over an existing file (#325).
Estimate
≈ 130–230 h: .aep / .aepx import 80–160 h (after the owner decision), wiring TGA / DPX /
HDR / MXF / AVI / DNx import and DPX/TGA output 10–20 h, FBX / USD / STL and Substance 25–45 h,
relinking 6–12 h, .mogrt-compatible templates 15–30 h (partly parallel with the rest).
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-10 | major | First file format parity document, from the After Effects 26.5 bundle and this repository's import/export registries |