Agent skill

After Effects

by aedev-tools in aedev-tools/adobe-agent-skills

Automate Adobe After Effects via ExtendScript. An agent skill from aedev-tools/adobe-agent-skills.

Apache-2.0Auto-check passedMedia & Creative

Install After Effects

skills CLI
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/after-effects .claude/skills/after-effects && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
after-effects
GitHub stars
107
Used in
1 other repo
Token cost
~5.2k tokens
SKILL.md length
1,291 words
Files
54 (incl. scripts, references)
Skills in repo
1
Repo updated
First seen
Licence
Apache-2.0

At a glance

Automate Adobe After Effects via ExtendScript. An agent skill from aedev-tools/adobe-agent-skills.

  • Works in 6 steps: Gather context (auto-run, no… → Drill down if needed (auto-run) → Load domain knowledge → …
  • The user asks to create
  • SKILL.md covers Overview, First-Time Setup, Workflow and MUST, plus 1 more section
  • Calls bash

What it does

After Effects is an agent skill from aedev-tools/adobe-agent-skills. Automate Adobe After Effects via ExtendScript. Use when the user asks to create, modify, or query anything in an After Effects project — layers, keyframes, expressions, effects, compositions, assets, rendering, batch operations. Generates and executes JSX ExtendScript via osascript on macOS.

Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 56 other files, including scripts and reference files (for example `references/ae-api-versions.md`, `rules/assets-footage.md` and `rules/batch-operations.md`). Compatibility notes: Requires macOS with Adobe After Effects installed. Needs "Allow Scripts to Write Files and Access Network" enabled in AE Preferences Scripting & Expressions.

It sits in Media & Creative, covering Motion graphics and React components. It works with macOS. The repository describes itself as: AI agent skills for Adobe After Effects automation — describe what you want, and we'll generate and execute the code. The licence is Apache-2.0.

When your agent uses it

  • The user asks to create
  • Query anything in an After Effects project — layers
  • Batch operations

Example prompts

  • “/after-effects”

Requirements

  • Compatibility (from SKILL.md): Requires macOS with Adobe After Effects installed. Needs "Allow Scripts to Write Files and Access Network" enabled in AE Preferences > Scripting & Expressions.
  • Pre-approved tools (allowed-tools): Bash(osascript *), Bash(chmod *), Bash(bash *), Read, Write

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Gather context (auto-run, no confirmation needed)
  2. Drill down if needed (auto-run)
  3. Load domain knowledge
  4. Generate the action script
  5. Execute or confirm
  6. Execute and read result

What it can do on your machine

Read from SKILL.md and the folder at commit 00f131e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(osascript *)
    • Bash(chmod *)
    • Bash(bash *)
    • Read
    • Write

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 7 files in scripts/, which the agent can run.

    Shell commands in SKILL.md call:

    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires macOS with Adobe After Effects installed. Needs "Allow Scripts to Write Files and Access Network" enabled in AE Preferences > Scripting & Expressions.

    From compatibility in the SKILL.md frontmatter.

Context cost

After Effects loads about 5.2k tokens when it runs, and up to ~6.4k if it reads all its reference files. Until then it costs about 77 tokens; SKILL.md has 1,291 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~5.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from aedev-tools/adobe-agent-skills at commit 00f131e, republished under its Apache-2.0 licence (© aedev-tools). 1,291 words, ~5,158 tokens.

Download SKILL.mdSave it as .claude/skills/after-effects/SKILL.md (or your agent's skills folder). This skill also uses 53 other files; get the full folder from GitHub.
name
after-effects
description
Automate Adobe After Effects via ExtendScript. Use when the user asks to create, modify, or query anything in an After Effects project — layers, keyframes, expressions, effects, compositions, assets, rendering, batch operations. Generates and executes JSX ExtendScript via osascript on macOS.
allowed-tools
Bash(osascript *), Bash(chmod *), Bash(bash *), Read, Write
compatibility
Requires macOS with Adobe After Effects installed. Needs "Allow Scripts to Write Files and Access Network" enabled in AE Preferences > Scripting & Expressions.
metadata.author
aedev-tools
metadata.version
1.0

Overview

This skill automates After Effects by generating ExtendScript (.jsx) and executing it via osascript. It reads project state through query scripts, uses rule files for domain knowledge, and wraps all mutations in undo groups.

First-Time Setup

  1. Run scripts/runner.sh with any query script to detect the AE version
  2. If multiple AE versions are installed, the user must choose one — runner.sh will prompt
  3. Ensure AE Preferences > Scripting & Expressions > "Allow Scripts to Write Files and Access Network" is enabled

Workflow

For every user request:

Step 1: Gather context (auto-run, no confirmation needed)

Use --background for all query scripts — this skips ae.activate() so AE doesn't steal focus:

bash
bash scripts/runner.sh --background scripts/active-state.jsx

Then read /tmp/ae-assistant-result.json for active comp, selected layers, CTI.

If this is the first interaction or the project context is unknown, also run:

bash
bash scripts/runner.sh --background scripts/project-overview.jsx

This returns a summary by default: folder tree with counts, all comps listed, footage grouped by file type. NOT every individual file.

To drill into a specific folder:

bash
bash scripts/runner.sh --background scripts/project-overview.jsx '{"mode": "folder", "folderName": "Images"}'

Only use full mode when you actually need every item listed:

bash
bash scripts/runner.sh --background scripts/project-overview.jsx '{"mode": "full"}'
Step 2: Drill down if needed (auto-run)

If the task targets a specific comp:

bash
bash scripts/runner.sh --background scripts/comp-detail.jsx '{"compName": "Comp Name"}'

If the task targets specific layers:

bash
bash scripts/runner.sh --background scripts/layer-detail.jsx '{"layerNames": ["Layer 1", "Layer 2"]}'

Omit compName to use the active comp. Omit layerNames to use selected layers.

Additional query scripts

Expression errors — scan for broken expressions:

bash
bash scripts/runner.sh --background scripts/expression-errors.jsx
bash scripts/runner.sh --background scripts/expression-errors.jsx '{"compName": "Main Comp"}'

Font inventory — list all fonts used across the project:

bash
bash scripts/runner.sh --background scripts/font-inventory.jsx

Project audit — comprehensive health check (unused footage, missing files, expression errors, duplicate solids, font issues, empty folders):

bash
bash scripts/runner.sh --background scripts/project-audit.jsx
bash scripts/runner.sh --background scripts/project-audit.jsx '{"checks": ["unused", "missing", "expressions"]}'
Step 3: Load domain knowledge

Read the relevant rule file from rules/. Always read rules/extendscript-fundamentals.md — it contains ES3 constraints that apply to every generated script.

Task involvesLoad rule file
Layers (create, move, parent, duplicate)rules/layer-manipulation.md
Keyframes, animation, easingrules/keyframes-animation.md
Expressionsrules/expressions.md
Compositions (create, precompose, nest)rules/composition-management.md
Effects and parametersrules/effects.md
Import, footage, assetsrules/assets-footage.md
Render queue, exportrules/rendering.md
Bulk/batch operationsrules/batch-operations.md
Version-specific featuresreferences/ae-api-versions.md
Step 4: Generate the action script

CRITICAL: Resolve the skill's real path first

Before writing or executing any action script, resolve the skill's real (non-symlinked) path. ExtendScript #include cannot follow symlinks, so you MUST use the real filesystem path.

Run this once at the start of each session:

bash
SKILL_SCRIPTS="$(readlink -f ~/.claude/skills/after-effects-assistant/scripts 2>/dev/null || readlink ~/.claude/skills/after-effects-assistant/scripts)"
echo "$SKILL_SCRIPTS"

Use the resolved path ($SKILL_SCRIPTS) for all subsequent Write and Bash commands in this session.

Why this matters:

  • ~/.claude/skills/ is typically a symlink — ExtendScript #include fails through symlinks
  • Writing to the real scripts/ directory lets #include "lib/json2.jsx" resolve correctly
  • The resolved path changes per machine, so never hardcode it

Every generated script MUST follow this template:

jsx
#include "lib/json2.jsx"
#include "lib/utils.jsx"

(function() {
    app.beginUndoGroup("AE Assistant: <action description>");
    try {
        var args = readArgs();
        var comp = getActiveComp();
        if (!comp) return;

        // ... action code ...

        writeResult({ success: true, message: "<what was done>" });
    } catch (e) {
        try { writeResult({ error: e.toString(), line: e.line, fileName: e.fileName }); }
        catch(e2) { writeError(e.toString(), "line:" + e.line); }
    } finally {
        app.endUndoGroup();
    }
})();
utils.jsx helpers available for generated scripts
FunctionPurpose
writeResult(obj)Write JSON result to /tmp/ae-assistant-result.json
writeError(msg, detail)Last-resort error capture when JSON.stringify fails
readArgs()Read args from /tmp/ae-assistant-args.json
getLayerType(layer)Returns type string: "shape", "text", "null", "precomp", etc.
getBlendModeName(mode)BlendingMode enum → string name
getActiveComp()Returns active comp or writes error and returns null
getSelectedOrAllLayers(comp)Selected layers array, or all layers if none selected
hexToRGB(hex)"#ff0000" → [1, 0, 0]
getCompByName(name)Find comp in project items by name
walkProperties(group, leafFn, path)Recursive property tree walker — calls leafFn(prop, path) on leaves
bubbleSort(arr, compareFn)ES3-compatible in-place sort
framesToSeconds(frames, comp)Frame count → seconds via comp.frameDuration
appendLog(message)Append to ~/.ae-assistant-extendscript.log

Write the script using the Write tool, then execute with a short bash command:

  1. Use the Write tool to write the script to $SKILL_SCRIPTS/ae-action.jsx (the resolved real path)
  2. Execute it with bash:
bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/ae-action.jsx"

IMPORTANT: Do NOT use cat > file << 'SCRIPT' heredocs — they put the entire script in the bash command, cluttering the permission prompt. Always use the Write tool for the script content, then a short bash command to run it.

Step 5: Execute or confirm

Auto-run (no confirmation needed):

  • All read-only queries (active-state, project-overview, comp-detail, layer-detail, expression-errors, font-inventory, project-audit)
  • Non-destructive additions: adding a keyframe, adding an effect, creating a layer, creating a comp

Confirm before running (show the script and ask the user):

  • Deleting layers or comps
  • Removing keyframes
  • Replacing footage
  • Clearing expressions
  • Render queue operations
  • Project cleanup (removing unused items, consolidating solids)
  • Any operation the user might not expect
Show full SKILL.md (641 more words)Show less
Built-in action scripts

Before generating a custom ae-action.jsx, check if a built-in script already handles the task. These are permanent, tested scripts with args-based behavior:

True Comp Duplicator — deep-clone a comp with independent sub-comps (confirm before running):

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/true-comp-duplicator.jsx" '{"compName": "Main Comp", "suffix": " COPY"}'

Font Replace — find and replace fonts across the project. Always dryRun first:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/font-replace.jsx" '{"find": "Helvetica", "replace": "Inter-Regular", "dryRun": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/font-replace.jsx" '{"find": "Helvetica", "replace": "Inter-Regular"}'

Project Cleanup — remove unused footage, consolidate duplicate solids, remove empty folders. Always dryRun first:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/project-cleanup.jsx" '{"dryRun": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/project-cleanup.jsx"

Batch Rename — rename layers, comps, or project items in bulk:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-rename.jsx" '{"target": "layers", "mode": "find-replace", "find": "Layer", "replace": "Element"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-rename.jsx" '{"target": "layers", "mode": "prefix", "prefix": "BG_"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-rename.jsx" '{"target": "layers", "mode": "sequence", "base": "Card", "start": 1}'

Layer Stagger — offset selected layers in time for cascade animations:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/layer-stagger.jsx" '{"offset": 0.1, "unit": "seconds", "direction": "forward"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/layer-stagger.jsx" '{"offset": 2, "unit": "frames"}'

Expression Replace — find/replace text in expressions project-wide. Always dryRun first:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/expression-replace.jsx" '{"find": "comp(\"Old\")", "replace": "comp(\"New\")", "dryRun": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/expression-replace.jsx" '{"find": "comp(\"Old\")", "replace": "comp(\"New\")"}'

Organize Project — auto-sort project panel items into folders by type:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/organize-project.jsx" '{"structure": "by-type"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/organize-project.jsx" '{"structure": "by-extension"}'

Batch Comp Settings — change fps, resolution, duration across multiple comps:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-comp-settings.jsx" '{"scope": "all", "fps": 25}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-comp-settings.jsx" '{"compNames": ["Comp 1", "Comp 2"], "width": 3840, "height": 2160}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-comp-settings.jsx" '{"scope": "nested", "fps": 30, "duration": 10}'

Easing Presets — apply professional easing or bounce/elastic expressions:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/easing-presets.jsx" '{"preset": "smooth"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/easing-presets.jsx" '{"preset": "snappy"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/easing-presets.jsx" '{"preset": "bounce"}'

Anchor Point Mover — reposition anchor point with visual position compensation:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/anchor-point-mover.jsx" '{"position": "center"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/anchor-point-mover.jsx" '{"position": "bottom-left"}'

Reverse Keyframes — reverse animation on selected properties:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/reverse-keyframes.jsx"

Select Layers — select layers by type, label, attribute, or name:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/select-layers.jsx" '{"type": "text"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/select-layers.jsx" '{"hasExpressions": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/select-layers.jsx" '{"nameContains": "BG"}'

Layer Sort — reorder layers in timeline by name, position, in-point, type, or label:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/layer-sort.jsx" '{"sortBy": "name", "order": "ascending"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/layer-sort.jsx" '{"sortBy": "position-y"}'

Smart Precompose — precompose with auto-trimmed duration:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/smart-precompose.jsx" '{"name": "My Precomp", "trimToContent": true}'

Copy Ease — copy easing from one keyframe and paste to others:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/copy-ease.jsx" '{"mode": "both"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/copy-ease.jsx" '{"sourceLayer": "Logo", "sourceProperty": "Position", "sourceKeyIndex": 2}'

Relink Footage — batch-relink missing footage from search directories. Always dryRun first:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/relink-footage.jsx" '{"searchPaths": ["/Volumes/Projects/footage"], "dryRun": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/relink-footage.jsx" '{"searchPaths": ["/Volumes/Projects/footage"]}'

SRT Import — create timed subtitle text layers from an SRT file:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/srt-import.jsx" '{"srtPath": "/path/to/subs.srt", "fontSize": 48}'

Text Export/Import — export all text to CSV, edit externally, reimport:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/text-export-import.jsx" '{"mode": "export", "csvPath": "/tmp/text.csv"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/text-export-import.jsx" '{"mode": "import", "csvPath": "/tmp/text.csv"}'

Batch Expression — apply, remove, enable, or disable expressions in bulk:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-expression.jsx" '{"property": "opacity", "expression": "wiggle(2, 10)", "mode": "apply"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-expression.jsx" '{"mode": "remove"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/batch-expression.jsx" '{"mode": "disable"}'

Randomize Properties — apply random values to transform properties:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/randomize-properties.jsx" '{"property": "rotation", "min": -15, "max": 15}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/randomize-properties.jsx" '{"property": "position", "minX": 0, "maxX": 1920, "minY": 0, "maxY": 1080}'

Un-PreCompose — extract layers from a precomp back into parent (confirm before running):

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/un-precompose.jsx" '{"precompLayerName": "Precomp 1"}'

Comp from CSV — generate comp variations from spreadsheet data (confirm before running):

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/comp-from-csv.jsx" '{"templateComp": "Lower Third", "csvPath": "/path/data.csv"}'

Render Queue Batch — add multiple comps to render queue (confirm before running):

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/render-queue-batch.jsx" '{"compNames": ["Final_16x9", "Final_9x16"], "outputPath": "~/Desktop/renders/"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/render-queue-batch.jsx" '{"scope": "folder", "folderName": "Finals"}'

Explode Shape Layer — split shape groups into individual layers:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/explode-shape-layer.jsx" '{"layerName": "AI Import"}'

Incremental Save — save project with auto-incrementing version number:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/incremental-save.jsx" '{"comment": "before revisions"}'

Purge Cache — clear memory caches, disk cache, and free resources. dryRun to check size first:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/purge-cache.jsx" '{"dryRun": true}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/purge-cache.jsx"
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/purge-cache.jsx" '{"memory": true, "disk": false}'

Trim Comp to Content — trim/extend comp duration to exactly fit layer content:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/trim-comp-to-content.jsx"
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/trim-comp-to-content.jsx" '{"padding": 0.5}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/trim-comp-to-content.jsx" '{"recursive": true}'

Null from Layers — create a null at each selected layer's position, auto-parent:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/null-from-layers.jsx"
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/null-from-layers.jsx" '{"naming": "custom", "prefix": "Driver"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/null-from-layers.jsx" '{"position": "comp-center"}'

Fit to Comp — scale selected layers to fit/fill comp dimensions:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/fit-to-comp.jsx" '{"mode": "fit"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/fit-to-comp.jsx" '{"mode": "fill"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/fit-to-comp.jsx" '{"mode": "stretch"}'

Label Layers — batch-set label colors on layers by type, name, or selection:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/label-layers.jsx" '{"label": 3, "target": "selected"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/label-layers.jsx" '{"label": 1, "target": "text"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/label-layers.jsx" '{"label": 5, "target": "all", "nameContains": "BG"}'

Blend Mode Set — set blending mode on selected layers:

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/blend-mode-set.jsx" '{"mode": "SCREEN"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/blend-mode-set.jsx" '{"mode": "MULTIPLY"}'
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/blend-mode-set.jsx" '{"mode": "ADD"}'

Split Layer — split selected layers at CTI (confirm before running — modifies layer timing):

bash
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/split-layer.jsx"
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/split-layer.jsx" '{"time": 2.5}'
Step 6: Execute and read result
bash
# Execute the action script (already written to $SKILL_SCRIPTS/ae-action.jsx in Step 4)
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/ae-action.jsx" '{"arg1": "value1"}'

Read /tmp/ae-assistant-result.json for the result.

Debugging failures

If a script fails, check these in order:

  1. ~/.ae-assistant-log — runner.sh logs every execution, args, results, and errors here
  2. /tmp/ae-assistant-error.txt — JXA-level errors (AE not responding, DoScriptFile failure)
  3. ~/.ae-assistant-extendscript.log — ExtendScript-level logs from appendLog() in utils.jsx
  4. AE Preferences — Ensure "Allow Scripts to Write Files and Access Network" is enabled

When an error occurs, read ~/.ae-assistant-log to understand what happened, fix the script, and retry.

MUST

  • ALWAYS wrap mutations in app.beginUndoGroup() / app.endUndoGroup()
  • ALWAYS use matchNames for property access, not display names (display names are localized)
  • ALWAYS use 1-based indexing for layers and project items
  • ALWAYS write action scripts to $SKILL_SCRIPTS/ae-action.jsx (the resolved real path, NOT /tmp/)
  • ALWAYS use relative #include "lib/json2.jsx" and #include "lib/utils.jsx" (NOT absolute paths)
  • ALWAYS wrap in an IIFE to avoid global scope pollution
  • ALWAYS use var, never let or const (ES3)
  • ALWAYS write results to /tmp/ae-assistant-result.json via writeResult()
  • ALWAYS use getActiveComp() to get the active comp (handles the null/CompItem check and writes error)
  • ALWAYS use --background flag for query scripts to avoid focus-steal

FORBIDDEN

  • NEVER use ES5+ syntax: let, const, arrow functions, template literals, destructuring
  • NEVER use Array.map, Array.filter, Array.reduce, Array.forEach (not in ES3)
  • NEVER use JSON.parse or JSON.stringify without including json2.jsx
  • NEVER write action scripts to /tmp/ — ExtendScript #include can't resolve paths from there
  • NEVER use absolute paths in #include — they break through symlinks
  • NEVER hardcode layer indices — use names, selection, or iteration
  • NEVER run destructive operations without user confirmation
  • NEVER assume a comp is active without checking
  • NEVER use cat > file << 'SCRIPT' heredocs to write scripts — use the Write tool instead, then execute with a short bash command

© aedev-tools, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 53 other files (scripts, references) in skills/after-effects of aedev-tools/adobe-agent-skills.

  • SKILL.md
  • references/ae-api-versions.md
  • rules/assets-footage.md
  • rules/batch-operations.md
  • rules/composition-management.md
  • rules/effects.md
  • rules/expressions.md
  • rules/extendscript-fundamentals.md
  • rules/keyframes-animation.md
  • rules/layer-manipulation.md
  • rules/rendering.md
  • scripts/active-state.jsx
  • scripts/anchor-point-mover.jsx
  • scripts/batch-comp-settings.jsx
  • scripts/batch-expression.jsx
  • scripts/batch-rename.jsx
  • scripts/blend-mode-set.jsx
  • scripts/comp-detail.jsx
  • … and 36 more

Open the folder on GitHubat commit 00f131e

Used in 1 other repository

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in aedev-tools/adobe-agent-skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

After Effects next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

After Effects compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
After Effects this skillaedev-tools/adobe-agent-skills1071 repos~5.2kAutomated safety check: PassApache-2.0
VidTSX 2D Video Generatorhassancs91/claude-faceless-shorts-creator271—~2.8kAutomated safety check: PassMIT
Oversized Cursor Motion Techniqueheygen-com/hyperframes59k1 repos~1.6kAutomated safety check: PassApache-2.0
Animated Videobluzir/claude-code-design106—~1.3kAutomated safety check: PassNone
Gathered Scenes Live Photo FlowZeejay0/gathered-scenes-zine-skill5.3k—~1.5kAutomated safety check: PassCustom licence
JianYing Editor Automationluoluoluo22/jianying-editor-skill3.8k—~2.2kAutomated safety check: PassApache-2.0

Similar skills

  • VidTSX 2D Video Generator

    hassancs91/claude-faceless-shorts-creator

    Generates 2D Remotion-based TSX video files for VidTSX from a shot or scene description, with style presets and rules that keep renders from crashing.

    271 GitHub stars~2.8k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • Oversized Cursor Motion Technique

    heygen-com/hyperframes

    Applies a house style for an animated, oversized pointer in launch videos that enters the frame, clicks to trigger the next beat, and exits.

    59k GitHub starsUsed in 1 repo~1.6k tokens
    Media & CreativeAuto-check passed
  • Animated Video

    bluzir/claude-code-design

    Build animated motion design (explainer, transition reel, product intro).

    106 GitHub stars~1.3k tokensUpdated 5 mo ago
    Media & CreativeAuto-check passed
  • Gathered Scenes Live Photo Flow

    Zeejay0/gathered-scenes-zine-skill

    Turns one photograph into a finished poster, then animates a flat paper tear into an Apple Live Photo ZIP and can hand it to a local importer.

    5.3k GitHub stars~1.5k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • JianYing Editor Automation

    luoluoluo22/jianying-editor-skill

    Automates JianYing Pro video editing through a Python wrapper, JyWrapper, covering drafts, media import, subtitles, screen recording, voiceover and export.

    3.8k GitHub stars~2.2k tokensUpdated 26 days ago
    Media & CreativeAuto-check passed
  • Open Edit

    veedstudio/open-edit

    Video work with VEED's hosted services and a CLI toolkit — word-timed transcription, cutting, background removal, AI presenters, lipsync, any fal model, sound mixing, and a Chrome renderer for HTML…

    1.6k GitHub stars~1.8k tokensUpdated today
    Media & CreativeAuto-check passed

Works with

Questions about After Effects

What does After Effects do?

Automate Adobe After Effects via ExtendScript. An agent skill from aedev-tools/adobe-agent-skills. After Effects is an agent skill from aedev-tools/adobe-agent-skills. Automate Adobe After Effects via ExtendScript.

When should I use After Effects?

After Effects fits situations like: the user asks to create; query anything in an After Effects project — layers; batch operations.

How do I install After Effects in Claude Code?

Run `npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a claude-code`. Or copy the skill folder (skills/after-effects in aedev-tools/adobe-agent-skills) into .claude/skills/after-effects in your project. Claude Code loads it when a task matches its description.

How do I install After Effects in Codex?

Run `npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a codex`. Or copy the skill folder (skills/after-effects in aedev-tools/adobe-agent-skills) into .agents/skills/after-effects in your project. Codex loads it when a task matches its description.

Can I use After Effects in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/after-effects, .gemini/skills/after-effects, .github/skills/after-effects and .opencode/skills/after-effects in your project.

What does After Effects need to run?

Going by SKILL.md and its folder, After Effects needs the command-line tools its instructions call (bash). Its frontmatter pre-approves these tools: Bash(osascript *), Bash(chmod *), Bash(bash *), Read, Write. Compatibility (from SKILL.md): Requires macOS with Adobe After Effects installed. Needs "Allow Scripts to Write Files and Access Network" enabled in AE Preferences > Scripting & Expressions..

Does After Effects access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is After Effects safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does After Effects use?

After Effects is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does After Effects use?

About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.

What are the alternatives to After Effects?

Skills that share tags, products or a category with After Effects: VidTSX 2D Video Generator (hassancs91/claude-faceless-shorts-creator, 271 stars), Oversized Cursor Motion Technique (heygen-com/hyperframes, 59k stars), Animated Video (bluzir/claude-code-design, 106 stars) and Gathered Scenes Live Photo Flow (Zeejay0/gathered-scenes-zine-skill, 5.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains After Effects?

aedev-tools (a GitHub user) maintains it in aedev-tools/adobe-agent-skills, which has 107 GitHub stars. The repository was last updated on March 2, 2026.

Source: aedev-tools/adobe-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.