---
nome: After Effects
descricao: motion design em camadas, com keyframes, ease e expressões, renderizado pelo motor EffectCraft
quando: after effects, ae, aftereffects, effectcraft, extendscript, jsx, keyframe, motion design
autor: PrimoCode
---
Use a ferramenta `estudio_ae`: você escreve um JSX (ExtendScript do After Effects),
o EffectCraft roda, renderiza `video-ae.mp4` e devolve quadros PNG em `ae/`.

**Antes de escrever, procure um modelo:** `estudio_midia acao:"projetos"` e, na receita
com `scripts_ae`, leia os `.jsx` do `caminho` (são projetos reais do Clube do Motion que
montam as comps por script). Copie o MÉTODO (câmera, curvas, trocas de cena), não o conteúdo.

## Regras

- **Sempre com ease.** Keyframe linear parece máquina: ponha `KeyframeEase` em todo
  movimento (`setTemporalEaseAtKey`).
- **9:16 = 1080×1920** (16:9 = 1920×1080), fps 30. A duração da comp é a do vídeo.
- **Fontes** vão em `fontes: [{familia, peso}]` (Google Fonts); o mesmo nome entra em `doc.font`.
- **Confira os quadros**: passe `conferir: [0.5, 2]` e olhe os PNG antes de dar por pronto.
  Texto cortado, sobreposto ou fora da área segura: ajuste o JSX e rode de novo.
- Erro do script volta com o texto da saída. Corrija a linha, não reescreva tudo.
- `comp` é o nome exato que você deu no `addComp`.

## Match names que funcionam

- `app.project.items.addComp(nome, w, h, 1, dur, fps)`
- `comp.layers.addSolid([r,g,b], nome, w, h, 1)`, `addText("..")`, `addShape()`
- Forma: `"ADBE Root Vectors Group".addProperty("ADBE Vector Group")`, depois
  `"ADBE Vectors Group".addProperty("ADBE Vector Shape - Ellipse" | "ADBE Vector Graphic - Fill")`,
  com `"ADBE Vector Ellipse Size"` e `"ADBE Vector Fill Color"`
- Transform: `"ADBE Transform Group"` com `"ADBE Position" | "ADBE Scale" | "ADBE Opacity"` e `setValueAtTime`
- Ease: `KeyframeEase(0, 80)` com `setTemporalEaseAtKey(i, [ease], [ease])`
- Expressão: `prop.expression = "wiggle(2,20)"`
- Efeito: `"ADBE Effect Parade".addProperty("ADBE Gaussian Blur 2" | "ADBE Glo2")`
- Texto: `"ADBE Text Properties"` / `"ADBE Text Document"`; `td.value` é o `TextDocument`;
  mude `doc.font`, `fontSize`, `fillColor`, `justification` e grave com `td.setValue(doc)`

## Exemplo mínimo

```js
var comp = app.project.items.addComp("Cena", 1080, 1920, 1, 3, 30);
comp.layers.addSolid([0.06, 0.06, 0.1], "fundo", 1080, 1920, 1);
var t = comp.layers.addText("Olá");
var td = t.property("ADBE Text Properties").property("ADBE Text Document");
var doc = td.value; doc.font = "Poppins-Bold"; doc.fontSize = 140; doc.fillColor = [1, 1, 1];
doc.justification = ParagraphJustification.CENTER_JUSTIFY; td.setValue(doc);
var pos = t.property("ADBE Transform Group").property("ADBE Position");
pos.setValueAtTime(0, [540, 1100]); pos.setValueAtTime(0.8, [540, 960]);
var e = new KeyframeEase(0, 80);
pos.setTemporalEaseAtKey(1, [e], [e]); pos.setTemporalEaseAtKey(2, [e], [e]);
```
