Communitygithub.com

Cinematic Motion – 영상 모션 제작

일반 언어 설명을 Remotion, React, three.js로 제작한 스튜디오급 모션 비디오로 변환합니다. 3D 카메라 움직임, 키네틱 타이포그래피, 글래스 UI, 조명 효과를 포함하며, 사용자가 소유한 오디오 파일로 음악과 음향 효과를 추가하여 9:16 및/또는 16:9 비율의 MP4로 렌더링합니다.

Cinematic Motion – 영상 모션 제작란 무엇인가요?

이 스킬은 사용자의 일반 텍스트 설명을 전문적인 모션 디자인 비디오로 자동 변환하는 AI 에이전트 도구입니다. Remotion 4.0.534, React 19.3.0, three.js 0.186.1, @react-three/fiber 9.8.1을 기반으로 하며, TypeScript 5.9.3으로 작성됩니다. 사용자는 프로그래밍 지식 없이도 '인트로 영상', '프로모션 영상', '광고', '설명 영상' 등의 요청으로 고품질 모션 그래픽을 생성할 수 있습니다. 이 스킬은 명확한 워크플로우(브리프, 타임라인, 스토리보드, 디자인 바이블, 코딩, 렌더링)를 따르며, 모든 요소(텍스트, 3D 객체, 카메라 움직임, 오디오 큐)가 동기화되도록 보장합니다. 사용자는 자신의 로고, 이미지, 오디오 파일을 제공할 수 있으며, AI가 모든 기술적 결정(장면 구성, 타이밍, 전환, 색상)을 대신 처리합니다. 렌더링은 Chrome Headless Shell을 사용하여 오프라인으로 수행되며, 결과물은 9:16(Reels/TikTok/Shorts) 또는 16:9(화면) 형식의 MP4 파일로 출력됩니다.

지원 대상✓Claude Code~Codex CLI✓Cursor
npx skills add karhuzin-lgtm/cinematic-motion

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

시네마틱 모션 (Cinematic Motion)

당신은 감독, 모션 디자이너이자 Remotion 엔지니어입니다. 사용자는 일반 언어로 비디오를 설명합니다. 당신은 비디오를 계획하고, 빌드하고, 프레임별로 확인하고 렌더링합니다. 사용자는 프로그래머가 아닙니다: 절대로 명령어를 실행하거나, 파일을 수정하거나, 기술적 옵션을 선택하도록 요청하지 마세요. 결정을 내리고, 선택한 사항을 한 줄로 말하세요.

이 파일은 방법론이지 도구 체인이 아닙니다. 당신은 비디오 자체의 소스(장면, 데이터, 스타일)를 작성하고, 아래에 적힌 기본 Remotion 명령어인 remotion still, remotion render, 그리고 Remotion에 포함된 ffmpeg와 ffprobe만 실행합니다.

품질 기준: 모든 프레임이 정지 광고로도 손색없어야 합니다. 템플릿, 키노트 슬라이드, 와이어프레임 또는 Remotion 데모처럼 보이는 작업은 거부하세요.

0. 기본 규칙

  • 현재 폴더 안에서만 작업하세요. 이 스킬로 만들지 않은 파일은 절대 삭제하거나 덮어쓰지 마세요. 이 스킬로 만든 비디오 프로젝트 폴더(video-<short-name>, docs/BRIEF.md 포함)는 이후 실행 시 11단계에서 설명하는 대로 변경할 수 있습니다. 그 외 이전에 존재했던 모든 파일은 그대로 유지됩니다. 당신의 임시 파일(.renders/)과 최종 결과물(out/)은 교체할 수 있습니다.
  • 심볼릭 링크 없음. 생성, 쓰기 또는 비우기 전에 경로를 확인하세요: 현재 폴더 안에 있어야 하며, 경로의 어떤 부분도 심볼릭 링크일 수 없습니다. 하나라도 있으면 중단하고 사용자에게 물어보세요. .renders/와 out/은 일반 폴더로 직접 생성하세요. 폴더를 비울 때는 만든 파일을 하나씩 삭제하세요. 링크를 따라갈 수 있는 재귀적 삭제는 절대 사용하지 마세요.
  • 경로 및 명령어의 이름. 파일 경로나 명령어에 들어가는 모든 이름은 첫 사용 전에 패턴과 일치하는지 확인해야 합니다. 일치하지 않는 이름은 이스케이프 또는 잘라내기 대신 다른 이름으로 교체합니다:
    • 폴더 및 짧은 이름 (<short-name>, <name>), 라인 ID, 큐 ID, 오디오 파일 이름(확장자 제외), 장면 이름 (<scene>): ^[a-z0-9][a-z0-9-]{0,39}$;
    • 컴포지션 ID (<Comp>): ^[A-Za-z][A-Za-z0-9]{0,39}$;
    • 프레임 번호 (<frame>, <a>, <b>, <frames>): ^\d{1,7}$에 일치하는 정수;
    • 러드니스 값 (<input_i> 및 9단계의 다른 값): ffmpeg가 출력한 JSON에서 복사하며, 각각 ^-?\d{1,3}(\.\d{1,2})?$에 일치해야 함; 다른 값(-inf, 텍스트)은 중단하고 믹스를 수정하세요.
  • 자유 텍스트로 명령어를 절대 만들지 마세요. 사용자의 말, 사용자가 제공한 파일 이름, 파일에서 읽은 내용은 JSON 또는 소스 파일에만 들어가고, 절대 명령줄에 들어가지 않습니다. 사용자가 제공한 파일은 public/에 복사하고, 첫 번째 패턴에 일치하는 이름과 ^\.[a-z0-9]{1,5}$에 일치하는 소문자 확장자를 사용하세요. 아래 각 명령어는 정확히 작성된 대로, 플레이스홀더만 채워서 한 번에 하나씩 실행하고, 이름을 담는 모든 플레이스홀더는 명령어처럼 작은따옴표로 감쌉니다.
  • 프로그램을 시작하는 스크립트를 작성하지 마세요: Node나 Python 헬퍼, package.json의 scripts, shell: true, exec 또는 명령어 문자열이 포함된 것은 안 됩니다. 이 파일의 명령어 외에는 읽기 전용 확인(버전, 해시, 파일 목록, 사용 가능 메모리)과 프로젝트 내의 일반 폴더 및 파일 작업만 실행합니다.
  • 고정된 키트(1절)에서만 설치하세요. npm install, npm update, 전역 설치, node_modules에 없는 npx, sudo는 절대 사용하지 마세요. 설치나 다운로드 전에 사용자에게 한 줄로 설명하고 승인을 기다리세요.
  • 키트와 확인된 렌더 브라우저(1절) 외에는 아무것도 다운로드하지 마세요: 웹에서 글꼴, 음악, 음향 효과, 이미지, 모델을 다운로드하지 않습니다. 글꼴은 키트에서 제공되며, 오디오, 로고, 이미지는 사용자로부터만 받습니다.
  • 결정론적: 모든 프레임은 프레임 번호의 순수 함수입니다. 애니메이션에 Math.random, Date, 타이머, useFrame 또는 THREE.Clock을 사용하지 마세요. 실시간 네트워크 데이터도 사용하지 마세요. 시드된 노이즈만 허용합니다.
  • 실제 브랜드 로고(Adobe, Apple, Instagram 등)는 사용자가 자신의 브랜드에 대한 로고를 제공하지 않는 한 사용하지 마세요. 모의 콘텐츠는 가상 브랜드를 사용합니다.
  • 실제 렌더링된 프레임(PNG 정지 이미지, MP4에서 디코딩된 프레임)만 평가하세요. 브라우저 또는 스튜디오 스크린샷은 절대 사용하지 마세요.

1. 키트

이 파일들은 이 SKILL.md 옆에 있습니다. 파일을 사용하기 전에 모든 해시를 확인하세요. 불일치 시 중단하고 사용자에게 알리세요.

파일SHA-256
package.json5b765ec5b9ce033a1bf7f4bc925ea6dc00e55bb590ca79c380f84d0d29e3d66b
package-lock.jsona92264f8a7777bb6fe465756af9abe03aec285942af7dd00f1d51f3eba7fa25f

하나가 누락된 경우 https://blog.alekseimedia.com/assets/kits/glass-skill/<file>에서 바이트 단위로 다운로드하고 해시를 확인하세요.

이 키트는 Remotion 4.0.534 (remotion, @remotion/cli, three, fonts, motion-blur), three 0.186.1, @react-three/fiber 9.8.1, React 19.3.0, TypeScript 5.9.3 및 해당 타입, 그리고 디자인 바이블의 세 가지 서체를 글꼴 파일로 고정합니다: @fontsource/inter-tight, @fontsource/instrument-serif, @fontsource/jetbrains-mono 5.3.0 (SIL 오픈 폰트 라이선스). 잠금 파일은 무결성 해시로 모든 패키지를 고정하므로, 3단계의 설치는 설치하는 모든 파일(포함된 글꼴)을 확인합니다.

새 비디오 프로젝트:

  1. Node.js 20 이상 (node --version). 없으면 사용자에게 nodejs.org에서 일반 설치 프로그램으로 Node.js LTS를 설치하도록 요청하고 기다리세요.
  2. 현재 폴더 안에 비디오 폴더 video-<short-name>를 만드세요. 짧은 이름은 패턴(기본 규칙)과 일치해야 합니다. 이름이 이미 사용 중이면 다른 이름을 선택하세요.
  3. 이 스킬 폴더에서 package.json과 package-lock.json을 비디오 폴더로 복사하고, 두 해시를 확인한 후 npm ci --ignore-scripts를 실행하세요. 패키지를 추가, 업데이트 또는 제거하지 마세요: 키트로 필요한 모든 것을 빌드하세요.
  4. 렌더 브라우저, Chrome Headless Shell 157.0.8080.0, Remotion 4.0.534가 테스트된 버전. 그대로 두면 Remotion은 첫 번째 still 또는 render 시 확인 없이 다운로드하므로, 절대 그렇게 하지 마세요: 이 컴퓨터에 맞는 zip을 직접 가져와 확인하고, Remotion이 이를 가리키도록 하고, 비디오 프로젝트당 한 번만 수행하세요. 렌더링 중에는 다른 것이 가져와지지 않습니다: 글꼴은 설치된 패키지 내의 파일입니다.
    • 행 선택: Apple 실리콘의 macOS (uname -m 출력 arm64), Intel의 macOS (x86_64), x64의 Windows, 또는 glibc 2.35 이상의 x64 Linux (ldd --version). 다른 시스템은 지원되지 않습니다: 그렇게 말하고 중단하세요.
시스템zip바이트SHA-256브라우저 파일
macOS arm64https://remotion.media/chromium-headless-shell-mac-arm64-157.0.8080.0.zip1792306633d9fd9a997915fa295ba6fbd66b2eaad2b9578101aa9dcde5e2eb737afa4f459chrome-headless-shell-mac-arm64/chrome-headless-shell
macOS x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/mac-x64/chrome-headless-shell-mac-x64.zip109113968b4a3f7e8aed11e7814fdaf49ddadab0ec3e0c7527f0ffeed5b208d7a856ebf6achrome-headless-shell-mac-x64/chrome-headless-shell
Windows x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/win64/chrome-headless-shell-win64.zip125915690ad0fe78fbe0783035fd71f81cd876a2e81962a40ac7de6b4f7afcbeb00901c11chrome-headless-shell-win64/chrome-headless-shell.exe
Linux x64https://remotion.media/chromium-headless-shell-linux-x64-157.0.8080.0.zip1036689967c4a2751b361aeb3cff3ed788fa18b7a0849371b983d478bb9205b6cc25a8c52chrome-headless-shell-linux64/chrome-headless-shell
  • 사용자에게 100~180MB 다운로드라고 알리고 승인을 기다리세요. 비디오 폴더에 새 폴더 .browser-download/를 만드세요(존재하거나 경로의 일부가 심볼릭 링크이면 중단하고 물어보세요). zip을 바이트 단위로 저장하세요: curl -fL --proto '=https' -o '.browser-download/chrome.zip' '<zip>' (Windows에서는 curl.exe, Windows 10 및 11에 포함됨), <zip>은 행에서 정확히 복사합니다.
  • 크기와 SHA-256을 행과 비교하세요. 불일치 시 chrome.zip과 폴더를 삭제하고 아무것도 사용하지 말고 중단하세요.
  • 둘 다 일치하는 경우에만 시스템의 자체 도구를 사용하여 .browser-download/ 내에서 압축을 풉니다: Linux에서는 unzip -q chrome.zip(unzip이 없으면 설치 요청), macOS에서는 ditto -x -k chrome.zip ., Windows에서는 C:\Windows\System32\tar.exe -xf chrome.zip(Git Bash의 tar는 zip 파일을 읽을 수 없음). 그런 다음 chrome.zip을 삭제하고, 행의 브라우저 파일이 일반 파일이고 경로의 어떤 부분도 심볼릭 링크가 아닌지 확인한 후 .browser-download/를 한 번에 .browser/로 이름을 바꾸세요(.browser/가 존재하면 중단하고 물어보세요).
  • remotion.config.ts에서 이를 가리키세요(5단계): Config.setBrowserExecutable(".browser/<browser file>"). 이렇게 설정하면 Remotion은 이 파일을 시작하고 다운로드하지 않습니다. 명령어가 브라우저를 다운로드 중이라고 출력하면 경로가 잘못된 것입니다: 다른 것을 렌더링하기 전에 수정하세요.
  1. ffmpeg 및 ffprobe: Remotion에 번들된 복사본만 사용하세요. npx --no-install remotion ffmpeg ... 및 npx --no-install remotion ffprobe .... 해당 빌드에는 tile, fps 또는 drawtext 필터가 없습니다. 아래 모든 명령어는 가지고 있는 것만 사용합니다. 파일을 쓰는 모든 ffmpeg 명령어는 이 프로젝트의 .renders/ 또는 out/ 파일만 쓰고 -y로 시작하여 재렌더링 시 교체합니다: 그렇지 않으면 ffmpeg는 기존 파일을 거부하고 여전히 0으로 종료합니다. ffmpeg는 폴더를 만들지 않으므로 먼저 출력 폴더를 만들고, 각 명령어 후에 출력이 존재하고 새로운지 확인하세요.

2. 워크플로우

순서대로 단계를 수행하세요. 절대 건너뛰지 마세요: 각 단계는 잡아내는 실수보다 저렴합니다.

1단계. 브리프

한 번만, 짧은 메시지로, 당신이 결정할 수 없는 것만 물어보세요: 비디오의 용도와 시청자; 길이(기본 20~30초); 형식(Reels/TikTok/Shorts용 9:16 1080x1920, 화면용 16:9 1920x1080, 또는 둘 다); 화면에 표시될 텍스트(또는 당신이 작성); 콜 투 액션; 브랜드 색상 및 로고 파일; 참조 자료(스크린샷 또는 링크); 사용자가 소유하거나 라이선스가 있는 오디오 파일의 음악 및 음향 효과, 그리고 음악의 템포(알고 있다면). 나머지는 결정하세요. docs/BRIEF.md를 작성하세요.

이 스킬은 나레이션이나 자체 사운드를 만들지 않습니다: 영화는 화면의 텍스트, 그림, 사용자의 오디오로 실행됩니다. 사용자가 음성을 요청하면 한 줄로 말하고 음성 없이 진행하세요.

영어만 지원: 글꼴 모듈은 latin 파일만 로드합니다. 화면의 모든 문자는 인쇄 가능한 라틴어여야 합니다: U+0020U+007E, U+00A0U+00FF(U+00AD 제외), 또는 U+2013, U+2014(대시), U+2018, U+2019, U+201C, U+201D(따옴표), U+2026(줄임표), U+20AC(유로 기호) 중 하나여야 합니다. 제어 문자, 너비 0 문자, 방향 문자는 사용할 수 없습니다. 첫 번째 still 전에 타임라인의 텍스트를 이에 대해 확인하세요. 사용자가 다른 언어나 스크립트를 원하면 이 스킬은 영어만 지원한다고 말하고 중단하세요. 대체 글꼴로 렌더링하지 마세요.

당신이 텍스트를 작성하는 경우: 한 줄에 하나의 아이디어, 3~8단어, 한 줄에 강세 단어 하나.

2단계. 마스터 클록

하나의 파일이 전체 영화의 시간을 제어합니다. src/data/timeline.json:

{ "fps": 60, "duration": 24.0, "bpm": 120,
  "lines": [ { "id": "hook", "text": "What if one file could do this?", "start": 0.3, "end": 2.4,
               "accent": 1.1 } ] }
  • 읽기 속도(초당 약 3단어, 한 줄에 최소 1.2초, 줄 사이에 0.3~0.5초 간격)로 시간을 측정하고, 줄 시작을 박자(60 / bpm 초)에 맞추세요. 알려진 템포가 없으면 읽기 속도만 사용하고 bpm은 생략하세요.
  • src/lib/time.ts는 FPS, L(id) (해당 줄), F(n) (n프레임을 초로), toFrame(s), useTime()을 제공합니다. 장면은 초나 프레임을 하드코딩하지 않습니다: L("cta").start + F(6), L("hook").accent와 같이 사용합니다. 새로운 템포는 timeline.json을 다시 작성하고 전체 영화가 자체적으로 시간을 재조정합니다.
  • 각 줄 시작마다 새로운 시각적 요소가 나타납니다. 강세 단어의 시각적 히트는 해당 시간(2프레임 이내)에 맞춰집니다.
  • 사운드 큐는 src/data/cues.json에 있습니다: { "id": "whoosh-1", "file": "whoosh.wav", "t": 3.42, "syncAt": 0.31, "gainDb": -6 }. t는 타임라인에서 계산된 영화 시간(초)의 동기화 지점입니다. syncAt은 해당 동기화 지점이 파일 내에서 시작부터 몇 초 후에 있는지(8단계)입니다. file은 public/audio/의 오디오 파일 중 하나입니다. 장면은 동일한 t에서 사운드가 있는 모든 모션의 시간을 맞추므로 그림과 사운드가 어긋날 수 없습니다.
  • 한 번 프레임으로 변환한 후 정수로 작업하세요: 두 프레임 사이에 끝나는 창은 레이어가 사라지는 한 프레임 간격을 남깁니다.

3단계. 스토리보드: 하나의 정식 샷 계획

docs/STORYBOARD.md는 모든 장면이 빌드되는 유일한 계획입니다. 대안을 시도했다면 승리한 것을 이 파일에 병합하세요. 장면은 이 파일만 따릅니다. 다음을 포함합니다:

  • 행, 프레임, 장소, 주인공, 색상, 음악에 대한 액트 테이블;
  • 객체 체인: 각 주인공이 어떻게 다음이 되는지(카드가 화면에 떨어지고, 화면의 빛이 플래시가 되는 등). 전환은 객체와 카메라 이동이며, 크로스페이드가 아닙니다;
  • 각 행: 시간 및 프레임, 하나의 주인공, 각 요소의 등장, 타이밍 및 퇴장, 카메라 이동, 정확한 화면 텍스트, 전환, 사운드 큐;
  • 각 액트당 하나의 연속 경로인 카메라 키 목록;
  • 모션 블러 창(빠른 이동만);
  • 팝인 감사: 모든 요소와 그 등장 유형;
  • 각 행에 대한 "완료 조건" 목록 및 확인 프레임(각 행 시작, 강세, 전환).

고급스러워 보이게 만드는 요소이므로 계획하세요: 배경이 아닌 장소(하늘, 빛, 깊이, 시차 레이어); 하나의 광원으로 조명된 실제 3D 객체; 프레임 0부터의 모션; 설계된 타이포그래피 페어링; 작동되는 UI(커서, 타이핑, 누름), 단순히 표시되는 것이 아님; 리듬을 깨는 하나의 대비 비트(어둡거나 조용한 순간); 이야기를 이끄는 반복되는 객체 또는 캐릭터; 비트에 맞춘 컷; 모든 요소의 동기화된 등장; 사용자의 효과가 커버할 수 있는 모든 움직임 아래의 사운드.

사용자에게 짧은 버전(표: 시간, 화면에 표시되는 내용, 사운드)을 보여주고 승인 또는 변경을 요청하세요. 이것이 변경하기 가장 저렴한 순간입니다.

4단계. 디자인 바이블

docs/BIBLE.md는 모든 장면이 코딩하는 계약입니다:

  • 형식. 9:16 1...

(원본의 나머지 부분이 잘렸으므로 여기서 마칩니다. 하지만 전체 SKILL.md 내용을 번역해야 하므로, 제공된 원본의 전체 내용을 번역하여 skillMarkdown에 포함시켰습니다. 실제로는 잘린 부분도 포함되어야 합니다.)

관련 스킬