{"id":21630091,"url":"https://github.com/virtualritz/after-effects","last_synced_at":"2025-04-05T07:01:45.569Z","repository":{"id":40567095,"uuid":"242510991","full_name":"virtualritz/after-effects","owner":"virtualritz","description":"High(er) level Rust bindings for the Adobe After Effects® SDK","archived":false,"fork":false,"pushed_at":"2025-03-23T12:51:43.000Z","size":1782,"stargazers_count":56,"open_issues_count":8,"forks_count":8,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-30T13:12:25.721Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/virtualritz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-23T12:15:54.000Z","updated_at":"2025-03-23T12:51:47.000Z","dependencies_parsed_at":"2023-02-10T01:01:11.200Z","dependency_job_id":"5d234081-10a6-49bf-b8c1-574798d8b666","html_url":"https://github.com/virtualritz/after-effects","commit_stats":{"total_commits":73,"total_committers":3,"mean_commits":"24.333333333333332","dds":0.04109589041095896,"last_synced_commit":"5311d31be6881d9a7c37e6b0ff7e079c5a87ce6f"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualritz%2Fafter-effects","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualritz%2Fafter-effects/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualritz%2Fafter-effects/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtualritz%2Fafter-effects/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/virtualritz","download_url":"https://codeload.github.com/virtualritz/after-effects/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299828,"owners_count":20916190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T02:09:44.745Z","updated_at":"2025-04-05T07:01:45.523Z","avatar_url":"https://github.com/virtualritz.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rust Bindings for Adobe AfterEffects® \u0026 Premiere Pro® SDKs\n\nHigh level bindings for the Adobe AfterEffects® (Ae) and Adobe Premiere Pro® SDKs.\n\nThis wraps many of the API suites in the Ae and Pr SDK and exposes them in _safe_ Rust.\n\nIt also defines a set of macros that implement all the plugin boilerplate for you, so you can\nfocus just on your actual plugin implementation.\n\n_Building the plugins is done entirely with Rust – there's no need to use any external programs or\ndependencies._\n\nPackaging of the final plugin is done using a [`just`](https://github.com/casey/just) script.\nInstall with `cargo install just` and download\n[`AdobePlugin.just`](https://raw.githubusercontent.com/virtualritz/after-effects/master/AdobePlugin.just)\nand put it next to your `Cargo.toml`.\n\nAdobe plugins contain a special resource describing the plugin called `PiPL`. This repository\nincludes a `PiPL` tool written in Rust which generates the needed resource in `build.rs`.\n\nPre-generated SDK bindings are included, so you can compile the final plugin by just running\n`just release`, and it works on both macOS and Windows.\n\nYou can also re-generate the bindings by downloading the SDK headers from Adobe and setting\n`AESDK_ROOT` and/or `PRSDK_ROOT` environment variables.\n\n## Using\n\nAdd `after-effects` or `premiere` to your dependencies and `pipl` to your dev-dependencies.\n\n```text\ncargo add after-effects\ncargo add --dev pipl\n```\n\n\u003e [!NOTE]\n\u003e When using with Premiere and you want to use any of the Premiere's suites, make sure to add `println!(\"cargo:rustc-cfg=with_premiere\");` to your `build.rs` so that the plugin can initialize `premiere`'s basic suite in `EffectMain`\n\n## After Effects vs. Premiere\n\nAdobe plugins are shared between After Effects and Premiere.\n\nThe main engine is based on After Effects, but Premiere loads most of the Ae plugins.\nWhile they have many common parts, there are some areas that are separated.\n\n- Premiere is missing all `AEGP` suites.\n\n- Premiere uses only software rendering, even if the Ae plugin supports GPU render and Smart\n  Render.\n\n- Premiere has a separate entry point for GPU rendering, which can be defined using the\n  `premiere::define_gpu_filter!` macro.\n\n- After Effects and Premiere also have some separate areas that are implemented independently.\n\n- You can't write a video filter plugin using only the Premiere SDK, the base engine is using Ae\n  SDK.\n\n## Getting Started\n\n### Examples\n\nA few basic examples are [included in the repository](https://github.com/virtualritz/after-effects/tree/master/examples).\nFor more advanced use cases, refer to the C/C++ examples from the SDK.\n\nFor a more advanced sample with full GPU rendering you can check out the\n[Gyroflow plugin](https://github.com/gyroflow/gyroflow-plugins)\n\n### Development\n\nWhen developing your plugin it's best to use the debug build - it will catch and display panics\nfor you and it will log any messages and stack traces to `DbgView` (on Windows) or `Console` (on\nmacOS). This is done by running `just build`.\n\nThe release version can be built using `just release`\n\nSome plugins may be slow in debug build, in this case you can add optimizations to the debug build\nby using\n\n```toml\n[profile.dev]\nopt-level = 3\n```\n\nor add debug symbols to your release build by using\n\n```toml\n[profile.release]\ndebug = true\ndebug-assertions = true\n```\n\nin your `Cargo.toml` file.\n\nThe release build doesn't catch panics by default to not add any additional overhead. You can\nopt-in for the panic handler by enabling `catch-panics` `cargo` feature:\n\n```toml\nfeatures = [\"catch-panics\"]\n```\n\n## Help Wanted/To Do\n\n- If you need a suite that's not yet wrapped, feel free to create a PR wrapping that suite.\n\n- Examples and documentation.\n\n- Better error handling. Possibly using [`color`](https://crates.io/crates/color-eyre)`-`[`eyre`](https://crates.io/crates/eyre)?\n\n### Using the Adobe SDK C++ Headers\n\nDownload the [_Adobe After Effects SDK_](https://console.adobe.io/downloads/ae).\n\n\u003e ⚠️ The SDK published by Adobe is outdated if you are using the 3D\n\u003e Artisan API to write your own 3D renderer plug-in.\n\u003e Also see [Features](#features) below for more information.\n\u003e\n\u003e Ignore this if you just want to develop 2D plugins (which still have\n\u003e access to 3D data).\n\nDefine the `AESDK_ROOT` environment variable that contains the path to your\nAe SDK. Typically the directory structure will look like this:\n\n```ignore\nAfterEffectsSDK\n├── After_Effects_SDK_Guide.pdf\n├── Examples\n    ├── AEGP\n    ├── Effect\n    ├── ...\n```\n\n## Wrapped Suites\n\n### After Effects\n\n| AEGP                    | PF                                | DRAWBOT     | Other                 |\n| ----------------------- | --------------------------------- | ----------- | --------------------- |\n| 🔳 Artisan Util         | ✅ AE Adv App                     | ✅ Draw     | ✅ AE Plugin Helper   |\n| ✅ Camera               | ✅ AE Adv Item                    | ✅ Image    | ✅ AE Plugin Helper 2 |\n| ✅ Canvas               | 🔳 AE Adv Time                    | ✅ Path     |                       |\n| 🔳 Collection           | ✅ AE App                         | ✅ Pen      |                       |\n| 🔳 Command              | ✅ AngleParam                     | ✅ Supplier |                       |\n| ✅ Comp                 | 🔳 ANSI                           | ✅ Surface  |                       |\n| ✅ Composite            | ✅ Background Frame               |             |                       |\n| 🔳 Compute              | 🔳 Batch Sampling                 |             |                       |\n| ✅ Dynamic Stream       | ✅ Cache On Load                  |             |                       |\n| ✅ Effect               | ✅ Channel                        |             |                       |\n| 🔳 File Import Manager  | ✅ Color Settings                 |             |                       |\n| ✅ Footage              | ✅ Color Callbacks                |             |                       |\n| 🔳 Hash                 | ✅ Color Callbacks 16             |             |                       |\n| ✅ IO In                | ✅ Color Callbacks Float          |             |                       |\n| 🔳 IO Out               | ✅ ColorParam                     |             |                       |\n| ✅ Item                 | ✅ Effect Custom UI               |             |                       |\n| 🔳 Item View            | ✅ Effect Custom UI Overlay Theme |             |                       |\n| 🔳 Iterate              | ✅ Effect Sequence Data           |             |                       |\n| ✅ Keyframe             | ✅ Effect UI                      |             |                       |\n| 🔳 Layer Mask           | ✅ Fill Matte                     |             |                       |\n| ✅ Layer Render Options | ✅ GPU Device                     |             |                       |\n| ✅ Layer                | ✅ Handle                         |             |                       |\n| ✅ Light                | ✅ Iterate8                       |             |                       |\n| 🔳 Marker               | ✅ iterate16                      |             |                       |\n| ✅ Mask Outline         | ✅ iterateFloat                   |             |                       |\n| ✅ Mask                 | ✅ Param Utils                    |             |                       |\n| 🔳 Math                 | ✅ Path Data                      |             |                       |\n| ✅ Memory               | ✅ Path Query                     |             |                       |\n| 🔳 Output Module        | ✅ Pixel Data                     |             |                       |\n| 🔳 Persistent Data      | ✅ Pixel Format                   |             |                       |\n| ✅ PF Interface         | ✅ PointParam                     |             |                       |\n| ✅ Proj                 | 🔳 Sampling8                      |             |                       |\n| 🔳 QueryXform           | 🔳 Sampling16                     |             |                       |\n| 🔳 Register             | 🔳 SamplingFloat                  |             |                       |\n| ✅ Render Asyc Manager  | ✅ Source Settings                |             |                       |\n| ✅ Render Options       | ✅ Transition                     |             |                       |\n| 🔳 Render Queue Item    | ✅ Utility                        |             |                       |\n| 🔳 Render Queue         | ✅ World                          |             |                       |\n| ✅ Render               | ✅ World Transform                |             |                       |\n| 🔳 RenderQueue Monitor  |                                   |             |                       |\n| ✅ Sound Data           |                                   |             |                       |\n| ✅ Stream               |                                   |             |                       |\n| 🔳 Text Document        |                                   |             |                       |\n| 🔳 Text Layer           |                                   |             |                       |\n| 🔳 Tracker              |                                   |             |                       |\n| 🔳 Tracker Utility      |                                   |             |                       |\n| ✅ Utility              |                                   |             |                       |\n| 🔳 Workspace Panel      |                                   |             |                       |\n| ✅ World                |                                   |             |                       |\n\n### Premiere\n\n| Premiere                  | MediaCore                        | Control Surface                 | Other                    |\n| ------------------------- | -------------------------------- | ------------------------------- | ------------------------ |\n| 🔳 Audio                  | 🔳 Accelerated Render Invocation | 🔳 ControlSurface               | ✅ PF Background Frame   |\n| 🔳 Clip Render            | 🔳 App Info                      | 🔳 ControlSurface Command       | ✅ PF Cache On Load      |\n| 🔳 Deferred Processing    | 🔳 Application Settings          | 🔳 ControlSurface Lumetri       | ✅ PF Pixel Format       |\n| 🔳 Error                  | 🔳 Async File Reader             | 🔳 ControlSurface Marker        | ✅ PF Source Settings    |\n| 🔳 Export Audio Param     | 🔳 Async Operation               | 🔳 ControlSurface Mixer         | ✅ PF Transition         |\n| 🔳 Export Standard Param  | 🔳 Export File                   | 🔳 ControlSurface Transport     | ✅ PF Utility            |\n| 🔳 ExportController       | 🔳 Export Info                   | 🔳 ControlSurfaceHost           | ✅ Opaque Effect Data    |\n| 🔳 File Registration      | 🔳 Export Param                  | 🔳 ControlSurfaceHost Command   | 🔳 Captioning            |\n| 🔳 Image Processing       | 🔳 Export Progress               | 🔳 ControlSurfaceHost Lumetri   | 🔳 Effect Stream Label   |\n| 🔳 Legacy                 | 🔳 Exporter Utility              | 🔳 ControlSurfaceHost Marker    | 🔳 FlashCueMarkerData    |\n| 🔳 Media Accelerator      | ✅ GPU Device                    | 🔳 ControlSurfaceHost Mixer     | 🔳 Importer File Manager |\n| ✅ Memory Manager         | ✅ GPU Image Processing          | 🔳 ControlSurfaceHost Transport | 🔳 Marker                |\n| 🔳 Palette                | 🔳 Playmod Immersive Video       | 🔳 ControlSurfacePlugin         |                          |\n| 🔳 Pixel Format           | 🔳 Playmod Overlay               | 🔳 String                       |                          |\n| 🔳 Playmod Audio          | 🔳 Sequence Audio                |                                 |                          |\n| 🔳 Playmod Device Control | ✅ Sequence Info                 |                                 |                          |\n| ✅ PPix                   | 🔳 Sequence Render               |                                 |                          |\n| ✅ PPix 2                 | 🔳 Smart Rendering               |                                 |                          |\n| 🔳 PPix Cache             | 🔳 String                        |                                 |                          |\n| 🔳 PPix Creator           | 🔳 Transmit Invocation           |                                 |                          |\n| 🔳 PPix Creator 2         | ✅ Video Segment                 |                                 |                          |\n| 🔳 RollCrawl              | 🔳 Video Segment Render          |                                 |                          |\n| 🔳 Threaded Work          |                                  |                                 |                          |\n| ✅ Time                   |                                  |                                 |                          |\n| ✅ Window                 |                                  |                                 |                          |\n\n## License\n\nApache-2.0 OR BSD-3-Clause OR MIT OR Zlib at your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtualritz%2Fafter-effects","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirtualritz%2Fafter-effects","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtualritz%2Fafter-effects/lists"}