Add motion design skills pack

Installed via npx skills add iart-ai/motion-design-skills. Kept the
project's existing remotion-video skill unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E35uEC1pGu95tUpM4b815L
This commit is contained in:
Claude committed 2026-10-18 21:56:31 +00:00
1 parent 0b42fdeae1
commit d4b3cf1b85
46 files changed
+4384

No files matched your search

@@ -0,0 +1,168 @@
# Export Recipes — Codec, Container, Alpha, Bitrate
Pick the correct codec, container, alpha handling, and bitrate for a given delivery target, and avoid the classic failures: black backgrounds where transparency was expected, H.264 that vanished from the Render Queue, and bloated or muddy files.
## The two export engines
After Effects has two output paths. Choosing the wrong one is the root of most export confusion.
- **Render Queue (RQ)** — `Composition > Add to Render Queue`. Best for mastering/intermediate formats: ProRes, image sequences, lossless, alpha. Renders inside AE.
- **Adobe Media Encoder (AME)** — `Composition > Add to Adobe Media Encoder Queue` (or the RQ "Queue in AME" button). Best for delivery/compressed formats: H.264 MP4, H.265, social presets. Renders in a separate app so AE stays usable.
**Why H.264 disappeared from the Render Queue:** Since AE CC 2014/2015, Adobe removed the native H.264, H.264 Blu-ray, and MPEG-2 output modules from the RQ. To make an MP4, use AME — not the RQ. There is no setting to restore it in the RQ; that workflow is intentional.
## Decision tree
```
Need transparency (alpha) in the final file?
├─ YES, for an editor/compositor (NLE) → ProRes 4444 (.mov), RGB+Alpha, RQ
│ └─ smaller, still alpha? → PNG sequence or TIFF sequence (RGB+Alpha)
├─ YES, for the web/browser → dual export:
│ • HEVC with alpha (.mov, Safari/iOS)
│ • VP9/WebM with alpha (Chrome/Firefox/Edge)
└─ NO alpha needed
├─ Final delivery / upload (YouTube, social, client review) → H.264 MP4 via AME
├─ Editorial / intermediate / grading → ProRes 422 HQ or 422 (.mov), RQ
├─ Mastering / archival, highest fidelity → ProRes 4444 or lossless / image seq
└─ Tiny looping clip, limited colors → GIF (via AME / Photoshop), or WebM
```
## Transparency — the black background problem
H.264/MP4 **cannot store an alpha channel**. Exporting a comp with transparent areas to H.264 always fills them with black (or white). This is the single most common export complaint and it is not a bug.
To actually keep transparency:
1. Use a format that supports alpha: **ProRes 4444**, **PNG/TIFF sequence**, **HEVC-with-alpha**, or **VP9/WebM-with-alpha**.
2. In the RQ Output Module, set **Channels: RGB + Alpha** and **Depth** to Millions of Colors+ (the "+" is the alpha).
3. Choose a matte type: **Premultiplied (Matted with color)** for most cases; **Straight (Unmatted)** if the compositor explicitly wants straight alpha. Straight alpha avoids dark/light fringing on edges when re-composited, but only some apps import it cleanly.
For web transparent video, no single file plays everywhere. Ship two and use the HTML `<video>` element with multiple `<source>` tags: HEVC-alpha for Safari/iOS, VP9/WebM-alpha for Chromium/Firefox.
## Bitrate guidance (H.264 via AME)
Set in AME Export Settings → Video → Bitrate Settings.
- **Encoding:** VBR, 2 pass (better quality per byte than CBR or 1-pass).
- **1080p30:** Target ~10–16 Mbps, Max ~20 Mbps.
- **1080p60:** Target ~16–24 Mbps.
- **4K30:** Target ~35–45 Mbps, Max ~55 Mbps.
- **4K60:** Target ~50–68 Mbps.
- Higher target/max for high-motion or grainy footage; lower for flat graphics/motion design.
- For uploading to YouTube/Vimeo, lean to the high end — the platform re-encodes, so feed it a clean, high-bitrate master rather than over-compressing twice.
## Quick reference
| Target | Engine | Codec / Container | Channels | Bitrate / Notes |
|---|---|---|---|---|
| YouTube / Vimeo upload | AME | H.264 .mp4 | RGB | VBR 2-pass, 1080p ~16 Mbps / 4K ~45 Mbps |
| Instagram / TikTok / Reels | AME | H.264 .mp4 | RGB | 1080×1920 or 1080×1080, ~10–14 Mbps |
| Client review | AME | H.264 .mp4 | RGB | VBR 2-pass ~10–16 Mbps |
| Editorial / hand to editor | RQ | ProRes 422 HQ .mov | RGB | Mezzanine; large but edit-friendly |
| Mastering / grading | RQ | ProRes 4444 .mov | RGB(+A) | Highest fidelity, optional alpha |
| Transparency → NLE | RQ | ProRes 4444 .mov | RGB+Alpha | Millions+; premultiplied usually |
| Transparency → frames | RQ | PNG or TIFF sequence | RGB+Alpha | Lossless per-frame, robust |
| Transparent web (Safari) | AME/RQ | HEVC w/ alpha .mov | RGB+Alpha | Pair with VP9 below |
| Transparent web (Chrome) | AME/3rd-party | VP9 / WebM w/ alpha | RGB+Alpha | `yuva420p` alpha mode |
| Looping clip, few colors | AME/PS | GIF or WebM | — | GIF = large/limited; prefer WebM |
| Archival lossless | RQ | Lossless / PNG seq | RGB(+A) | Huge files |
## Gotchas
- **H.264 in the RQ is gone** — use AME. Don't search for a missing module.
- **Black background = wrong codec.** Switching matte/straight settings won't help if the codec has no alpha. Change the codec first.
- **"Millions of Colors" has no alpha; "Millions of Colors+" does.** The `+` is the alpha channel in RQ Depth.
- **ProRes on Windows** is fully supported for export in modern AE; no extra codec install needed.
- **GIF is rarely the right answer** — large files, dithered color, no real alpha softness. Prefer WebM/VP9 or short H.264 loops.
- **Don't double-compress.** Master to ProRes/lossless, then make one H.264 from that — not H.264 from H.264.
- **AME "Match Source"** presets can silently downscale or drop the bitrate; verify resolution and bitrate before queuing.
- **Render multiple outputs efficiently:** in the RQ, one render item can have several Output Modules (e.g. ProRes master + PNG seq) from a single render pass.
---
# Codec & Export Matrix — Detailed Reference
## ProRes family — when to use which
| Variant | Use for | Alpha | Relative size |
|---|---|---|---|
| ProRes 422 Proxy | Offline edit, rough cuts | No | Smallest |
| ProRes 422 LT | Lightweight editorial | No | Small |
| ProRes 422 | General editorial | No | Medium |
| ProRes 422 HQ | High-quality editorial / delivery to editor | No | Large |
| ProRes 4444 | Mastering, grading, **transparency** | Yes | Larger |
| ProRes 4444 XQ | Highest fidelity, HDR, max-quality alpha | Yes | Largest |
Rule of thumb: hand an editor **422 HQ**; master/keep alpha with **4444**.
## Full target → settings matrix
| Delivery target | Engine | Container | Codec | Resolution | Channels / Depth | Bitrate / Quality | Audio |
|---|---|---|---|---|---|---|---|
| YouTube 1080p | AME | .mp4 | H.264 | 1920×1080 | RGB, 8-bit | VBR 2-pass, Tgt 16 / Max 20 Mbps | AAC 320 kbps 48 kHz |
| YouTube 4K | AME | .mp4 | H.264 | 3840×2160 | RGB, 8-bit | VBR 2-pass, Tgt 45 / Max 55 Mbps | AAC 384 kbps |
| Vimeo 1080p | AME | .mp4 | H.264 | 1920×1080 | RGB | VBR 2-pass, Tgt 20 Mbps | AAC 320 kbps |
| Instagram Feed | AME | .mp4 | H.264 | 1080×1080 or 1080×1350 | RGB | ~10–12 Mbps | AAC 128–256 kbps |
| Instagram Reels / TikTok | AME | .mp4 | H.264 | 1080×1920 | RGB | ~12–14 Mbps | AAC 256 kbps |
| X / Twitter | AME | .mp4 | H.264 | 1280×720 or 1080p | RGB | ~6–10 Mbps | AAC |
| Broadcast delivery | RQ | .mov | ProRes 422 HQ | as spec (often 1080i/p) | RGB, 10-bit | — | PCM 48 kHz |
| Editorial handoff | RQ | .mov | ProRes 422 HQ | comp size | RGB | — | PCM |
| Color grading master | RQ | .mov | ProRes 4444 | comp size | RGB, 12-bit | — | PCM |
| VFX plate / alpha to NLE | RQ | .mov | ProRes 4444 | comp size | RGB+Alpha, Millions+ | premultiplied | — |
| Compositing frames | RQ | seq | PNG or 16-bit TIFF | comp size | RGB+Alpha | lossless | — |
| EXR for VFX pipeline | RQ | seq | OpenEXR | comp size | RGB+Alpha, 32-bit float | linear/ACES | — |
| Transparent web (Apple) | AME or RQ | .mov | HEVC w/ alpha | comp size | RGB+Alpha | quality ~ 60–80% | optional |
| Transparent web (Chrome) | 3rd-party/ffmpeg | .webm | VP9 (yuva420p) | comp size | RGB+Alpha | CRF ~30 | optional |
| Animated icon / loop | AME or PS | .gif / .webm | GIF / VP9 | small | indexed / RGBA | minimize frames | — |
## Transparency — step by step
### ProRes 4444 with alpha (Render Queue)
1. `Composition > Add to Render Queue`.
2. Click the blue **Output Module** text.
3. Format: **QuickTime**. Click **Format Options** → Codec: **Apple ProRes 4444**.
4. **Channels: RGB + Alpha**. **Depth: Millions of Colors+**.
5. **Color: Premultiplied (Matted)** for most uses; choose **Straight (Unmatted)** only if the downstream app asks for straight alpha.
6. Set Output To path, then **Render**.
### PNG / TIFF sequence with alpha (Render Queue)
1. Add to RQ → Output Module.
2. Format: **PNG Sequence** (or **TIFF Sequence**).
3. **Channels: RGB + Alpha**, Depth **Millions of Colors+** (PNG) or 16-bit (TIFF).
4. Output To a **dedicated empty folder** — sequences write one file per frame.
### HEVC with alpha (Apple/Safari)
- In AME, choose **H.265 (HEVC)** and enable an alpha/transparency option where available, or use the QuickTime HEVC export with RGB+Alpha. Verify playback in Safari; Chrome will not show its alpha.
### VP9 / WebM with alpha (Chrome)
- AME does not reliably produce alpha WebM. Render a ProRes 4444 or PNG sequence from AE, then encode with ffmpeg:
- `ffmpeg -i master.mov -c:v libvpx-vp9 -pix_fmt yuva420p -b:v 0 -crf 30 out.webm`
- `yuva420p` is the alpha-carrying pixel format; without it WebM has no transparency.
### HTML for cross-browser transparent video
```html
<video autoplay loop muted playsinline>
<source src="clip.mov" type="video/quicktime"> <!-- HEVC alpha, Safari/iOS -->
<source src="clip.webm" type="video/webm"> <!-- VP9 alpha, Chrome/Firefox -->
</video>
```
## Alpha matte types explained
- **Straight (Unmatted):** color stored independent of alpha; cleanest edges when re-composited, but fewer apps import correctly.
- **Premultiplied (Matted with color):** color blended with a matte color (usually black). Most compatible; can show fringing if the wrong matte color is assumed downstream.
- When in doubt for NLE handoff, **premultiplied with black** is the safe default.
## AME preset cautions
- **Match Source – High bitrate** can downscale to the source clip rather than the comp; confirm output resolution.
- Always check **VBR 2-pass** is selected for final masters; presets sometimes default to 1-pass.
- Use **Render at Maximum Depth** and **Use Maximum Render Quality** for scaling-heavy comps (slower but cleaner).
- For social verticals, set the resolution explicitly — don't trust a 16:9 preset.
## Bitrate cheat sheet (H.264 VBR 2-pass)
| Resolution / fps | Target Mbps | Max Mbps |
|---|---|---|
| 720p30 | 5–8 | 10 |
| 1080p30 | 10–16 | 20 |
| 1080p60 | 16–24 | 30 |
| 4K30 | 35–45 | 55 |
| 4K60 | 50–68 | 80 |
@@ -0,0 +1,184 @@
# After Effects Expression Library, Rigging & Export
A deeper cookbook. All expressions are JavaScript (the modern AE expression engine). They evaluate on the property they are pasted on, where `value`, `time`, `index`, `thisLayer`, `thisComp` are in scope.
## Inertial bounce (parameterized)
```js
// Overshoot/settle after the most recent keyframe. Tune amp/freq/decay.
amp = 0.10; // 0.05 = subtle, 0.2 = bouncy
freq = 3.0; // oscillations per second
decay = 5.0; // higher = settles faster
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n === 0) {
value;
} else {
t = time - key(n).time;
v = velocityAtTime(key(n).time - thisComp.frameDuration / 10);
value + v * amp * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t);
}
```
Inertial bounce works on multi-dimensional properties because `velocityAtTime` returns a vector; the arithmetic is per-component.
## Loop variants
```js
loopOut("cycle"); // A B C A B C ...
loopOut("pingpong"); // A B C B A B C ...
loopOut("offset"); // continues accumulating the delta each cycle
loopOut("continue"); // linear extension of the final velocity (no loop)
loopOut("cycle", 3); // loop only the last 3 keyframes
loopIn("cycle", 2); // loop the first 2 keyframes, backwards in time
loopOutDuration("cycle", 2); // loop the last 2 SECONDS of keyframes
```
Use `offset` for endless conveyor/scroll motion; `continue` for inertia past the last keyframe without oscillation.
## Wiggle — advanced
```js
// Full signature: wiggle(freq, amp, octaves, amp_mult, time)
wiggle(2, 30, 3, 0.5); // 3 octaves adds finer detail
// Per-axis wiggle (different amplitude X vs Y)
x = wiggle(2, 50)[0];
y = wiggle(2, 10)[1];
[x, y];
// Wiggle only rotation while keeping keyframed position
wiggle(1, 5); // on Rotation
// Smooth, looping ambient motion without true wiggle (loopable):
amp = 20; period = 4; // seconds
[Math.sin(time / period * 2 * Math.PI) * amp,
Math.cos(time / period * 2 * Math.PI) * amp] + value;
```
`wiggle` is non-looping noise; for seamless loops use periodic sin/cos as above.
## Stable randomness across a grid
```js
seedRandom(index, true); // timeless=true → constant over time, varies per layer
startDelay = random(0, 0.5); // each layer gets a stable random delay
opacity = ease(time, startDelay, startDelay + 0.4, 0, 100);
```
`seedRandom(index, false)` (timeless=false) lets `random()` vary over time — use for flicker; `true` for stable offsets.
## Time remap & valueAtTime echoes
```js
// Trailing/echo: sample the lead layer in the past, staggered by index
delay = 0.08 * (index - 1);
thisComp.layer("Lead").transform.position.valueAtTime(time - delay);
// Speed-ramp a time-remapped layer using easing on the source time
src = thisComp.layer("Source");
linear(time, 0, 2, 0, src.source.duration); // play a 2s window of the source
// Sample own value in the past for motion smear / trail
valueAtTime(time - 0.1);
```
## Rigging walkthrough
### Control types and how to read them
```js
ctrl = thisComp.layer("Controls");
ctrl.effect("Intensity")("Slider"); // number
ctrl.effect("Visible")("Checkbox"); // 1 or 0
ctrl.effect("Brand")("Color"); // [r,g,b,a] 0..1
ctrl.effect("Spin")("Angle"); // degrees
ctrl.effect("Anchor")("Point"); // [x,y]
```
### One slider, staggered reveal across N layers
```js
// On each layer's Opacity:
master = thisComp.layer("Controls").effect("Reveal")("Slider"); // 0..100 driver
per = 6; // frames of stagger per layer
shift = framesToTime(per * (index - 1));
ease(master, 0, 100, 0, 100) * (time > shift ? 1 : 0);
```
### Coordinate-space conversions
```js
// Place this layer where another parented layer appears in comp space
target = thisComp.layer("Marker");
fromComp(target.toComp(target.anchorPoint));
// World position of a point on this layer
toComp([0, 0]);
```
`toComp` converts layer space → composition space; `fromComp` does the inverse. Use them whenever layers are parented or live in different (nested) comps.
### Linking many layers to a master null
1. Select all children → set Parent to the null.
2. Animate only the null; children inherit transform.
3. For non-transform links (effects, opacity), pick-whip to the control layer's effect.
## Essential Graphics / MOGRT export steps
1. **Window → Essential Graphics**, choose the master comp.
2. Drag exposed properties (Slider, Checkbox, Color, Text Source, Media replacement) into the panel.
3. Add **Group** headers, rename controls, fill comment fields for editors.
4. Use **Drop-Zone / Media Replacement** for swappable footage/logos.
5. Click **Export Motion Graphics Template**, choose destination (Local Templates Folder / Library / file). Toggle "Make fonts available" and check "Raster/vector" compatibility for Premiere.
6. Test in Premiere Pro's Essential Graphics → Browse panel.
Keep all motion driven by expressions referencing the exposed controls so editors only touch the exposed params; hide internal layers with shy.
## Lottie / Bodymovin export
Supported reliably:
- Shape layers, solids, transforms (position/scale/rotation/opacity/anchor).
- Masks and track mattes (alpha), parenting, basic gradients.
- Trim Paths, simple repeaters.
- Expressions: enable in Bodymovin settings, but verify on the target renderer — `lottie-web`, lottie-ios, and lottie-android differ in expression and effect support.
Not supported / risky (bake or avoid):
- Blend modes, most native Effects, layer blurs, 3D layers/cameras, time remapping, adjustment-layer effects.
Workflow:
1. Install Bodymovin extension; **Window → Extensions → Bodymovin**.
2. Select comp(s), set destination, choose Standard/Demo.
3. Settings: enable "Glyphs"/"Hidden", "Expressions" only if needed; "Assets" → export images or use base64.
4. Render `data.json`. Preview in a Lottie player; check file size and that masks/mattes survived.
5. For web, load with `lottie-web`:
```js
import lottie from 'lottie-web';
lottie.loadAnimation({
container: document.getElementById('lottie'),
renderer: 'svg', // 'canvas' for heavy fills, better perf
loop: true, autoplay: true,
path: '/data.json',
});
```
## Media Encoder presets
| Use | Codec / format | Settings |
|---|---|---|
| Web/social delivery | H.264 (MP4) | VBR 2-pass, 1080p ~12–16 Mbps; 4K ~35–50 Mbps |
| Master/intermediate | ProRes 422 HQ (MOV) | full range, matched fps |
| With alpha | ProRes 4444 (MOV) | enable alpha channel |
| Lossless interchange | PNG sequence or ProRes 4444 | per-frame, alpha |
| GIF | via Media Encoder/Photoshop | reduce palette, dither, cap dimensions |
Tips:
- Match the comp frame rate; avoid frame-blending unless intentionally retiming.
- H.264 cannot store alpha — composite onto a background or use ProRes 4444 / PNG.
- For crisp text, render at the delivery resolution (don't upscale); set quality to maximum and use 2-pass VBR.
@@ -0,0 +1,134 @@
# Expressions, Rigging & MOGRT
After Effects is GUI software, so this delivers knowledge: ready-to-paste JavaScript expressions, rigging setups that make motion controllable, and template/export pipelines. Expressions read on the property they are pasted on; `value` is that property's keyframed/static value, `time` is the composition time in seconds, and `index`, `thisLayer`, `thisComp` are in scope.
For a deeper cookbook (tuned inertial bounce, every loop variant, advanced per-axis wiggle, `valueAtTime` echoes, `seedRandom` grids, full rigging walkthrough, Essential Graphics → MOGRT steps, Lottie/Bodymovin + Media Encoder presets), see `expression-library.md`.
## Core expressions
### Inertial bounce (overshoot after the last keyframe)
Paste on a Position, Scale, or Rotation property. It continues the velocity at the final keyframe into a damped sine — the classic "settle" motion.
```js
amp = 0.08; // overshoot amount
freq = 2.5; // oscillations per second
decay = 6.0; // how fast it settles
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0) {
t = time - key(n).time;
v = velocityAtTime(key(n).time - 0.001);
value + v * (amp * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t));
} else {
value;
}
```
### Looping
```js
loopOut("cycle"); // repeat keyframed range forever
loopOut("pingpong"); // bounce back and forth
loopOut("offset"); // continue, accumulating (e.g. continuous travel)
loopOut("continue"); // extend final velocity linearly
loopOut("cycle", 2); // loop only the last 2 keyframes
loopIn("cycle"); // mirror, before the first keyframe
```
### Wiggle and stable randomness
```js
wiggle(2, 30); // 2 wiggles/sec, amplitude 30 (units match the property)
seedRandom(index, true); // unique-but-stable per layer; timeless=true
random(0, 100); // stable after seedRandom
wiggle(freq, amp, octaves=1, amp_mult=0.5, t=time); // full signature
```
`seedRandom(index, true)` before `random()` or `wiggle()` makes each layer differ but stay constant across renders — essential for grids of layers that must not flicker.
### Time remap & value-at-time
```js
// Sample another property/layer at a shifted time (echo/trailing motion)
delay = 0.2 * index;
thisComp.layer("Lead").transform.position.valueAtTime(time - delay);
// Speed up a precomp via time remap
linear(time, 0, thisComp.duration, 0, 6); // 6s source mapped over comp duration
```
## Rigging
Make motion controllable instead of hand-keyed:
1. Add a null/control layer (often a "Controls" layer). Add **Slider Control**, **Checkbox Control**, **Color Control**, **Angle Control**, or **Point Control** effects to it.
2. Reference them with the pick-whip or by path:
```js
ctrl = thisComp.layer("Controls");
amt = ctrl.effect("Intensity")("Slider"); // Slider Control → ADBE Slider Control-0001
on = ctrl.effect("Enable")("Checkbox"); // Checkbox: 1 or 0
col = ctrl.effect("Tint")("Color");
if (on == 1) value * amt else value;
```
3. Parent transforms to a null so one move drives many layers. Use `toComp`/`fromComp` to convert coordinate spaces when layers are parented or in different comps.
```js
// Stagger N layers off one master slider
master = thisComp.layer("Controls").effect("Reveal")("Slider");
delay = 4 * index; // 4 frames per layer
master.valueAtTime(time - framesToTime(delay));
```
## Essential Graphics / MOGRT
1. Open **Window → Essential Graphics**, pick the comp as the Master.
2. Drag the Slider/Checkbox/Color/Text source properties into the panel to expose them.
3. Group, rename, and set comment fields for editors.
4. **Export Motion Graphics Template** → a `.mogrt` usable in Premiere Pro / AE. Keep driving expressions referencing the exposed controls so editors change only the exposed params.
Set "Allow fonts to substitute" off and embed/package fonts where possible so the template renders consistently elsewhere.
## Export from expressions/template work
### To Lottie (Bodymovin / `@lottiefiles/bodymovin`)
- Stick to Lottie-supported features: shape layers, transforms, masks, track mattes, basic expressions converted to keyframes.
- Avoid blur-heavy effects, blend modes, 3D layers, and most native effects — they don't translate.
- Bake expressions to keyframes if the renderer is strict, or use the `expressions` flag in Bodymovin and test on the target player (web/iOS/Android renderers differ).
- Run **Bodymovin → Render** to produce `data.json` (+ optional images). Verify in a Lottie preview before handoff.
### To video (Media Encoder)
- **File → Export → Add to Adobe Media Encoder Queue** (or render queue for AE-native).
- Delivery: **H.264** (MP4), bitrate ~10–20 Mbps for 1080p, VBR 2-pass.
- Master/intermediate: **ProRes 422 HQ** (or ProRes 4444 when alpha is needed).
- Transparency: ProRes 4444 or PNG/QuickTime with an alpha channel; H.264 cannot carry alpha. (See `export-recipes.md` for the full codec/alpha/bitrate matrix.)
## Quick reference
| Goal | Expression |
|---|---|
| Loop keyframes | `loopOut("cycle")` |
| Continuous travel | `loopOut("offset")` |
| Subtle life | `wiggle(2, 20)` |
| Stable per-layer random | `seedRandom(index,true); random(...)` |
| Settle/overshoot | inertial bounce (above) |
| Echo another layer | `valueAtTime(time - delay)` |
| Read a slider | `effect("Name")("Slider")` |
| Frames ↔ seconds | `framesToTime(n)` / `timeToFrames(t)` |
## Gotchas
- An expression overrides keyframes on that property unless it incorporates `value`; start most expressions from `value`.
- `index` is the layer's stacking number — it changes if layers are reordered; prefer named lookups for stable rigs.
- Expression errors disable the expression and show a yellow banner; check the property's path names (effect names must match exactly, including duplicates' suffixes).
- Pre-compose for reuse; name layers; use shy/lock and guide layers for safe areas before handoff.
</content>
</invoke>
@@ -0,0 +1,138 @@
# Performance Triage — Slow, Laggy, Crashing, Frozen
Diagnose slow previews, slow renders, freezes, and crashes in a fixed order, from cheapest fix to most invasive. Work top-down and stop when the symptom clears — most issues are solved in the first few steps.
Most fixes live in Preferences. Open `Edit > Preferences` (Windows) or `After Effects > Settings/Preferences` (macOS).
## First: identify the symptom
- **Slow / non-real-time previews (RAM preview)** → Flow A
- **Slow renders (final output)** → Flow B
- **Crashes / freezes / hangs** → Flow C
## Flow A — Slow previews (do in order)
1. **Set Resolution to Auto/Half/Third.** In the Composition viewer, change Resolution from Full to **Half** or **Third**. Adaptive/Draft resolution gives the biggest instant win.
2. **Enable Multi-Frame Rendering (MFR).** `Preferences > Memory & Performance > Enable Multi-Frame Rendering`. Uses all CPU cores for preview and render (AE 2022+). Confirm "CPUs reserved for other applications" isn't set too high.
3. **Check RAM allocation.** `Preferences > Memory & Performance`. Leave ~6 GB for the OS; give the rest to AE. Too little RAM = a tiny green preview bar.
4. **Set Fast Previews to Adaptive Resolution.** Viewer's lightning-bolt icon → **Adaptive Resolution** (degrades resolution only while interacting).
5. **Purge the cache.** `Edit > Purge > All Memory & Disk Cache`. Stale/full cache stalls previews.
6. **Verify the Disk Cache is on a fast drive.** `Preferences > Media & Disk Cache` → Enable Disk Cache, point it at a fast **SSD/NVMe**, give it 50–100+ GB. Never on a slow external HDD.
7. **Solo the offending layer/effect.** Toggle effects off (the fx switch) or solo layers to find the bottleneck. Heavy culprits: blurs, glows, Mocha/tracking, particles, expressions, large 3D, and many third-party plugins.
8. **Enable GPU / hardware-accelerated decoding.** `Preferences > Video Preview` (Mercury GPU) and `Preferences > Import > Hardware Accelerate H.264/HEVC decoding`. Helps long-GOP source footage.
9. **Pre-render or proxy heavy comps.** Pre-render a finished/slow precomp to ProRes and set it as a **proxy** (`File > Create Proxy`, or right-click footage → Set Proxy). Frees compute for the part being worked on.
10. **Trim the work area** to just the section in progress so RAM preview fills faster.
## Flow B — Slow renders (do in order)
1. **Confirm Multi-Frame Rendering is on** (`Memory & Performance`) — the single largest render speedup on multi-core CPUs.
2. **Render with the Render Queue for masters, AME for delivery** — and don't run heavy work in AE while AME renders.
3. **Enable hardware-accelerated decoding** for H.264/HEVC sources (`Preferences > Import`).
4. **Pre-render slow precomps** once and reuse them, instead of recomputing every frame. Heavy effect stacks, time-remapping, and 3rd-party renderers benefit most.
5. **Replace effects with cheaper equivalents** where possible (e.g., Fast Box Blur over Gaussian; native over plugin).
6. **Convert long-GOP source to an intermediate** (ProRes/DNxHR). Decoding H.264 every frame is slow; ProRes is cheap to read.
7. **Check the renderer:** `Composition > Composition Settings > 3D Renderer`. Classic 3D is fastest; Cinema 4D/Ray-traced renderers are far slower.
8. **Disk Cache on NVMe** so repeated frames aren't recomputed.
9. **Close other apps**, especially other Adobe apps and browsers, to free RAM/CPU for MFR.
## Flow C — Crashes / freezes / hangs (do in order)
1. **Purge cache** (`Edit > Purge > All`). A full/corrupt cache causes hangs.
2. **Clear the Disk Cache folder** in `Preferences > Media & Disk Cache > Empty Disk Cache`. Corrupt cache files cause crash-on-open.
3. **Update GPU drivers** (NVIDIA Studio driver / AMD). Outdated/Game-Ready drivers cause Mercury GPU crashes. As a test, switch Project renderer GPU→CPU (`File > Project Settings > Video Rendering and Effects: Mercury Software Only`).
4. **Reset Preferences:** hold `Ctrl+Alt+Shift` (Win) / `Cmd+Opt+Shift` (Mac) while launching AE. Corrupt prefs are a top crash cause.
5. **Disable third-party plugins** by temporarily moving them out of the plug-ins folder, then reintroduce to find the offender. Old plugins are a leading crash/freeze source after AE updates.
6. **Check Disk Cache and Output drives for free space.** A full scratch/cache disk causes freezes mid-render.
7. **Lower or disable MFR** if crashes appear only during multi-frame render — some plugins are not MFR-safe; reserve more CPUs or disable MFR for those projects.
8. **Roll back the AE version** if crashes started right after an update. Install a previous version via Creative Cloud (Other Versions) — many crash waves are version-specific regressions.
9. **Look for a single corrupt asset** — import comps one at a time, or replace footage, to isolate a bad file.
## Quick reference
| Symptom | First three moves |
|---|---|
| Choppy RAM preview | Half resolution → enable MFR → purge cache |
| Tiny green preview bar | Raise RAM allocation → SSD disk cache → trim work area |
| Slow final render | Enable MFR → HW decode H.264 → pre-render precomps |
| Crash on launch | Reset prefs (modifier keys) → empty disk cache → update GPU driver |
| Crash mid-render | Free disk space → disable/reserve CPUs for MFR → disable 3rd-party plugins |
| Started after update | Roll back AE version → update plugins → reset prefs |
| Laggy with footage | HW-accelerated decode → transcode to ProRes → proxy heavy comps |
## Gotchas
- **MFR needs RAM per core.** With many cores but little RAM, MFR can underperform or stall — aim for several GB per active core.
- **Game-Ready drivers crash AE.** Prefer the **Studio** driver branch on NVIDIA.
- **Disk Cache on an external HDD is worse than none** — it must be SSD/NVMe to help.
- **Plugins lag behind AE updates.** After a major AE upgrade, a sudden crash wave usually means a plugin needs updating or is not MFR-safe.
- **Purging clears the green bar.** Previews must rebuild afterward; that initial slowness is expected, not a new problem.
- **CPU/GPU effects are not equal.** A few GPU-accelerated effects are fast; mixing many CPU-only effects forces round-trips that kill preview speed.
- **Don't render in AE and AME simultaneously** on the same machine — they fight for cores and RAM.
---
# AE Performance — Detailed Diagnostics Reference
## Preference locations and recommended values
| Setting | Path | Recommended |
|---|---|---|
| RAM for AE | Preferences > Memory & Performance | Total RAM minus ~6 GB for OS |
| Multi-Frame Rendering | Memory & Performance > Enable MFR | On; reserve 0–2 CPUs for other apps |
| Disk Cache | Media & Disk Cache > Enable Disk Cache | On, SSD/NVMe, 50–150 GB |
| Conformed media cache | Media & Disk Cache | On SSD, separate from project if possible |
| HW decode (H.264/HEVC) | Import > Hardware Accelerate Decoding | On |
| Mercury GPU | Project Settings > Video Rendering and Effects | GPU (CPU as crash test) |
| Fast Previews | Viewer lightning icon | Adaptive Resolution |
## Multi-Frame Rendering (MFR) tuning
- Introduced in AE 2022 (22.x); renders multiple frames in parallel across CPU cores for both preview and final render.
- **RAM is the limiter.** Each rendering frame needs memory; with too little RAM, AE quietly reduces the cores it uses. Target several GB of free RAM per logical core you want active.
- "CPUs reserved for other applications" trades render speed for system responsiveness. Set 0–2 on a dedicated machine.
- Some legacy/3rd-party effects are **not MFR-safe** and can crash or render incorrectly under MFR. If a specific project crashes only with MFR on, disable MFR for that project or update the plugin.
## GPU and drivers
- Use the **NVIDIA Studio Driver** (not Game Ready) for stability with Adobe apps; keep AMD drivers current too.
- Mercury GPU acceleration speeds some effects and the renderer. If AE crashes on launch or while playing back, switch `Project Settings > Video Rendering and Effects` to **Mercury Software Only** to confirm GPU/driver fault, then update drivers.
- Hardware-accelerated **decoding** (separate from rendering) speeds reading H.264/HEVC source footage; enable in `Preferences > Import`.
## Disk cache sizing and placement
- Put the disk cache on the **fastest local drive** (internal NVMe ideal). Never on a slow USB HDD or a network drive.
- 50–150 GB is typical; more helps long projects retain cached frames between sessions.
- Symptoms of a bad cache: hangs on open, garbage frames, refusal to play. Fix via `Empty Disk Cache` and `Edit > Purge > All`.
- Keep the cache drive from filling up — a full cache/scratch disk causes mid-render freezes.
## Pre-render and proxy workflow
1. Identify a slow, finished precomp (heavy effects, particles, 3D, tracking).
2. Add it to the Render Queue and render to **ProRes 422/422 HQ** (or PNG sequence).
3. Right-click the footage/comp in the Project panel → **Set Proxy > File**, select the rendered file. A box icon shows the proxy is active.
4. Toggle the proxy off for final render if you want to re-render at full quality, or keep it if the pre-render is final.
5. Alternatively `File > Create Proxy > Movie/Still` to queue a proxy directly.
- Proxies let AE substitute a cheap-to-read file for an expensive comp/footage during editing.
## Heavy effect culprits (preview/render cost)
- Gaussian Blur, Camera Lens Blur, Glow → use Fast Box Blur where acceptable.
- Particle systems (Particular, Form), Element 3D, Plexus.
- Mocha tracking, Warp Stabilizer (analysis), motion tracking.
- Expressions that read many layers/time, especially per-frame heavy ones.
- Nested precomps with collapsed transformations and continuous rasterization.
- Ray-traced / Cinema 4D 3D renderer vs Classic 3D.
## Version-specific culprits
- After a **major AE update**, a sudden crash/slowdown wave usually traces to a third-party plugin not yet updated for that AE version — update plugins or remove them to test.
- If problems began immediately after updating AE, install the **previous version** from Creative Cloud → app → Other Versions, and report the regression.
- Reset corrupt preferences by holding `Ctrl+Alt+Shift` (Win) / `Cmd+Opt+Shift` (Mac) during launch; this resolves many post-update oddities.
## Isolation checklist for crashes
1. Reset preferences (modifier-key launch).
2. Empty disk cache + Purge All.
3. Update GPU driver (Studio branch).
4. Move 3rd-party plugins out, relaunch, reintroduce one at a time.
5. Switch Mercury to Software Only to rule out GPU.
6. Import comps/footage incrementally to find a corrupt asset.
7. Disable MFR for the project if crashes are MFR-specific.
8. Roll back AE version if the crash wave is version-correlated.
## When to pre-compose vs pre-render
- **Pre-compose** to organize and to apply an effect to a group — does not by itself speed anything up (it can even add overhead).
- **Pre-render** (render to a file + use as proxy/footage) when a precomp is finished and slow — this is the actual performance win.
@@ -0,0 +1,188 @@
# Project Hygiene — Organize, Relink, ExtendScript
Keep AE projects organized, portable, and automatable: consistent naming, a clear folder/bin structure, label discipline, pre-comp discipline, reliable relinking when files move, and ExtendScript (.jsx) automation for repetitive tasks.
## Folder (bin) structure
Create folders in the Project panel (the folder icon at the bottom). A reliable layout:
```
01_Comps/ finished/active compositions
02_Precomps/ nested precomps
03_Footage/ imported video
04_Images/ stills, logos, textures
05_Audio/
06_Solids/ (AE's auto "Solids" folder — keep it here)
07_Assets_3D/
99_Old/ deprecated comps/layers, not deleted yet
```
Numeric prefixes force a stable sort order. After importing, immediately drag items into the right bin — `File > Reduce Project` and `File > Consolidate All Footage` help later, but discipline up front prevents chaos.
## Naming conventions
- **Comps:** `PROJECT_section_descriptor_v01` (e.g., `BRAND_intro_logoBuild_v03`). Version with zero-padded `v01`, `v02`.
- **Precomps:** prefix `PRE_` or suffix `_pre` so they're obvious in lists.
- **Layers:** rename solids/nulls to their role (`CTRL_master`, `BG_gradient`, `MATTE_text`). Never ship "Black Solid 12".
- **No spaces / special chars** in filenames destined for render farms or cross-OS sharing — use `_` and `-`.
- Keep names short but unique; long names truncate in the timeline.
## Label colors
Use the Label color (the swatch left of each Project/Timeline item) as a visual system. Pick a convention and apply it consistently, e.g.:
- Red = control/null layers
- Blue = footage
- Green = precomps
- Yellow = text
- Purple = adjustment/effects layers
Right-click an item → **Label** to set. Select multiple, then `Edit > Label > Select Label Group` to act on a whole color at once. Customize label names/colors in `Preferences > Labels`.
## Pre-comp discipline
- Pre-compose (`Layer > Pre-compose`, `Ctrl/Cmd+Shift+C`) to **group** related layers and to apply one effect to a group — not reflexively for everything.
- When pre-composing a single layer, choose **"Leave all attributes in"** vs **"Move all attributes into the new composition"** deliberately: "Move" carries transforms/effects inside; "Leave" keeps them on the outer layer.
- Name the precomp immediately and file it in `02_Precomps`.
- Avoid deep nesting beyond a few levels — it slows navigation and makes relinking/debugging painful.
- Match precomp duration and frame rate to need; an over-long precomp wastes cache.
## The "moved one file and everything broke" rescue
AE references footage by file path. Moving, renaming, or sending a project without its assets breaks links (shown as **colored bars / "Missing Footage"** placeholders).
### Fix options, in order
1. **Relink one, fix many:** double-click a missing item (or right-click → **Replace Footage > File**). Point it at the moved file; AE offers to relink *all* missing items from the same folder automatically. This single step usually fixes the whole project.
2. **Find Missing Footage:** `File > Dependencies > Find Missing Footage` lists every broken link to resolve.
3. **Replace Footage:** right-click footage → **Replace Footage > File** to swap an asset while keeping every use, effect, and keyframe intact.
### Prevent it: Collect Files
Before moving or sharing a project, use `File > Dependencies > Collect Files`. This copies the project plus every used asset into one new folder with relative structure, so links survive on any machine. Always hand off projects as a Collect Files package, not a bare `.aep`.
Related: `File > Dependencies > Consolidate All Footage` (merge duplicate imports), `Remove Unused Footage`, and `Reduce Project` (strip everything not used by selected comps) to slim a project before collecting.
## Batch automation with ExtendScript (.jsx)
AE scripts (ExtendScript / JSX) automate repetitive work. Run via `File > Scripts > Run Script File...`, or place in the **ScriptUI Panels** folder to dock as a panel. Always wrap edits in `app.beginUndoGroup("name") ... app.endUndoGroup()` so one Undo reverts the whole batch.
Common automations (full code in `../scripts/`):
- **Batch rename** selected layers with a base name + auto-increment (`../scripts/batch-rename.jsx`).
- **Sequential offset** — stagger selected layers in time by N frames each, a staggered "domino" start (`../scripts/sequential-offset.jsx`).
- **Apply an effect** (e.g., a Gaussian Blur, or any matchName) across all selected layers at once (`../scripts/apply-effect-to-layers.jsx`).
Minimal pattern:
```javascript
app.beginUndoGroup("My Batch Op");
var comp = app.project.activeItem;
if (comp && comp instanceof CompItem) {
var sel = comp.selectedLayers;
for (var i = 0; i < sel.length; i++) {
// operate on sel[i]
}
}
app.endUndoGroup();
```
## Quick reference
| Task | How |
|---|---|
| New bin | Folder icon at bottom of Project panel |
| Set label color | Right-click item → Label |
| Relink missing footage | Double-click item / Replace Footage > File |
| List broken links | File > Dependencies > Find Missing Footage |
| Package for handoff | File > Dependencies > Collect Files |
| Swap an asset everywhere | Replace Footage > File |
| Slim project | Reduce Project / Remove Unused Footage |
| Run a script | File > Scripts > Run Script File... |
| Pre-compose | Layer > Pre-compose (Ctrl/Cmd+Shift+C) |
## Gotchas
- **Collect Files before moving anything.** Moving the `.aep` alone always breaks links.
- **Relinking one item often relinks the rest** from the same folder — try that before fixing each by hand.
- **Replace Footage preserves effects/keyframes;** deleting + re-importing does not.
- **AE auto-creates a "Solids" folder** — don't scatter solids elsewhere or it regenerates duplicates.
- **Scripts need `app.beginUndoGroup`/`endUndoGroup`** or a batch becomes many separate undos.
- **Applying effects by name needs the `matchName`,** not the display name (e.g., `"ADBE Gaussian Blur 2"`), to be reliable across AE language versions.
- **Allow Scripts to Write Files** must be enabled in `Preferences > Scripting & Expressions` for scripts that save/render.
- **Deep precomp nesting** makes both performance and relinking worse — keep it shallow.
---
# AE Project Organization — Detailed Reference
## Full folder (bin) template
```
PROJECT.aep
├── 00_Output/ (final renders live next to project on disk)
01_Comps/ master & active comps
02_Precomps/ nested precomps (prefix PRE_)
03_Footage/ video clips
04_Images/ stills, logos, vector, textures
05_Audio/ music, VO, SFX
06_Solids/ AE auto-folder; leave it here
07_Assets_3D/ OBJ/C4D/3D model assets
08_Reference/ storyboards, briefs, temp ref
99_Old/ deprecated, kept until final
```
Numeric prefixes lock sort order. Keep the on-disk asset folders mirroring these bins so Collect Files stays clean.
## Naming scheme
| Item | Pattern | Example |
|---|---|---|
| Master comp | `PROJ_section_v##` | `BRAND_main_v04` |
| Sub/shot comp | `PROJ_section_shot_v##` | `BRAND_intro_logo_v02` |
| Precomp | `PRE_descriptor` | `PRE_textReveal` |
| Null/control | `CTRL_role` | `CTRL_master` |
| Solid/BG | `BG_role` | `BG_gradient` |
| Matte | `MATTE_role` | `MATTE_logoTrack` |
| Adjustment | `ADJ_role` | `ADJ_grade` |
Rules: zero-pad versions; no spaces/special characters for farm/cross-OS safety; keep unique and short.
## Label color system (example)
| Color | Meaning |
|---|---|
| Red | Control / null layers |
| Blue | Footage |
| Green | Precomps |
| Yellow | Text |
| Purple | Adjustment / effects |
| Orange | Audio |
| Gray | Disabled / old |
Set via right-click → Label. Customize names/colors in `Preferences > Labels`. Use `Edit > Label > Select Label Group` to select everything of one color.
## Relink / missing footage — full workflow
1. **Identify:** missing items show as colored bars with "Missing" placeholders; the Project panel marks them.
2. **Relink one to fix many:** right-click a missing item → **Replace Footage > File** (or double-click it). Choose the relocated file. AE prompts to relink all other missing files found in the same folder — accept to fix the batch at once.
3. **Enumerate:** `File > Dependencies > Find Missing Footage`, `Find Missing Fonts`, `Find Missing Effects` to locate every broken dependency.
4. **Swap assets:** **Replace Footage > File** swaps the source while preserving all layer instances, effects, masks, and keyframes.
## Collect Files (portable handoff)
- `File > Dependencies > Collect Files`.
- Options: Collect Source Files = **All**; enable **Reduce Project** to drop unused; optionally **Generate Report**.
- Produces a folder containing the `.aep` plus a `(Footage)` subfolder with every used asset, preserving relative links so the project opens anywhere.
- Always deliver/move projects as a Collect Files package, never a lone `.aep`.
## Slimming a project
- `File > Reduce Project` — removes all items not used by the currently selected comp(s). Destructive to unused items; save first.
- `File > Dependencies > Consolidate All Footage` — merges duplicate imports of the same file.
- `File > Dependencies > Remove Unused Footage` — drops footage no comp references.
- Run these before Collect Files to keep the package small.
## Scripting setup
- Enable `Preferences > Scripting & Expressions > Allow Scripts to Write Files and Access Network` for scripts that save or render.
- Run a script: `File > Scripts > Run Script File...`.
- Dock a panel script: place the `.jsx` in `(AE install)/Scripts/ScriptUI Panels/`, restart AE, open from the `Window` menu.
- Wrap every batch in `app.beginUndoGroup("...")` / `app.endUndoGroup()` so it undoes in one step.
- Apply effects by **matchName** (internal id like `"ADBE Gaussian Blur 2"`), not the localized display name, for cross-version reliability. Use `layer.property("ADBE Effect Parade").addProperty(matchName)`.
## Pre-comp discipline details
- "Leave all attributes in the new composition" keeps the outer layer's transform; "Move all attributes" pushes them inside the precomp. Choosing wrong shifts/rescales the result.
- Trim precomp duration to the content; over-long precomps waste RAM/disk cache.
- Name and file precomps immediately; never leave "Pre-comp 1".
- Keep nesting shallow (2–3 levels) for performance and easier relinking/debugging.
---
Keep the project tidy and named well and footage relinks without a fight. Built by **[iart.ai](https://iart.ai/?utm_source=github&utm_medium=readme&utm_campaign=motion-design-skills&utm_content=skill_footer&utm_term=after-effects)** — the AI motion agent for editable, on-brand motion graphics.