Back to .md Directory

Manage After Effects

description: Manage After Effects from Claude — create configs, build compositions, render videos, diagnose issues, and optionally generate AI content via Prompture

May 2, 2026
0 downloads
4 views
ai prompt claude automation
View source

name: manage-ae description: Manage After Effects from Claude — create configs, build compositions, render videos, diagnose issues, and optionally generate AI content via Prompture metadata: author: after-effects-automation version: "1.0"

Manage After Effects

This skill lets you directly control Adobe After Effects: create automation configs, run pipelines, render videos, diagnose setup issues, and optionally generate AI-powered content using Prompture.

What You Can Do

ActionHow
Create a configBuild a JSON config file with project settings, timeline, and custom actions
Run automationExecute ae-automation run <config.json> to launch AE, build compositions, and render
Render a videoUse the Python API or CLI to render a specific comp from an .aep file
Diagnose setupRun ae-automation diagnose to check AE installation, paths, and scripting
Generate templateRun ae-automation generate --template <name> to create .aep files from built-in templates
Export videoRun ae-automation export --template <name> to generate + render in one step
AI contentUse Prompture to generate text, scripts, scene descriptions, then feed into a config

Before Starting

Ask the user:

  1. What do you want to do? (create a video, update an existing config, render, diagnose, generate content)
  2. Do you have an existing .aep template? If yes, get the path and composition names
  3. What assets do you need? (images, audio, video files — get paths)
  4. What content goes into the video? (titles, body text, colors, timings)
  5. Should we use AI to generate any content? (text, scene descriptions, scripts via Prompture)

Step-by-Step: Create and Run an Automation

Step 1: Gather Information

You need:

  • Path to an .aep template file (or use ae-automation generate to create one)
  • Composition names inside the template (the template comps that will be duplicated per scene)
  • Layer names within those comps (for text, images, effects)
  • Asset file paths (images, audio, video)
  • Output directory and filename

Step 2: Build the Config JSON

Create a JSON file with this structure:

{
  "project": {
    "project_file": "path/to/template.aep",
    "comp_name": "MainComp",
    "comp_fps": 30,
    "comp_width": 1920,
    "comp_height": 1080,
    "comp_start_time": "00:00:00",
    "comp_end_time": 30,
    "output_file": "output.mp4",
    "output_dir": "path/to/output",
    "renderComp": true,
    "debug": false,
    "resources": []
  },
  "timeline": [],
  "templates": {}
}

Important conventions:

  • Paths can be relative (resolved from config file location) or absolute
  • Use forward slashes in paths even on Windows
  • comp_name is the main composition where scenes are assembled
  • Set "debug": true to test config loading without launching AE

Step 3: Define Resources

Add external assets to project.resources:

"resources": [
  {"type": "image", "name": "bg", "path": "C:/assets/background.png"},
  {"type": "audio", "name": "music", "path": "C:/assets/bgm.mp3"},
  {"type": "video", "name": "clip", "path": "C:/assets/footage.mp4"}
]
  • name is the identifier used to reference this asset in timeline actions
  • MP3 duration is auto-detected; for other types, specify "duration" manually

Step 4: Build the Timeline

Each scene duplicates a template composition and applies custom actions:

"timeline": [
  {
    "name": "intro",
    "duration": 5,
    "startTime": 0,
    "template_comp": "IntroTemplate",
    "reverse": false,
    "custom_actions": [
      {
        "change_type": "update_layer_property",
        "comp_name": "IntroTemplate",
        "layer_name": "Title",
        "property_name": "Text.Source Text",
        "property_type": "string",
        "value": "Welcome"
      }
    ]
  }
]

Scene naming: The duplicated comp is named slug(scene_folder + " " + template_comp). For scene index 0, the folder is scene-1, so the comp becomes scene-1-IntroTemplate. Use this derived name in comp_name for custom actions.

Step 5: Custom Actions Reference

8 action types available:

change_typePurposeKey fields
update_layer_propertySet text, color, positioncomp_name, layer_name, property_name, property_type, value
update_layer_property_at_frameSet keyframe at specific frameSame + frame
add_resourceAdd imported asset to compresource_name, comp_name, startTime, duration
edit_resourceModify resource layer timingcomp_name, layerIndex, startTime, duration
swap_items_by_indexReplace layer sourcecomp_name, layer_index, layer_name
add_markerAdd composition markercomp_name, layer_name, marker_name, marker_time
add_compNest a compositioncomp_name, startTime, duration
templateApply reusable templatetemplate_name, template_values

Property dot-notation paths:

  • Text.Source Text — text content
  • Transform.Position[x,y]
  • Transform.Scale[x,y]
  • Transform.Opacity — 0-100
  • Transform.Rotation — degrees
  • Effects.ColorEffect.Color — effect color
  • Effects.SliderControl.Slider — effect slider

Value formats:

  • Strings: "value": "Hello"
  • Colors: "value": "#FF0000" with "property_type": "color" (auto-converted to AE RGBA)
  • Arrays: "value": "[960,540]" (string representation, parsed by framework.js)
  • Numbers: "value": "100" (string, parsed by valueParser)
  • Line breaks: Use <br> in text — converted to AE carriage returns (\r)

Step 6: Run the Automation

# Full pipeline: launch AE, build, render
ae-automation run config.json

# Dry run (validate config without launching AE)
# Set "debug": true in the config, then:
ae-automation run config.json

# Or via Python:
python -c "from ae_automation import Client; Client().startBot('config.json')"

Step 7: Render Only

If you already have a built .aep and just want to render:

from ae_automation import Client
client = Client()
output = client.renderFile("project.aep", "MainComp", "output_dir/")
print(f"Rendered to: {output}")

Or use the CLI export:

ae-automation export --template tutorial --output-dir renders/

Diagnose Issues

Run diagnostics when things aren't working:

ae-automation diagnose

This checks:

  • AE installation path and version
  • aerender.exe availability
  • Scripting preferences (Allow Scripts to Write Files)
  • Queue folder accessibility
  • Startup script installation

Generate Built-in Templates

# List available templates
ae-automation generate --list

# Generate a specific template
ae-automation generate --template tutorial --output my_project.aep

# Generate all templates
ae-automation generate --all

AI Content Generation with Prompture (Optional)

When the user wants AI-generated content for their videos, use Prompture to generate text, scene breakdowns, or scripts. Prompture is available at C:\Users\Juan\Documents\GitHub\prompture.

Generate Video Script / Scene Text

import sys
sys.path.insert(0, r"C:\Users\Juan\Documents\GitHub\prompture")

from prompture import extract_with_model
from pydantic import BaseModel

class VideoScene(BaseModel):
    title: str
    body_text: str
    duration_seconds: float
    transition_note: str

class VideoScript(BaseModel):
    scenes: list[VideoScene]
    total_duration: float

script = extract_with_model(
    VideoScript,
    "Create a 30-second product launch video script for a tech gadget. "
    "Include 4 scenes: intro, features, demo, and outro.",
    model_name="openai/gpt-4o"  # or any configured provider
)

# Now convert to AE automation config
timeline = []
current_time = 0
for i, scene in enumerate(script.json_object.scenes):
    timeline.append({
        "name": scene.title,
        "duration": scene.duration_seconds,
        "startTime": current_time,
        "template_comp": "SceneTemplate",  # user's template comp
        "reverse": False,
        "custom_actions": [
            {
                "change_type": "update_layer_property",
                "comp_name": "SceneTemplate",
                "layer_name": "Title",
                "property_name": "Text.Source Text",
                "property_type": "string",
                "value": scene.title
            },
            {
                "change_type": "update_layer_property",
                "comp_name": "SceneTemplate",
                "layer_name": "Body",
                "property_name": "Text.Source Text",
                "property_type": "string",
                "value": scene.body_text
            }
        ]
    })
    current_time += scene.duration_seconds

Generate Color Palettes

from pydantic import BaseModel

class ColorPalette(BaseModel):
    primary: str      # hex
    secondary: str    # hex
    accent: str       # hex
    background: str   # hex
    text: str         # hex

palette = extract_with_model(
    ColorPalette,
    "Generate a modern, professional color palette for a tech product video",
    model_name="openai/gpt-4o"
)

# Use in config actions:
# {"change_type": "update_layer_property", "property_type": "color", "value": palette.json_object.primary}

Generate Titles and Copy

from pydantic import BaseModel

class VideoCopy(BaseModel):
    headline: str
    subheadline: str
    cta_text: str
    bullet_points: list[str]

copy = extract_with_model(
    VideoCopy,
    f"Write compelling video copy for: {user_description}",
    model_name="openai/gpt-4o"
)

Python API Quick Reference

from ae_automation import Client

client = Client()

# Full pipeline from config
client.startBot("config.json")

# Individual operations (requires AE running)
client.createComp("MyComp", compWidth=1920, compHeight=1080, duration=30, frameRate=30)
client.editComp("MyComp", "Title", "Text.Source Text", "Hello World")
client.addMarker("MyComp", "Controller", "intro", 0.5)
client.renderFile("project.aep", "MyComp", "output/")

# Diagnostics
client.run_full_diagnostic()

# Template generation
from ae_automation.templates import BUILTIN_TEMPLATES
client.buildTemplate(BUILTIN_TEMPLATES["tutorial"], "output.aep")

Common Patterns

Batch Video Production

Create multiple videos from a data source:

import json
from ae_automation import Client

# Load base config
with open("base_config.json") as f:
    base = json.load(f)

videos = [
    {"title": "Episode 1", "subtitle": "Getting Started", "color": "#FF5733"},
    {"title": "Episode 2", "subtitle": "Advanced Tips", "color": "#33FF57"},
]

for i, video in enumerate(videos):
    config = json.loads(json.dumps(base))  # deep copy
    config["project"]["output_file"] = f"episode_{i+1}.mp4"

    for scene in config["timeline"]:
        for action in scene["custom_actions"]:
            if action.get("layer_name") == "Title":
                action["value"] = video["title"]
            if action.get("layer_name") == "Subtitle":
                action["value"] = video["subtitle"]

    config_path = f"config_ep{i+1}.json"
    with open(config_path, "w") as f:
        json.dump(config, f, indent=2)

    Client().startBot(config_path)

Template Variables for Reuse

Use the templates section to avoid repeating actions:

{
  "templates": {
    "set_scene_text": {
      "custom_actions": [
        {
          "change_type": "update_layer_property",
          "comp_name": "{comp}",
          "layer_name": "Title",
          "property_name": "Text.Source Text",
          "property_type": "string",
          "value": "{title}"
        },
        {
          "change_type": "update_layer_property",
          "comp_name": "{comp}",
          "layer_name": "Body",
          "property_name": "Text.Source Text",
          "property_type": "string",
          "value": "{body}"
        }
      ]
    }
  }
}

Then reference in timeline:

{
  "change_type": "template",
  "template_name": "set_scene_text",
  "template_values": {
    "comp": "scene-1-ContentTemplate",
    "title": "Welcome",
    "body": "This is the intro"
  }
}

Important Notes

  • Windows only — AE automation requires Windows with After Effects installed
  • AE must not be running when starting automation (the pipeline launches it)
  • Install startup script first — Run python install_ae_runner.py to enable the file-based command queue
  • Forward slashes in paths sent to JavaScript
  • Text sanitization<br> tags become AE carriage returns; straight quotes are preserved
  • Rendering requires aerender.exe — set AERENDER_PATH in .env if not in default location
  • Debug mode ("debug": true) skips AE launch — good for testing config structure
  • When using Prompture for AI content, make sure the provider is configured (API keys in .env)

Related Documents