All Projects → boltframe → aftereffects-aep-parser

boltframe / aftereffects-aep-parser

Licence: MIT License
✨ An unofficial parser for Adobe After Effects *.aep project files

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to aftereffects-aep-parser

Lottie React Native
Lottie wrapper for React Native.
Stars: ✭ 14,707 (+40752.78%)
Mutual labels:  after-effects
ae-ease-to-gsap-customease
Converts the keyframes of the selected property in After Effects to a set of SVG path commands that can be used directly in GreenSock's CustomEase plugin
Stars: ✭ 58 (+61.11%)
Mutual labels:  after-effects
quickExp
a script for controlling expressions quickly in After Effects
Stars: ✭ 24 (-33.33%)
Mutual labels:  after-effects
AE-Icon
🐱 use bodymovin to render some interesting After Effects vector icon
Stars: ✭ 47 (+30.56%)
Mutual labels:  after-effects
AEScript-Explode-Shape-Layer
Extract shapes from a shape layer to individual layers
Stars: ✭ 37 (+2.78%)
Mutual labels:  after-effects
create-expression-lib
🐱‍👤 CLI to create an After Effects expression library in TypeScript
Stars: ✭ 23 (-36.11%)
Mutual labels:  after-effects
Ae Element
🎨 use bodymovin to render some interesting After Effects vector element
Stars: ✭ 180 (+400%)
Mutual labels:  after-effects
memory
A script for Adobe After Effects to save precomp layers with live preview
Stars: ✭ 60 (+66.67%)
Mutual labels:  after-effects
jsxbin
Convert jsx ExtendScript files into jsxbin files using ExtendScript Toolkit
Stars: ✭ 73 (+102.78%)
Mutual labels:  after-effects
DuAEF
Duduf After Effects Framework
Stars: ✭ 20 (-44.44%)
Mutual labels:  after-effects
adobe-discord-rpc
Discord Rich Presence extension for your adobe apps!
Stars: ✭ 383 (+963.89%)
Mutual labels:  after-effects
AE-Slicer
Save PNG slices in AE. Support multiple slice zones in one comp.
Stars: ✭ 21 (-41.67%)
Mutual labels:  after-effects
ovid-editor
Adobe panel providing the most advanced scripting environment possible -- Typescript, app DOM autocomplete, full I/O features and more
Stars: ✭ 43 (+19.44%)
Mutual labels:  after-effects
Flopsy
A cute little bunny animation that responds to text field interactions.
Stars: ✭ 242 (+572.22%)
Mutual labels:  after-effects
go-xmp
A native Go SDK for the Extensible Metadata Platform (XMP)
Stars: ✭ 36 (+0%)
Mutual labels:  riff
Duaef duik
Duduf After Effects Framework | Duik
Stars: ✭ 197 (+447.22%)
Mutual labels:  after-effects
klangsynthese
Waveform and Audio Synthesis library in Go
Stars: ✭ 57 (+58.33%)
Mutual labels:  riff
Spark-PMoF
Spark Shuffle Optimization with RDMA+AEP
Stars: ✭ 28 (-22.22%)
Mutual labels:  aep
ommpfritt
semantic, procedural, non-destructive vector modelling
Stars: ✭ 37 (+2.78%)
Mutual labels:  motion-graphics
quickSRT
generating .srt(subtitles) in After Effects
Stars: ✭ 24 (-33.33%)
Mutual labels:  after-effects

aftereffects-aep-parser

This project is dedicated to reverse-engineering, parsing and exposing useful APIs for understanding Adobe After Effects AEP project files. This may be useful for a variety of reasons. For example, one might want to programmatically determine the number of compositions in a project, their resolution(s), framerate, etc. Traditionally, one would need to piggyback the ExtendScript engine running within After Effects to retrieve this information. While this procedure is fairly easy to accomplish, it is exponentially more resource expensive than static file analysis, and requires a running instance of the After Effects Scripting Engine (which can only be run on Windows and MacOS).

Quick Start

go get -u github.com/boltframe/aftereffects-aep-parser
package main

import (
  "fmt"
  aep "github.com/boltframe/aftereffects-aep-parser"
)

func main() {
  project, err := aep.Open("./my-project.aep")
  if err != nil {
    panic(err)
  }
  fmt.Println(project)
}

Contributing

Any and all contributions are welcome! There is no official procedure for contributing yet, but please start by opening a new issue describing your findings and anticipated contribution. Thank you!

Research Procedure

After Effects Project files are currently encoded using the Resource Interchange File Format (RIFF) in a Big-Endian byte-ordering (also known as RIFX). This can be confirmed by inspecting the first four bytes of any AEP file which will contain the following ASCII characters: RIFX..... Once parsed into Chunks, you can inspect the internal representation and attempt to understand its structure.

I have found that the online tool Kaitai is extremely helpful for quickly viewing structured binary data. I use the following (possibly outdated) language definition for validating AEP files:

meta:
  id: aep
  endian: be
  file-extension: aep

seq:
  - id: magic1
    contents: RIFX
  - id: file_size
    type: u4
  - id: magic2
    contents: Egg!
  - id: data
    type: blocks
    size: file_size - 4
    
types:
  blocks:
    seq:
      - id: entries
        type: block
        repeat: eos
  block:
    seq: 
      - id: block_type
        type: u4
        enum: chunk_type
      - id: block_size
        type: u4
      - id: data
        size: block_size
        type: 
          switch-on: block_type
          cases:
            'chunk_type::list': list_body
            'chunk_type::utf8': utf8_body
            'chunk_type::cdta': cdta_body
            'chunk_type::idta': idta_body
            'chunk_type::cmta': utf8_body
            'chunk_type::fdta': fdta_body
            _: ascii_body
      - id: padding
        type: u1
        if: (block_size % 2) != 0
  list_body:
    seq:
      - id: identifier
        type: str
        encoding: ascii
        size: 4
      - id: entries
        type: blocks
  utf8_body:
    seq:
      - id: data
        type: str
        encoding: utf8
        size-eos: true
  ascii_body:
    seq:
      - id: data
        type: str
        encoding: ascii
        size-eos: true
  idta_body:
    seq:
      - id: unknown1
        type: str
        size: 18
        encoding: ascii
      - id: id
        type: u2
  fdta_body:
    seq:
      - id: unknown1
        type: str
        encoding: ascii
        size: 1
  cdta_body:
    seq:
      - id: unknown1
        type: str
        size: 140
        encoding: ascii
      - id: width
        type: u2
      - id: height
        type: u2
      - id: unknown2
        type: str
        size: 12
        encoding: ascii
      - id: frame_rate
        type: u2
        
enums:
  chunk_type:
    0x4c495354: list
    0x55746638: utf8
    0x63647461: cdta # Composition data
    0x69647461: idta # Item data
    0x636d7461: cmta # Comment data
    0x66647461: fdta # Folder data

By making small changes to an After Effects project and uploading it to the Kaitai viewer, you can narrow down on how data is represented, and start to write additional language definitions and structures.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].