Skip to content

new plugin adobe-after-effects - #6362

Open
jhauga wants to merge 5 commits into
github:mainfrom
jhauga:plugin-adobe-after-effects
Open

jhauga wants to merge 5 commits into
github:mainfrom
jhauga:plugin-adobe-after-effects

Conversation

@jhauga

@jhauga jhauga commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • I have read and followed the Guidance for submissions involving paid services.
  • My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
  • I have run npm start and verified that README.md is up to date.
  • I am targeting the main branch for this pull request.

Description

Plugin to help write, edit, or debug Adobe After Effects scripts, expressions, extensions, plugins, and MCP servers, or to build automated tools that assemble and render compositions in Adobe After Effects.

For full test results ctrl + click support-repo.

Test Conditions

Full test results (ctrl + click) at support repo.

Evaluation Context

  • Session Target: Copilot CLI
  • Agent: Agent
  • Model: Claude Haiku 5.5
    • Thinking Effort: Medium
  • Number of Prompts: 1
  • Post Edits: none

Copilot Pro+ Plan Credit Usage

  • Start Credits: 5%
  • End Credits: 5%

Prompt

Use the adobe-after-effects-scripting and adobe-after-effects-integrations skills to build "Acme Sting", a small Adobe After Effects extension that makes a brand logo animation for Acme Corp, the kind that closes a TV commercial, and a documentation site for it in docs/ that GitHub Pages can serve.

The logo (built in After Effects, no imported artwork)
1. An ES3 ExtendScript, acme-sting/jsx/acme-sting.jsx, draws the Acme Corp logo in After Effects from shape and text layers, in a precomposition named "Acme Logo": a simple mark (for example a circle or rounded square holding a letter A made from shape paths) beside the word ACME, with the tagline "Quality you can count on" below. Use a font that ships with the operating system (for example Arial); put no font files in the repository. The colors, the word, and the tagline are settings.

The animation
2. The same script builds a 1920 x 1080, 30 fps composition named "Acme Sting", 6 seconds long by default, that reveals the logo with the most familiar logo-reveal effects. Each effect is a setting that turns on or off, with one or two values:
   - a scale-up with an overshoot bounce, written as an expression rather than hand-placed keyframes;
   - a fade in;
   - the mark spinning in;
   - the mark's outline drawing on with Trim Paths;
   - a light sweep across the logo (CC Light Sweep);
   - a glow;
   - a drop shadow;
   - the word ACME typing on;
   - the tagline sliding up;
   - a lens flare or a particle burst at the moment of the reveal;
   - a gradient background that drifts slowly;
   - an end card reading "example.com" for the last second.
   Apply effects by match name, looked up once in app.effects. If an effect is missing, skip it and say so in the result rather than failing.
3. Presets: at least three named combinations (for example Classic, Shine, and Bounce), plus a settings object that overrides any value in a preset.
4. The script runs from the panel in item 5 and from outside After Effects with AfterFX.exe -s "var stingJob = { ... }; $.evalFile('...');". Given a job (preset, overrides, render on or off, result file), it opens or creates acme-sting/acme-sting.aep, replaces an existing composition of the same name rather than adding a second, wraps the changes in an undo group, suppresses dialogs, never calls alert, renders to MP4 through the render queue with an H.264 output module template from the installed list when asked, saves the project, and writes what it did, or the error and its line, to the job's JSON result file. If another project with unsaved changes is open, it writes an error instead of opening acme-sting.aep.

The extension
5. A CEP panel for After Effects 2026 (host AEFT, CEP 12) in acme-sting/panel/, named Acme Sting and opened from Window > Extensions > Acme Sting. It has a preset menu, a toggle and its values for each effect, the colors, the word, and the tagline, and Build and Render buttons that call acme-sting.jsx through evalScript and show the result. Include a .debug file and the steps to load it unsigned for development (PlayerDebugMode), and note how a signed ZXP would be packaged later.
6. A PowerShell launcher, acme-sting/run-sting.ps1, that writes a job, runs AfterFX.exe -s, waits for the result file with a timeout, and turns the MP4 into a GIF in docs/images/ with ffmpeg. Write result files, logs, and MP4s to the system temp folder, not the repository.

Test it live
7. In After Effects 2026, build and render every preset and one custom combination of your choice. Render one of them again with aerender from the saved project.
8. Take one or two screenshots of the panel and of the composition with a PowerShell screen capture, cropped so no title bar, file path, or account name shows.
9. Make docs/images/demo.gif, which steps through the renders. Keep every GIF under 5 MB.

