Skip to content

virtualritz/after-effects

Repository files navigation

Rust Bindings for Adobe After Effects® & Premiere Pro® SDKs

High-level, safe Rust bindings for the Adobe After Effects (Ae) and Adobe Premiere Pro (Pr) SDKs.

  • Wraps many Ae & Pr API suites in safe Rust.
  • Provides macros to generate all plugin boilerplate.
  • Build and package entirely with Rust – no external build tools needed.

Quick Start

  1. Install just:

    cargo install just
  2. Add dependencies in Cargo.toml:

    cargo add after-effects
    cargo add --dev pipl
  3. Define your plugin description in build.rs and write your plugin code. Check out examples/.

  4. Download AdobePlugin.just into your project root (next to Cargo.toml).

  5. Build your plugin:

    just build   # Debug build (logging and catching panics)
    just release # Optimized release build

Note

If using Premiere SDK features, add to your build.rs:

println!("cargo:rustc-cfg=with_premiere");

Examples

Basic plugin examples: examples/.

Build an example:

CARGO_TARGET_DIR=$(pwd)/target
just build

Advanced plugins

  • Gyroflow plugin is an example of pure Rust plugin with efficient zero-copy GPU rendering.
  • ntsc-rs is a video effect which emulates NTSC and VHS video artifacts.
  • For more advanced use cases, refer to the C/C++ examples from the SDK.

Debugging tips:

  • If the plugin fails to load, check Plugin Loading.log or run AfterEffects from the CLI in your debugger of choice.
  • On macOS, common pitfails are signing or an issue with PkgInfo/Info.plist.
  • On Windows, logs appear in DbgView. On macOS, use Console.

Development Notes

When developing your plugin it's best to use the debug build - it will catch and display panics for you and it will log any messages and stack traces to DbgView (on Windows) or Console (on macOS). This is done by running just build.

The release version can be built using just release

  • To enable optimizations in the debug build:

    [profile.dev]
    opt-level = 3
  • To add debug symbols in release builds:

    [profile.release]
    debug = true
    debug-assertions = true
  • To enable panic catching in release builds, add this to build.rs:

    println!("cargo:rustc-cfg=catch_panics");

After Effects vs Premiere

  • Ae is the main plugin engine; Pr loads most Ae plugins.
  • Pr lacks AEGP suites and always uses software rendering.
  • Pr defines a separate GPU entry point via premiere::define_gpu_filter!.
  • You cannot build a Pr-only video filter – Ae SDK is required.

Regenerating Bindings

Pre-generated bindings are included, so building the plugin just works.

If you want to regenerate the SDK bindings:

  1. Download the Adobe After Effects SDK.

  2. Set environment variables:

    export AESDK_ROOT=/path/to/AfterEffectsSDK
    export PRSDK_ROOT=/path/to/PremiereSDK
  3. Run just build.

⚠️ Note: Adobe’s public SDK may be outdated for 3D Artisan API. This mainly affects custom 3D renderer plugins. 2D plugins are unaffected.

Wrapped Suites

Extensive portions of Ae and Pr SDKs are wrapped:

After Effects suites
AEGP PF DRAWBOT Other
🔳 Artisan Util ✅ AE Adv App ✅ Draw ✅ AE Plugin Helper
✅ Camera ✅ AE Adv Item ✅ Image ✅ AE Plugin Helper 2
✅ Canvas 🔳 AE Adv Time ✅ Path
🔳 Collection ✅ AE App ✅ Pen
✅ Command ✅ AngleParam ✅ Supplier
✅ Comp 🔳 ANSI ✅ Surface
✅ Composite ✅ Background Frame
🔳 Compute 🔳 Batch Sampling
✅ Dynamic Stream ✅ Cache On Load
✅ Effect ✅ Channel
🔳 File Import Manager ✅ Color Settings
✅ Footage ✅ Color Callbacks
🔳 Hash ✅ Color Callbacks 16
✅ IO In ✅ Color Callbacks Float
🔳 IO Out ✅ ColorParam
✅ Item ✅ Effect Custom UI
🔳 Item View ✅ Effect Custom UI Overlay Theme
🔳 Iterate ✅ Effect Sequence Data
✅ Keyframe ✅ Effect UI
🔳 Layer Mask ✅ Fill Matte
✅ Layer Render Options ✅ GPU Device
✅ Layer ✅ Handle
✅ Light ✅ Iterate8
🔳 Marker ✅ iterate16
✅ Mask Outline ✅ iterateFloat
✅ Mask ✅ Param Utils
🔳 Math ✅ Path Data
✅ Memory ✅ Path Query
🔳 Output Module ✅ Pixel Data
✅ Persistent Data ✅ Pixel Format
✅ PF Interface ✅ PointParam
✅ Proj 🔳 Sampling8
🔳 QueryXform 🔳 Sampling16
✅ Register 🔳 SamplingFloat
✅ Render Asyc Manager ✅ Source Settings
✅ Render Options ✅ Transition
🔳 Render Queue Item ✅ Utility
🔳 Render Queue ✅ World
✅ Render ✅ World Transform
🔳 RenderQueue Monitor
✅ Sound Data
✅ Stream
🔳 Text Document
🔳 Text Layer
🔳 Tracker
🔳 Tracker Utility
✅ Utility
🔳 Workspace Panel
✅ World

*The register suite currently excludes the artisan and AEIO registration API

Premiere suites
Premiere MediaCore Control Surface Other
🔳 Audio 🔳 Accelerated Render Invocation 🔳 ControlSurface ✅ PF Background Frame
🔳 Clip Render 🔳 App Info 🔳 ControlSurface Command ✅ PF Cache On Load
🔳 Deferred Processing 🔳 Application Settings 🔳 ControlSurface Lumetri ✅ PF Pixel Format
🔳 Error 🔳 Async File Reader 🔳 ControlSurface Marker ✅ PF Source Settings
🔳 Export Audio Param 🔳 Async Operation 🔳 ControlSurface Mixer ✅ PF Transition
🔳 Export Standard Param 🔳 Export File 🔳 ControlSurface Transport ✅ PF Utility
🔳 ExportController 🔳 Export Info 🔳 ControlSurfaceHost ✅ Opaque Effect Data
🔳 File Registration 🔳 Export Param 🔳 ControlSurfaceHost Command 🔳 Captioning
🔳 Image Processing 🔳 Export Progress 🔳 ControlSurfaceHost Lumetri 🔳 Effect Stream Label
🔳 Legacy 🔳 Exporter Utility 🔳 ControlSurfaceHost Marker 🔳 FlashCueMarkerData
🔳 Media Accelerator ✅ GPU Device 🔳 ControlSurfaceHost Mixer 🔳 Importer File Manager
✅ Memory Manager ✅ GPU Image Processing 🔳 ControlSurfaceHost Transport 🔳 Marker
🔳 Palette 🔳 Playmod Immersive Video 🔳 ControlSurfacePlugin
🔳 Pixel Format 🔳 Playmod Overlay 🔳 String
🔳 Playmod Audio 🔳 Sequence Audio
🔳 Playmod Device Control ✅ Sequence Info
✅ PPix 🔳 Sequence Render
✅ PPix 2 🔳 Smart Rendering
🔳 PPix Cache 🔳 String
🔳 PPix Creator 🔳 Transmit Invocation
🔳 PPix Creator 2 ✅ Video Segment
🔳 RollCrawl 🔳 Video Segment Render
🔳 Threaded Work
✅ Time
✅ Window

Contributing / Help Wanted

  • Wrap missing suites (see tables above).
  • Add more examples & docs.
  • Improve error handling (e.g. color-eyre).

License

Licensed under Apache-2.0 or BSD-3-Clause or MIT or Zlib at your option.

About

High(er) level Rust bindings for the Adobe After Effects® SDK

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages