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.
Automate Adobe After Effects via ExtendScript. An agent skill from aedev-tools/adobe-agent-skills.
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .claude/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effectsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/after-effects .agents/skills/after-effects && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .agents/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/after-effects .cursor/skills/after-effects && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .cursor/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/aedev-tools/adobe-agent-skills.git --path skills/after-effects--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/after-effects .gemini/skills/after-effects && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .gemini/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install aedev-tools/adobe-agent-skills after-effectsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/after-effects .github/skills/after-effects && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .github/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aedev-tools/adobe-agent-skills --skill after-effects -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aedev-tools/adobe-agent-skills after-effects --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aedev-tools/adobe-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/after-effects .opencode/skills/after-effects && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "after-effects" agent skill from https://github.com/aedev-tools/adobe-agent-skills/tree/main/skills/after-effects into .opencode/skills/after-effects/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "after-effects", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
after-effectsAutomate 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. 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.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 00f131e. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(osascript *)Bash(chmod *)Bash(bash *)ReadWriteFrom allowed-tools in the SKILL.md frontmatter.
Ships 7 files in scripts/, which the agent can run.
Shell commands in SKILL.md call:
bashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
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.
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.
.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.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.
scripts/runner.sh with any query script to detect the AE versionFor every user request:
Use --background for all query scripts — this skips ae.activate() so AE doesn't steal focus:
bash scripts/runner.sh --background scripts/active-state.jsxThen 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 scripts/runner.sh --background scripts/project-overview.jsxThis 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 scripts/runner.sh --background scripts/project-overview.jsx '{"mode": "folder", "folderName": "Images"}'Only use full mode when you actually need every item listed:
bash scripts/runner.sh --background scripts/project-overview.jsx '{"mode": "full"}'If the task targets a specific comp:
bash scripts/runner.sh --background scripts/comp-detail.jsx '{"compName": "Comp Name"}'If the task targets specific layers:
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.
Expression errors — scan for broken expressions:
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 scripts/runner.sh --background scripts/font-inventory.jsxProject audit — comprehensive health check (unused footage, missing files, expression errors, duplicate solids, font issues, empty folders):
bash scripts/runner.sh --background scripts/project-audit.jsx
bash scripts/runner.sh --background scripts/project-audit.jsx '{"checks": ["unused", "missing", "expressions"]}'Read the relevant rule file from rules/. Always read rules/extendscript-fundamentals.md — it contains ES3 constraints that apply to every generated script.
| Task involves | Load rule file |
|---|---|
| Layers (create, move, parent, duplicate) | rules/layer-manipulation.md |
| Keyframes, animation, easing | rules/keyframes-animation.md |
| Expressions | rules/expressions.md |
| Compositions (create, precompose, nest) | rules/composition-management.md |
| Effects and parameters | rules/effects.md |
| Import, footage, assets | rules/assets-footage.md |
| Render queue, export | rules/rendering.md |
| Bulk/batch operations | rules/batch-operations.md |
| Version-specific features | references/ae-api-versions.md |
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:
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 symlinksscripts/ directory lets #include "lib/json2.jsx" resolve correctlyEvery generated script MUST follow this template:
#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();
}
})();| Function | Purpose |
|---|---|
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:
$SKILL_SCRIPTS/ae-action.jsx (the resolved real path)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.
Auto-run (no confirmation needed):
Confirm before running (show the script and ask the user):
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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/reverse-keyframes.jsx"Select Layers — select layers by type, label, attribute, or name:
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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$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 "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/explode-shape-layer.jsx" '{"layerName": "AI Import"}'Incremental Save — save project with auto-incrementing version number:
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 "$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 "$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 "$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 "$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 "$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 "$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 "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/split-layer.jsx"
bash "$SKILL_SCRIPTS/runner.sh" "$SKILL_SCRIPTS/split-layer.jsx" '{"time": 2.5}'# 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.
If a script fails, check these in order:
~/.ae-assistant-log — runner.sh logs every execution, args, results, and errors here/tmp/ae-assistant-error.txt — JXA-level errors (AE not responding, DoScriptFile failure)~/.ae-assistant-extendscript.log — ExtendScript-level logs from appendLog() in utils.jsxWhen an error occurs, read ~/.ae-assistant-log to understand what happened, fix the script, and retry.
app.beginUndoGroup() / app.endUndoGroup()$SKILL_SCRIPTS/ae-action.jsx (the resolved real path, NOT /tmp/)#include "lib/json2.jsx" and #include "lib/utils.jsx" (NOT absolute paths)var, never let or const (ES3)getActiveComp() to get the active comp (handles the null/CompItem check and writes error)--background flag for query scripts to avoid focus-steal/tmp/ — ExtendScript #include can't resolve paths from there#include — they break through symlinkscat > 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
SKILL.md and 53 other files (scripts, references) in skills/after-effects of aedev-tools/adobe-agent-skills.
Open the folder on GitHubat commit 00f131e
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.
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| After Effects this skillaedev-tools/adobe-agent-skills | 107 | 1 repos | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| VidTSX 2D Video Generatorhassancs91/claude-faceless-shorts-creator | 271 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Oversized Cursor Motion Techniqueheygen-com/hyperframes | 59k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Animated Videobluzir/claude-code-design | 106 | — | ~1.3k | Automated safety check: Pass | None | |
| Gathered Scenes Live Photo FlowZeejay0/gathered-scenes-zine-skill | 5.3k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| JianYing Editor Automationluoluoluo22/jianying-editor-skill | 3.8k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 |
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.
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.
bluzir/claude-code-design
Build animated motion design (explainer, transition reel, product intro).
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.
luoluoluo22/jianying-editor-skill
Automates JianYing Pro video editing through a Python wrapper, JyWrapper, covering drafts, media import, subtitles, screen recording, voiceover and export.
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…
Works with
Categories
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.
After Effects fits situations like: the user asks to create; query anything in an After Effects project — layers; batch operations.
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.
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.
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.
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..
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.
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.
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.
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.
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.
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.