The documentation site
10. docs/index.html (what it does, with the GIF), install.html (development install and ZXP), usage.html (each effect and preset, step by step with the screenshots, the command line, and aerender), and changelog.html. Plain HTML and CSS, relative links only, no build step, no external CDNs or fonts.
11. Use placeholder data only (Acme Corp, example.com, Jane Doe). Do not include local paths, user names, or account details anywhere.

Do not save or close any After Effects project other than acme-sting.aep, and do not commit. When you finish, list what you ran, what passed, and anything you could not test.

Results

The test worked in one prompt with no post edits. Copilot CLI (Claude Haiku 5.5, reasoning effort medium) used both skills to build Acme Sting, an After Effects 2026 extension that draws the Acme Corp logo and animates it into the closing sting of a TV spot, and a small docs site for it.

Acme Sting demo

  • Logo and animation (acme-sting/jsx/acme-sting.jsx): an ES3 script draws the logo in After Effects from shape and text layers, with no imported artwork (a red disc holding an A made from shape paths, the word ACME, and the tagline), and builds a 1920 x 1080, 30 fps, 6-second composition with twelve switchable reveal effects: an overshoot scale-up written as an expression, fade, spin, Trim Paths draw-on, CC Light Sweep, glow, drop shadow, typed word, tagline slide, lens flare or burst, a drifting gradient, and an end card. Effects are found by match name and skipped, and reported, when missing. Presets Classic, Shine, and Bounce, plus overrides.
  • Extension (acme-sting/panel/): a CEP 12 panel for AEFT [25.0,99.9] with a preset menu, a switch and values for each effect, color and text fields, Build and Render buttons, and a .debug file for unsigned development.
  • Command line (acme-sting/run-sting.ps1): writes a job, runs AfterFX.exe -s, waits for the JSON result, and turns the MP4 into a GIF with ffmpeg. The GIF steps through renders of the three presets and a custom combination; aerender rendered Classic again from the saved project.
  • Docs site (docs/): overview with the GIF, install (development and ZXP), usage (each effect and preset, the command line, and aerender), and changelog. Relative links only, no external assets.
  • Check after the test (After Effects 26.0): every preset and one override rebuilt from the command line in a scratch project: a 1920 x 1080, 30 fps, 6-second composition; a logo precomposition made only of shape and text layers; every effect each preset turns on applied by match name, none skipped; 0 expression errors; the override changed the tagline and turned the spin on and the glow off. aerender rendered the saved project to a 1920 x 1080, 30 fps, 6.00-second H.264 MP4.

Found by the test:

  • With the documented junction install, the panel cannot reach its script: it builds <extension folder>/../jsx/acme-sting.jsx, ExtendScript collapses the .. before following the junction, $.evalFile returns nothing, and the panel stays at "Ready." without loading presets. The command line works. Keeping the host script inside the extension folder (<ScriptPath>) avoids this, and the integrations skill's cep.md now says so.
  • The panel's "Render MP4 through the render queue" checkbox is not read; the Build and Render buttons decide.
  • The command-line example in usage.html passes result:, but the script reads resultFile.
  • Rebuilding leaves the previous build's solids in the project.
  • The After Effects project is not committed: acme-sting.jsx creates it on its first run, and its auto-saves and logs hold local paths.

Type of Contribution

  • New instruction file.
  • New prompt file.
  • New agent file.
  • New plugin.
  • New skill file.
  • New agentic workflow.
  • New canvas extension.
  • Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
  • Other (please specify):

By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.

@jhauga
jhauga requested review from a team as code owners November 11, 2026 04:17
Copilot AI balanced review requested due to automatic review settings November 11, 2026 04:17
@github-actions github-actions Bot added agent PR touches agents new-submission PR adds at least one new contribution plugin PR touches plugins skills PR touches skills labels Nov 11, 2026
@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

🔒 PR Risk Scan Results

Scanned 12 changed file(s).

Severity Count
🔴 High 0
🟠 Medium 0
ℹ️ Info 0

✅ No matching risk patterns were detected in changed files.

This is an automated soft-gate report. Findings indicate review targets and do not block merge by themselves.

@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

🚦 Submission status: 👀 Ready for review

Risk tier: merge-risk:medium — New or substantially changed resource without privileged execution
Required to merge: passing submission-gate checks plus 1 approval from reviewers with write access.

Why this tier
  • Adds 9 file(s), e.g. plugins/adobe-after-effects/README.md
  • Changes 1544 lines (low-risk limit is 40)

Automated checks

Check Status Details
Line endings ✅ Passed Passed · logs
Spelling ✅ Passed Passed · logs
Generated README consistency ✅ Passed Passed · logs
Plugin and extension validation ✅ Passed Passed · logs
Plugin structure ✅ Passed Passed · logs
Skill validation ✅ Passed Passed · logs
Skill lint (vally) ✅ Passed Passed · logs
Risk scan ✅ Passed Passed · logs
Contributor reputation ✅ Passed Passed · logs
Duplicate resource scan ✅ Passed Passed · logs
PR quality signal ⏭️ Skipped Skipped by its workflow · logs
Canvas/plugin smoke test ✅ Passed Passed · logs

Review

  • Approvals: 0/1
  • Assigned reviewer: not assigned yet — comment /request-review to ask for one
  • Review target date: not set
  • Still needed: 1 more approval(s)
  • No staffed reviewer pool owns these files yet; any reviewer with write access counts as the domain reviewer.

Commands

Command Who What it does
/rerun-checks PR author, maintainers Re-runs failed or incomplete checks and re-evaluates this gate
/request-review PR author, maintainers Asks the review rotation to assign a reviewer (adds needs-reviewer)

Updated for 0d1f21a · gate run · This comment is maintained automatically — see submission gate docs.

@github-actions

Copy link
Copy Markdown
Contributor

🔍 Vally Lint Results

⚠️ Warnings or advisories found

Scope Checked
Skills 2
Agents 1
Total 3
Severity Count
❌ Errors 0
⚠️ Warnings 0
ℹ️ Advisories 1

Summary

Level Finding
ℹ️ Vally currently lints SKILL.md content. Agent files were detected but skipped:
Full linter output
### Linting skills/adobe-after-effects-integrations
✅ adobe-after-effects-integrations (2/2 checks passed)
    ✓ [spec-compliance] All 1 skill(s) are spec-compliant.
        ✓ spec-compliance: All spec checks passed.
    ✓ [valid-refs] All file references across 1 skill(s) are valid.
        ✓ valid-refs: All file references resolve to existing files within the skill directory.

1 skill(s) linted, 1 passed

### Linting skills/adobe-after-effects-scripting
✅ adobe-after-effects-scripting (2/2 checks passed)
    ✓ [spec-compliance] All 1 skill(s) are spec-compliant.
        ✓ spec-compliance: All spec checks passed.
    ✓ [valid-refs] All file references across 1 skill(s) are valid.
        ✓ valid-refs: All file references resolve to existing files within the skill directory.

1 skill(s) linted, 1 passed

### Agent files detected (not linted by vally)
ℹ️ Vally currently lints SKILL.md content. Agent files were detected but skipped:
agents/adobe-creative-cloud.agent.md

@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Nov 11, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The change retains a locale-dependent effect lookup that can fail on non-English installations and omits the Illustrator plugin version bump and marketplace regeneration needed to notify installed users.

2 open issues
What changed in this PR

Adds an Adobe After Effects plugin to the Copilot catalog, pairing scripting and integration skills with the existing Adobe Creative Cloud agent.

Changes:

  • Adds guidance for ExtendScript, expressions, rendering, panels, native plugins, and automation bridges.
  • Extends the shared Creative Cloud agent to select and use the After Effects skills.
  • Registers the plugin and updates the generated resource catalogs.
File Description
skills/​adobe-after-effects-scripting/​SKILL.md Adds scripting, expression, and rendering guidance.
skills/​adobe-after-effects-scripting/​references/​object-model.md Documents scripting APIs and property match names.
skills/​adobe-after-effects-scripting/​references/​command-line.md Covers external script execution and rendering commands.
skills/​adobe-after-effects-integrations/​SKILL.md Guides integration choices and implementation.
skills/​adobe-after-effects-integrations/​references/​cpp-sdk.md Covers native plugin APIs, threading, and builds.
skills/​adobe-after-effects-integrations/​references/​cep.md Documents CEP panels, installation, and signing.
skills/​adobe-after-effects-integrations/​references/​bridges-and-mcp.md Describes automation bridges and MCP safeguards.
plugins/​adobe-after-effects/​README.md Adds installation instructions and example prompts.
plugins/​adobe-after-effects/​plugin.json Bundles the shared agent and two new skills.
docs/​README.skills.md Lists both After Effects skills.
docs/​README.plugins.md Lists the new plugin.
docs/​README.agents.md Updates the Creative Cloud agent description.
agents/​adobe-creative-cloud.agent.md Adds After Effects skill routing and workflows.
.github/​plugin/​marketplace.json Registers the plugin in the marketplace.

