animate은(는) 무엇을 하나요?
참조 자료와 대략적인 아이디어를 MP4로 변환합니다. 모든 프레임은 코드로 그려지고 사운드는 합성됩니다. 사용자는 취향을 제공하고, 당신은 연출을 담당합니다. 대략적인 브리핑만으로 충분하므로, 창의적인 결정은 직접 내리고 전체 작품을 바꿀 수 있는 것에 대해서만 질문하세요.
모든 파일은 animations/<slug>/ 디렉토리에 저장됩니다:
refs/ study/ style.md beats.md piece.html score.json out/<slug>.mp4
필요에 따라 헬퍼 스크립트나 노트를 추가하세요. 이 스킬 폴더의 examples/bee-dance/는 완성된 작품 예시입니다.
아래 명령어에서 $SKILL은 이 스킬의 폴더를 의미합니다. 사용자의 프로젝트에서 $SKILL/.venv/bin/python이 있으면 그것을, 없으면 python3를 사용하여 실행하세요. 패키지가 누락된 경우 README.md의 설정을 참조하세요. ffmpeg와 Chrome이 필요합니다.
작업 선택
| 사용자가 원하는 것 | 작업 | 방법 |
|---|---|---|
| "이 이미지에 애니메이션을 넣어줘" | Move the artwork | 이미지를 레이어로 분할하고 움직입니다. references/move-an-image.md를 읽으세요. 3-4단계의 piece.html은 건너뛰고, 렌더링은 Python 스크립트로 수행합니다. |
| "이걸 그려줘", "이 장면을 재현해줘" | Repaint | 참조와 유사하게 전체 장면을 piece.html에 그립니다. |
| "이 스타일로" 주제나 이야기 | New film | 아래의 전체 프로세스를 따릅니다. 참조는 비주얼을 결정하고, 주제는 새로운 것입니다. |
길이나 형태를 지정하지 않으면 영화는 15초, 1080x1920으로, 움직이는 이미지는 5초로 설정합니다.
코드는 도형, 선, 그라데이션 및 텍스처에 강점이 있습니다: 평면 벡터, 선화, 종이 공예, risograph, 수채화, 애니메이션 배경, 식물 도감. 사실적인 표현과 얼굴 연기에는 약합니다. 참조가 사실적인 경우, 작업 전에 이를 알리고 그림 스타일로 접근할 것을 제안하세요.
1단계: 모든 참조 분석
사용자는 많은 참조를 제공할 수 있으므로, 각각에 역할을 부여하고 평균화하여 흐릿해지지 않도록 하세요.
python3 $SKILL/scripts/study.py animations/<slug>/study <파일 또는 폴더...>
이 명령은 각 참조에 대해 연락처 시트, 팔레트, 비디오의 경우 컷과 페이싱 곡선을 제공합니다. 비디오의 특정 부분만 중요한 경우 "reel.mp4@0-12"와 같이 초 범위를 추가하세요. 헤드 토크 영상은 결과를 왜곡할 수 있습니다. 그런 다음 시트를 직접 보고 텍스처가 중요한 부분을 크롭하세요. 숫자만으로는 왜 어떤 것이 좋게 느껴지는지 알 수 없습니다.
style.md를 작성하세요:
- 각 참조가 우리에게 주는 것: 한 줄씩: 이 참조에서는 텍스처, 저 참조에서는 타입, 다른 참조에서는 페이싱.
- 복사하지 않을 것: 포즈, 캐릭터, 로고, 서명, 정확한 구성. 스타일을 가져오되 작품 자체는 가져오지 마세요. 단, 사용자가 애니메이션을 요청한 이미지에 대한 Repaint 또는 Move 작업은 예외입니다.
- 팔레트는 16진수 값, 타입 (
assets/fonts/에 기본 폰트 두 개가 있으며, 오픈 폰트를 추가로 복사할 수 있음), 텍스처, 모션 느낌. - 작품을 하나로 묶는 장치 하나: 렌즈, 잔물결, 절대 끊기지 않는 선. 이런 장치가 없는 영화는 슬라이드쇼처럼 느껴집니다.
각 새 참조에 대해 animations/library.md에 짧은 카드를 추가하여 이 프로젝트의 교훈이 지속되도록 하세요. 사용자가 이전에 사용했던 스타일을 가리키면 기존 카드를 재사용하고, 새로운 것을 배웠을 때만 확장하세요.
관문: 이 작품이 어떻게 보이고 왜 그 주제에 적합한지 한 문장으로 말할 수 있어야 합니다.
2단계: 비트(Beats)
작품에 사실이 포함된 경우 먼저 확인하세요. 잘못된 주장은 아름답게 그려져도 여전히 잘못된 것이며, 대중적인 "사실"은 종종 부정확합니다. 최종 보고서에 누그러뜨린 내용이 있으면 메모하세요.
beats.md를 표 형식으로 작성하세요. 그림과 사운드는 함께 계획해야 동기화가 고급스럽게 느껴집니다:
| 시간 | 그림 | 사운드 |
|---|---|---|
| 0-1.5 초 | 오렌지 방울이 떨어지고 퍼짐 | 드립, 젖은 번짐, 패드 등장 |
| 1.5-3 초 | 제목 줄, 세부 사항이 등장 | 단어당 플럭, 작은 틱 |
관문: 처음 0.5초 안에 무언가 움직여야 합니다. 형태는 훅, 빌드업, 숨, 결정타여야 합니다. 새로운 그림 아이디어 없이 2초 이상 늘어지지 않아야 합니다. 끝은 약 1.5초 정도 정지되어 읽을 수 있어야 합니다. 그림이 새로운 아이디어를 전달하게 하고, 단어가 그 역할을 하지 않도록 하세요. 각 캡션은 약 1.5초 동안 화면에 표시되어야 하므로, 캡션을 줄이기보다는 자르는 것이 좋습니다. 세로 프레임의 상단 12%와 하단 18%에는 텍스트를 배치하지 마세요.
3단계: 그림 그리기
assets/piece-template.html을 piece.html로 복사하고 그 안에 그리세요. 계약 조건은 window.PIECE와 window.renderFrame(t)입니다.
renderFrame(t)는 t에만 의존해야 하며 async일 수 있습니다. 정지 이미지는 언제든지 바로 이동할 수 있으므로, 프레임 간에 기억되는 것 또는 시드되지 않은 Math.random()은 깨짐을 유발합니다. 비싼 정적 레이어는 시드된 생성기에서 window.ready 내부에 한 번 그리고, 프레임별로 합성하세요.
작품 내부에 다른 영화를 표시하려면 해당 프레임을 번호가 매겨진 JPEG로 clips/에 추출하고, async renderFrame 내부에서 Image로 필요한 프레임을 로드하여 캔버스에 그리세요.
그리기 전에 references/styles.md를 읽으세요. 작동하는 레시피(셀 구름, 잎, 걷는 인물, 물, 수채화, 종이)와 복사할 소스 파일이 있습니다. 깊이는 다른 속도로 움직이는 레이어에서 오고, 생동감은 작은 보조 동작(흔들림, 표류, 반짝임, 깜빡임)에서 옵니다.
전체 렌더링 전에 정지 이미지를 자주 그리고 일찍 리뷰하세요:
python3 $SKILL/scripts/render.py animations/<slug>/piece.html --stills 0.5 3 7 12
정지 이미지를 원래 크기로 보고, 참조와 나란히 비교하고, 잘못된 부분을 수정하세요. 여러 라운드가 예상됩니다. 첫 번째 정지 이미지는 일반적으로 거친 초안이며, 이 루프에서 품질이 결정됩니다.
python3 $SKILL/scripts/compare.py animations/<slug>/out/compare.jpg <정지 이미지 및 참조 이미지...>
관문: 중간의 정지 이미지가 참조와 동일한 재료(같은 종이, 페인트, 선, 색상)로 만들어진 것처럼 보여야 합니다. 주제는 새로운 것이어도 됩니다. 참조의 클립 아트 버전은 통과하지 않습니다.
4단계: 사운드
beats.md와 동일한 시간으로 score.json을 작성하세요. scripts/synth.py의 헤더에서 사용 가능한 사운드(플럭, 벨, 패드, 드립, 틱, 스웰, 우쉬, 임팩트, 킥, 노이즈 베드)를 확인하세요.
python3 $SKILL/scripts/synth.py animations/<slug>/score.json animations/<slug>/out/score.wav
하나의 키를 유지하세요. 그리드가 아닌 그림 이벤트에 맞춰 공격음을 배치하세요. 결정타 전에는 진정한 정적을 남겨두세요. 대비가 결정타를 효과적으로 만듭니다. 긴 음표 시퀀스는 일일이 입력하지 말고 몇 줄의 파이썬으로 생성하세요.
소리를 들을 수 없으므로 synth.py가 출력하는 레벨 보고서를 읽으세요: 계획하지 않은 딥과 시그니처 사운드가 다른 것에 묻히지 않았는지 확인하세요.
작품에 나레이션이 있는 경우
나레이션은 그림보다 먼저 제작되어야 합니다. 단어 타이밍이 모든 비트를 결정하기 때문입니다. 사용자가 사용할 수 있는 음성 도구로 녹음하고, 단어 타이밍을 포함하여 텍스트로 변환하세요(faster-whisper가 작동합니다). 그런 다음 해당 시간에서 비트와 캡션을 구성하세요. Whisper는 침묵 전에 단어를 일찍 시작할 수 있으므로, 일시 중지를 넣기 전에 파형을 확인하세요.
보이스를 스코어 위에 믹스한 다음 결과를 --audio로 렌더링하세요. 스코어는 보이스 아래에서 덕킹되어, 일시 중지에서 음악이 올라옵니다:
python3 $SKILL/scripts/mix.py animations/<slug>/out/voice.wav animations/<slug>/out/score.wav animations/<slug>/out/mix.wav
5단계: 렌더링, 확인, 수정
python3 $SKILL/scripts/render.py animations/<slug>/piece.html --audio animations/<slug>/out/score.wav
python3 $SKILL/scripts/qc.py animations/<slug>/out/<slug>.mp4
render.py는 out/<slug>.mp4를 -14 LUFS로 마스터링하여 작성합니다. 진행 상황을 출력하며, 일반적인 작품의 15초에 대해 약 1-2분이 소요됩니다. 무거운 작품의 경우 백그라운드에서 실행하세요. 사운드만 변경된 후에는 --remux를 추가하여 다시 그리지 않고 몇 초 만에 오디오를 교체할 수 있습니다.
qc.py는 죽은 구간, 한 프레임 글리치, 음량을 플래그하고 연락처 시트를 작성합니다. 모션이 좋아 보이는지 판단할 수 없으므로 시트도 읽고, 위험한 순간을 클로즈업 크롭으로 프레임별로 살펴보세요: 전환, 텍스트 온/오프, 레이어가 겹치는 부분, 반복 모션의 전체 사이클. 깨끗해질 때까지 수정하고 다시 렌더링하세요.
전달
사용자의 평범한 언어로 보고하세요: 무엇을 만들었는지, 각 참조를 어떻게 사용했는지, 무엇을 확인했는지, 무엇을 확인할 수 없었는지. 당신은 스코어를 듣거나 빠르게 볼 수 없으므로 그렇게 말하세요. 추가:
- 알아야 할 사실 하나: 주장을 누그러뜨린 경우.
- 쉬운 조정: 다음에 요청할 수 있는 3~4가지 구체적인 변경 사항.
- 참조가 다른 사람의 소유인지와 상업적 사용 전에 고려해야 할 사항.