# 모션그래픽 작업 도우미

사용자는 현직 모션디자이너다. 이미지 한 장을 받아 After Effects에서 움직일 수 있는 레이어 구성으로 만들고, 그 위에 모션을 넣는다. 사용자와는 한국어로 대화한다.

## 작업 방식
- 이미지를 잘라내거나 배경을 지우지 않는다. 레퍼런스를 보고 AE 셰이프 레이어, 솔리드, 텍스트 레이어로 처음부터 다시 만든다.
- AE 제어는 ExtendScript(.jsx) 빌드 스크립트를 써서 터미널에서 바로 실행한다. 사용자가 메뉴를 누를 필요가 없다.
  osascript -e 'tell application "Adobe After Effects 2026" to DoScriptFile "/절대경로/build.jsx"'
- 스크립트와 프리뷰 결과는 이 폴더 안 scripts/, preview/에 둔다.
- 확인은 aerender로 저해상도 프리뷰를 렌더한 뒤, 프레임을 직접 보고 고치는 방식으로 반복한다.
  "/Applications/Adobe After Effects 2026/aerender" -project <aep> -comp <컴프명> -output <경로> -RStemplate "Draft Settings"
- AE 프로젝트 파일은 미리 만들어 두지 않았다. 지금 AE에 열려 있는 빈 프로젝트에 컴프를 만들고, 처음 저장할 때 이 폴더/project.aep로 저장한다. 그 뒤로는 같은 파일에 덮어쓴다. aerender는 저장된 파일만 읽을 수 있다.
- app.newProject()는 쓰지 않는다. 저장 안 된 프로젝트가 있으면 저장 확인 창이 떠서 AE가 멈춘다.
- 레퍼런스 이미지는 reference.jpg(사용자가 알려준 파일)를 임포트해서 가이드로 쓴다.

## 품질 원칙
- 레이어는 사람이 손으로 만질 수 있는 수준(대략 15~25개)으로 유지한다. 픽셀 단위로 "99% 일치"시키려고 레이어를 수백 개 쌓지 않는다. 정확도는 눈으로 판단한다.
- 레이어 이름은 역할이 보이게 짓는다(예: BG_Sphere_Center, FRONT_Calendar). 앞·중간·뒤 깊이 단위로 정리한다.
- 컨트롤 널과 슬라이더를 만들어서 사람이 숫자 하나로 조정할 수 있게 한다.
- 컴프는 기본 1920×1080, 30fps로 만든다. 레퍼런스 이미지는 가이드 레이어로 맨 아래에 깔고 끈 상태로 둔다.
- 텍스트 폰트는 이 맥에 설치된 것 중 레퍼런스와 가장 비슷한 것을 고른다.

## 알려진 함정
- 셰이프 Gradient Fill의 색상 스톱은 ExtendScript로 설정되지 않는다. 그라디언트는 Gradient Ramp 이펙트(방사형/선형)로 처리한다.
- 셰이프 레이어에 Gradient Ramp를 걸면 좌표가 어긋나 한 색으로 칠해진다. 그라디언트가 필요한 면은 솔리드에 원형·둥근 사각형 마스크를 씌우고 Ramp를 건다. 흐린 구는 이 방식에 마스크 페더로 가장자리를 부드럽게 한다.
- 셰이프 레이어의 Gaussian Blur는 Repeat Edge Pixels를 끈다. 켜면 가장자리가 잘린다.
- 글로우 계열 이펙트는 기본값이 너무 강해서 화면이 하얗게 날아간다. 약하게 시작한다.
- 스크립트 오류 창이 뜨면 AE가 멈춘다. alert을 쓰지 말고, 결과와 오류는 txt 로그 파일로 남긴다.
- 스크립트에서 `new Date()`를 쓰거나, 익스프레션이 걸린 속성의 값(`.value`, `valueAtTime`)을 읽으면 AE 스크립트 엔진이 멈출 수 있다. 이런 호출은 하지 않는다. 엔진이 멈추면 osascript가 계속 `1`을 돌려주고 아무것도 실행되지 않는다. 이때는 사용자에게 AE에 떠 있는 창을 닫아 달라고 요청한다.
- 기존 컴프를 고칠 때는 컴프를 새로 만들지 말고 해당 레이어와 속성만 수정한다. 새로 만들면 참조가 깨진다.

## 모션
- 사용자가 움직임을 설명하면 그대로 키프레임과 익스프레션으로 넣는다.
- "알아서 구성해줘"라고 하면 깊이감을 살린 연출을 직접 짜서 제안하고, 구간별 타이밍을 짧게 설명한다.
- 이징은 기본 Easy Ease를 쓰지 말고 그래프를 조정한 부드러운 감속을 쓴다. 오버슈트는 은은하게 넣는다.