Review effort: Balanced

Comment thread agents/adobe-creative-cloud.agent.md Resolved
@jhauga
jhauga marked this pull request as draft November 11, 2026 04:23
Check if 'Gaussian Blur 2' can be added before applying it.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added awaiting-automation ready-for-review Submission passed intake validation and is ready for maintainer review and removed ready-for-review Submission passed intake validation and is ready for maintainer review awaiting-automation labels Nov 11, 2026
The adobe-creative-cloud agent changed in this PR is also part of the
adobe-illustrator plugin, so bump that plugin's version and regenerate
marketplace.json so installed users are offered the update.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added awaiting-automation and removed ready-for-review Submission passed intake validation and is ready for maintainer review labels Nov 11, 2026
@jhauga
jhauga marked this pull request as ready for review November 11, 2026 04:32
Copilot AI balanced review requested due to automatic review settings November 11, 2026 04:33
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Nov 11, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The positioning example calculates incorrect bounds for negatively scaled layers, and the color-array and template-discovery guidance also need correction.

No open issues 🎉

3 previously missed issues

In code that hasn't changed since last review

Medium severity Use absolute scale values for bounding-box dimensions

skills/​adobe-after-effects-scripting/​SKILL.md:183

For a flipped layer, either scale component can be negative, but the bounding-box width and height must remain positive. For example, a 200-pixel-wide layer at -100% X scale in a 1920-pixel comp with a 20-pixel margin gets a right edge of 2100 instead of 1900; negative Y scale likewise moves the top above the requested margin. Use the absolute scale components when calculating the dimensions.

Low severity Use four-component values for After Effects color properties

skills/​adobe-after-effects-scripting/​SKILL.md:92

After Effects color properties (PropertyValueType.COLOR), including shape fills and Color Control effects, use four-component [r, g, b, a] values. The blanket RGB rule is incorrect for these properties; in particular, a color expression returning only three components fails its dimension check. Please distinguish color properties from APIs such as addSolid and TextDocument.fillColor, which do take three-component RGB arrays.

Low severity Document RenderQueueItem.templates for render settings

skills/​adobe-after-effects-scripting/​references/​command-line.md:94

The example uses both render-settings and output-module templates, but OutputModule.templates lists only the latter. It cannot discover valid names for -RStemplate, so following this lookup instruction gives an incomplete template list. Document RenderQueueItem.templates for render settings as well.

2 resolved since last review

Review effort: Balanced

@jhauga
jhauga marked this pull request as draft November 11, 2026 04:40
@github-actions github-actions Bot added awaiting-automation ready-for-review Submission passed intake validation and is ready for maintainer review and removed ready-for-review Submission passed intake validation and is ready for maintainer review awaiting-automation labels Nov 11, 2026
@jhauga
jhauga marked this pull request as ready for review November 11, 2026 04:48
Copilot AI balanced review requested due to automatic review settings November 11, 2026 04:48
@github-actions github-actions Bot added awaiting-automation and removed ready-for-review Submission passed intake validation and is ready for maintainer review labels Nov 11, 2026
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Nov 11, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The button passes unsupported camera and light layers to a 2D-only helper, causing an exception that stops processing the remaining selected layers.

No open issues 🎉

1 previously missed issue

In code that hasn't changed since last review

Medium severity Filter unsupported camera and light layers before processing

skills/​adobe-after-effects-scripting/​SKILL.md:364

The button passes every selected layer to a helper written for 2D layers; camera and light layers lack sourceRectAtTime(), so selecting one throws and stops processing the remaining layers. Filter the selection to supported 2D layers, or extend the helper before exposing it to other layer types.

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 11, 2026 04:59
@github-actions github-actions Bot added awaiting-automation and removed ready-for-review Submission passed intake validation and is ready for maintainer review labels Nov 11, 2026
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Nov 11, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed because 3D or keyframed transforms can cause the centering handler to throw, leaving later selected layers unprocessed.

No open issues 🎉

Review effort: Balanced

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent PR touches agents merge-risk:medium new-submission PR adds at least one new contribution plugin PR touches plugins ready-for-review Submission passed intake validation and is ready for maintainer review skills PR touches skills

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants