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.
-
Install
just:cargo install just
-
Add dependencies in
Cargo.toml:cargo add after-effects cargo add --dev pipl
-
Define your plugin description in
build.rsand write your plugin code. Check out examples/. -
Download
AdobePlugin.justinto your project root (next toCargo.toml). -
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");Basic plugin examples: examples/.
Build an example:
CARGO_TARGET_DIR=$(pwd)/target
just build- 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.
- If the plugin fails to load, check
Plugin Loading.logor 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.
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");
- Ae is the main plugin engine; Pr loads most Ae plugins.
- Pr lacks
AEGPsuites 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.
Pre-generated bindings are included, so building the plugin just works.
If you want to regenerate the SDK bindings:
-
Download the Adobe After Effects SDK.
-
Set environment variables:
export AESDK_ROOT=/path/to/AfterEffectsSDK export PRSDK_ROOT=/path/to/PremiereSDK
-
Run
just build.
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 |
- Wrap missing suites (see tables above).
- Add more examples & docs.
- Improve error handling (e.g.
color-eyre).
Licensed under Apache-2.0 or BSD-3-Clause or MIT or Zlib at your option.