AI coding agents can read and write the .aebar file format directly. Instead of configuring buttons one at a time in the editor, you can describe what you want in plain language and get a ready-to-import toolbar in seconds.
This guide covers two approaches: generating a toolbar from scratch with a starter prompt, and teaching an agent the format by exporting one of your existing bars.
How It Works
AEbar toolbars are stored as .aebar files, which are plain JSON. The format is simple enough that AI agents like Claude Code, Codex, Cursor, and Windsurf can produce valid toolbars without any special tooling. You describe your toolbar, the agent writes the JSON, and you import it into AEbar.
The Starter Prompt
Copy the block below into your AI agent. It contains the complete .aebar format specification and a working two-button example. After pasting it, add your own request underneath.
I need you to create an AEbar toolbar file (.aebar format) for After Effects.
Here is the complete format specification:
FILE STRUCTURE
The file is JSON with this envelope:
{
"type": "motiondock-aebar-toolbar",
"version": 1,
"exportedAt": "<ISO 8601 timestamp>",
"containsUnsafeActions": true or false,
"toolbar": {
"id": "tb_<unique>",
"name": "<toolbar name>",
"buttons": [ ... ],
"createdAt": <unix ms>,
"updatedAt": <unix ms>
}
}
Set "containsUnsafeActions" to true if any button uses runScriptlet or runShell.
BUTTON SCHEMA
Every button in the buttons array uses this shape:
{
"id": "btn_<unique>",
"kind": "action",
"label": "",
"displayMode": "icon",
"iconSource": "lucide",
"iconName": "<icon name>",
"customIconData": "",
"color": "#hex (3 or 6 digit) or null",
"isWide": false,
"tooltip": "<hover description>",
"action": {
"type": "<action type>",
"config": { ... type-specific fields ... },
"modifiers": {
"shift": null,
"alt": null,
"meta": null
}
}
}
FIELD REFERENCE
- id: unique string, prefix with btn_
- kind: always "action"
- label: text on the button (empty string for icon-only)
- displayMode: "icon" | "text" | "emoji"
- iconSource: "lucide" | "fontawesome" | "custom"
- iconName: for Lucide, use the PascalCase icon name (e.g. "Scissors", "Zap", "Layers")
- customIconData: empty string unless iconSource is "custom"
- color: 3- or 6-digit hex string like "#38BDF8" or null for default theme color
- isWide: true to span two columns in the grid
- tooltip: describes the action on hover
ACTION TYPES AND THEIR CONFIGS
applyEffect
Applies an AE effect to selected layers.
Config: { "matchName": "ADBE Gaussian Blur 2", "displayName": "Gaussian Blur" }
applyPreset
Applies an animation preset file.
Config: { "presetPath": "/path/to/preset.ffx" }
setExpression
Sets an expression on a property.
Config: { "expression": "wiggle(3, 25);", "propertyPath": "" }
Leave propertyPath empty to target all selected properties that can accept expressions. Only set propertyPath if you know the exact property lookup string you want AEbar to use.
invokeMenu
Runs an AE menu command.
Config: { "menuCommandName": "Easy Ease", "menuCommandId": 2509 }
Set menuCommandId to null if unknown. AEbar resolves and caches it on first use.
openExtension
Opens a CEP extension.
Config: { "extensionId": "com.adobe.JEFFY" }
runJsxFile
Runs a JSX/JSXBIN script file.
Config: { "filePath": "/path/to/script.jsx", "scriptSource": "" }
runScriptlet
Runs inline ExtendScript code.
Config: { "code": "var comp = app.project.activeItem;\ncomp.layers.addNull();" }
runShell
Runs a shell command.
Config: { "command": "open", "args": ["-a", "Finder"] }
MODIFIER ACTIONS
Each button can have up to three modifier actions (Shift, Alt, Cmd/Ctrl). Set any modifier to null to disable it. When enabled, a modifier looks like:
"shift": {
"label": "Description for tooltip",
"type": "applyEffect",
"config": { "matchName": "ADBE Motion Blur", "displayName": "Directional Blur" }
}
LUCIDE ICONS
Use icons from Lucide (https://lucide.dev/icons). Names are PascalCase. Common picks: Scissors, Zap, Layers, Play, Pause, Sparkles, Wand2, Palette, Type, AlignCenter, Grid2x2, Copy, Trash2, Download, Upload, Settings, Eye, EyeOff, Lock, Unlock, ChevronDown, ArrowRight, RotateCcw, RefreshCw, Film, Camera, Aperture, PaintBucket, Crop, Move, Maximize2, Minimize2, Box, Circle, Triangle, Star, Heart, Sun, Moon, CloudLightning, Waves, Activity, Crosshair, Target, Anchor, Package, SlidersHorizontal, Spline, Repeat.
COLOR SUGGESTIONS
Group related buttons by color:
- Purple: "#a78bfa" or "#c084fc" (expressions, animation)
- Blue: "#60a5fa" or "#38bdf8" (keyframes, timing)
- Green: "#4ade80" (layers, creation)
- Orange: "#fb923c" (effects, visual)
- Pink: "#f472b6" (text, typography)
- null for default theme color (utility actions)
RULES
1. Exports include every field. Match that shape instead of relying on omitted defaults.
2. Use unique id values for every button.
3. Include all modifier keys (shift, alt, meta) even if they are null so the file matches AEbar exports.
4. ExtendScript in runScriptlet uses ES3 syntax (no let/const, no arrow functions, no template literals).
5. Set containsUnsafeActions to true if any button uses runScriptlet or runShell.
6. Choose Lucide icons that visually represent the action.
7. Group related buttons with the same color.
8. Write clear tooltips.
9. Save the output as a .aebar file.
WORKING EXAMPLE
Here is a complete two-button toolbar you can use as a structural reference:
{
"type": "motiondock-aebar-toolbar",
"version": 1,
"exportedAt": "2026-01-01T00:00:00.000Z",
"containsUnsafeActions": true,
"toolbar": {
"id": "tb_example",
"name": "Example",
"buttons": [
{
"id": "btn_blur",
"kind": "action",
"label": "",
"displayMode": "icon",
"iconSource": "lucide",
"iconName": "Aperture",
"customIconData": "",
"color": "#fb923c",
"isWide": false,
"tooltip": "Gaussian Blur",
"action": {
"type": "applyEffect",
"config": {
"matchName": "ADBE Gaussian Blur 2",
"displayName": "Gaussian Blur"
},
"modifiers": {
"shift": {
"label": "Directional Blur",
"type": "applyEffect",
"config": {
"matchName": "ADBE Motion Blur",
"displayName": "Directional Blur"
}
},
"alt": null,
"meta": null
}
}
},
{
"id": "btn_null_layer",
"kind": "action",
"label": "",
"displayMode": "icon",
"iconSource": "lucide",
"iconName": "Crosshair",
"customIconData": "",
"color": "#4ade80",
"isWide": false,
"tooltip": "New Null",
"action": {
"type": "runScriptlet",
"config": {
"code": "var comp = app.project.activeItem;\nif (!comp || !(comp instanceof CompItem)) throw new Error(\"No active comp\");\ncomp.layers.addNull();"
},
"modifiers": {
"shift": null,
"alt": null,
"meta": null
}
}
}
],
"createdAt": 1735689600000,
"updatedAt": 1735689600000
}
}
Now create a toolbar for: After the prompt, describe what you want. For example:
- “A toolbar for character animation with bounce, squash and stretch, blink, and head turn expressions”
- “10 buttons for common text animation tasks in After Effects”
- “A color correction toolbar with Curves, Levels, Hue/Saturation, and Lumetri-style grading effects”
The agent will produce a complete .aebar file you can save and import.
Importing the Result
- Copy the JSON the agent produces and save it as a
.aebarfile (e.g.,my-toolbar.aebar). - Open AEbar in After Effects.
- Click the gear icon to open Settings.
- Click Import in the Bars section.
- Select your
.aebarfile.
If the toolbar contains scriptlet or shell actions, AEbar shows a safety confirmation listing the unsafe actions before importing. Review them and approve.
Teaching an Agent from an Existing Bar
The starter prompt above works well for simple toolbars. For more complex results, or if you want the agent to match your personal style, export one of your existing bars and attach it to the conversation.
Why This Works
When an agent sees a real .aebar file, it picks up patterns it cannot learn from a spec alone:
- How you name tooltips and structure modifier actions
- Which ExtendScript patterns you prefer for scriptlets
- Your color grouping conventions
- How complex your typical buttons are
Steps
- Open AEbar Settings (gear icon).
- Find the bar you want to use as a reference.
- Click the download icon next to the bar name.
- Save the
.aebarfile to a convenient location like your Desktop. - Start a new conversation with your AI agent.
- Attach or paste the
.aebarfile contents. - Ask the agent to create a new toolbar in the same format, using your file as a reference.
Example prompt after attaching a file:
Here is one of my AEbar toolbars. Study its format, action types, icon choices, and color conventions. Now create a new toolbar called “Typography Tools” with buttons for common text animation tasks in After Effects. Match the style and quality of the attached file.
This approach is especially effective for toolbars that rely on runScriptlet actions with complex ExtendScript, because the agent can see your coding patterns and produce consistent scripts.
Where Your Bars Are Stored
AEbar stores all toolbar data in a shared data folder:
~/Library/Application Support/motion-fun-data/ The toolbar state is stored as JSON inside this folder. You do not need to edit these files directly. Use the Export button in Settings to get a clean .aebar file, and Import to bring one in.
Tips for Better Results
Be specific about actions. Instead of “a button for blur,” say “a button that applies Gaussian Blur (match name: ADBE Gaussian Blur 2) with Shift+click applying Directional Blur.” The more precise you are about effect match names and menu command names, the more accurate the result.
Request modifier actions explicitly. Tell the agent which buttons should have Shift, Alt, or Cmd variants and what those variants should do. Without this, most agents will leave modifiers as null.
Mention the icon set. The prompt already specifies Lucide icons, but if you want a specific icon on a specific button, name it. Browse icons at lucide.dev/icons.
Ask for color grouping. Specify how you want buttons colored. For example: “Use blue for keyframe actions, green for layer actions, and orange for effects.” This makes the toolbar scannable at a glance.
Start small, then iterate. Generate a 5-button toolbar first. Import it, test the actions, and refine. Then ask the agent to expand it.
Validate scriptlets. AI-generated ExtendScript sometimes uses modern JavaScript syntax. After Effects requires ES3. If a scriptlet fails, check for let, const, arrow functions, or template literals and replace them with var, regular functions, and string concatenation.
Use the right agent for the job. Agents with file access (Claude Code, Codex CLI) can write the .aebar file directly to disk. Chat-based agents (Claude.ai, ChatGPT) will output the JSON as text for you to copy and save manually. Both approaches produce the same result.
Common Toolbar Ideas
If you are not sure what to generate, here are some starting points:
- Rigging helpers. Null creation, parenting chains, expression controls, puppet pin setup
- Shape layer toolkit. Merge paths, trim paths, repeater, offset, wiggle paths, shape-to-mask
- Export pipeline. Add to render queue, render settings presets, output module presets, open output folder
- Cleanup and prep. Purge memory, collect files, remove unused footage, flatten pre-comps
- Camera toolkit. Create camera, depth of field toggle, camera orbit expressions, focus distance linker
- Audio-driven. Convert audio to keyframes, link amplitude to scale/opacity/position
- Daily shortcuts. The 10-20 commands you use most, gathered into one bar instead of scattered across menus