stanglivideo은(는) 무엇을 하나요?
제품이 직접 만든 듯한 영화, 비트에 맞춰 움직이고 소리가 정확히 프레임에 맞는 영화: 모든 사운드는 해당 프레임에, 모든 단어는 읽을 수 있을 만큼 충분히 화면에, 프레임 밖으로 나가는 것은 없습니다. 코드에서 Remotion으로 제작되어 항상 편집 가능합니다.
아래 경로는 영화 프로젝트 경로로 시작하지 않는 한 이 스킬의 폴더를 기준으로 합니다. $PY는 의사(doctor)가 출력하는 파이썬(스킬의 .venv)입니다.
모든 실행은 여기서 시작합니다
-
의사(Doctor). 첫 실행 시(이 폴더에
.venv또는taste.md가 없는 경우):node scripts/doctor.mjs --setup..venv를 생성하고,requirements.txt를 설치하며taste.example.md에서taste.md를 만듭니다. 이후 실행:node scripts/doctor.mjs. Node 18+, Python 3.10+(numpy와 scipy 포함), 완전한 ffmpeg, 그리고 동반 스킬을 확인합니다. Node 자체가 없으면 의사가 실행될 수 없습니다: 그 사실을 알리고 아래 설치 명령어를 제공합니다. -
사용자에게 누락된 것을 명확히 알립니다. 모든 실패(FAIL)에 대해 한 줄로: 무엇이 누락되었는지, 스킬에 왜 필요한지, 그리고 해당 시스템에서 해결하기 위한 정확한 명령어를 알립니다. 그런 다음 사용자가 완료했다고 말할 때까지 기다렸다가 의사를 다시 실행합니다.
누락 이유 Windows Mac Node 18+ 영화 빌드 및 렌더링 winget install --id OpenJS.NodeJS.LTS -ebrew install nodePython 3.10 ~ 3.13 사운드 점수 계산 및 검사 실행 winget install --id Python.Python.3.12 -ebrew install [email protected]ffmpeg (전체 빌드) 분석, 인코딩, 음량 검사 winget install --id Gyan.FFmpeg -ebrew install ffmpeg동반 스킬 Remotion API 규칙 npx skills add remotion-dev/skills동일 Node, Python 또는 ffmpeg 설치 후, 사용자는 새 터미널을 열어 PATH에 반영한 다음
node scripts/doctor.mjs --setup을 다시 실행해야 합니다.GEMINI_API_KEY는 선택사항입니다: 생성된 이미지 또는 루프가 실제로 필요할 때만 언급하세요. -
동반 스킬 (필수).
remotion-best-practices, Remotion의 공식 스킬입니다. 여기에 번들로 포함되지 않습니다. Remotion API 질문(미디어, 글꼴, 자막, 렌더링 옵션)에 사용합니다. -
취향(Taste).
references/base-rules.md와taste.md(여전히 없으면taste.example.md에서 생성)를 읽습니다. 이는 사용자의 고정 규칙입니다. 충돌 시taste.md가 우선합니다.
불가침 규칙
- 사용자의 디자인이 우선합니다. 색상, 서체, 컴포넌트, 로고, 음성 및 클레임은 제품에서 가져옵니다. 사용자의 디자인과 모순되는 다른 제품의 취향(이 스킬에 포함된 것까지)을 절대 가져오지 마십시오.
- 모든 프레임은 시간의 순수 함수입니다. CSS 전환 또는 키프레임, 타이머,
Date.now(),Math.random(시드된rand사용), 프레임 간에 유지되는 상태가 없습니다. - 하나의 타이밍 소스. 각 영화의
src/films/<film>/cues.json은 모든 큐 시간을 보유합니다. 영화의 TSX는 이를 가져오고 스코어는 읽습니다(sound/cues.py). 둘 중 어느 것도 리터럴 시간을 보유하지 않습니다. - 측정하세요, 추측하지 마세요. 오디오에서 비트, 디버그 오버레이에서 위치, 디코딩된 픽셀에서 색상을 가져옵니다.
- 정직한 클레임. 제품이 실제로 하는 것만 보여줍니다. 금지 목록은 대본 작성 전에 사용자의 승인을 받습니다.
- 커밋, 푸시 또는 게시 전, 그리고 모든 유료 API 호출 전에 먼저 물어보세요.
- 모든 카피, 파일 또는 메시지에 em 또는 en 대시를 사용하지 마십시오.
워크플로우 및 승인 게이트
각 STOP은 하드 게이트입니다: 물어보고(AskUserQuestion), 기다린 후, 답변을 프로젝트의 BRAND.md에 기록합니다.
- 인테이크 (필수). 사용자가 좋아하는 2~5개의 동영상을 요청하고, 각각에 대해 무엇을 좋아하는지(사운드 포함) 한 줄씩 요청합니다.
node scripts/intake/intake.mjs <project>/intake <videos...>를 실행하고 모든 시트를 읽습니다. references/intake.md를 참조하세요. - 발견(Discovery). 제품 학습: 규칙 파일, 토큰(라이트 및 다크), 컴포넌트, 로고, 랜딩 페이지, 실제 스크린 및 카피, 클레임. references/discovery.md를 참조하세요.
- 인터뷰. 브리프와 재료. references/interview.md를 참조하세요. 그런 다음:
- STOP: 라이트 또는 다크. 여러 영화가 있을 때 각 영화별로; 제품에 두 테마가 모두 있으면 세트가 둘 다 혼합합니다.
- STOP: 금지된 클레임. 영화가 클레임할 내용과 절대 말해서는 안 되는 목록(코드, 사이트 및 사용자로부터)을 보여줍니다. 두 목록의 승인을 기다립니다.
- 브랜드 킷.
templates/BRAND.md를 프로젝트에 채웁니다. 모든 규칙은 출처를 인용합니다. - 음악. 후보를 조사하고 측정합니다. STOP: 음악 선택. references/music.md를 참조하세요.
- 스토리.
templates/film-prompt.md를 채우고; 비트 계획을cues.json으로 작성합니다. references/story.md 및 references/ingredients.md를 참조하세요. - 프로젝트.
node scripts/new-project.mjs <dir>,npm install.src/kit/에 하나의 킷; 영화당 하나의 폴더. references/engine.md를 참조하세요. - 스토리보드. 장면을 빌드하고, 영화당 5~8개의 스틸을 렌더링하고(프로젝트에서:
node scripts/stills.mjs), 타일로 배열합니다. STOP: 전체 렌더링 전에 스토리보드 승인. references/review.md를 참조하세요. - 렌더링. 프로젝트에서:
node scripts/render.mjs <Composition> out/<film>.mp4(안전 장치 내장). 콘택트 시트, 확인, 수정. - 스코어. 프로젝트에서:
cues.json에서sound/scores/<film>.py;$PY sound/render.py <film>. references/sound-rules.md를 참조하세요. - 게이트 (필수). 프로젝트에서:
$PY scripts/gate.py <film>. 통과할 때까지 완료로 간주되지 않습니다. references/render.md를 참조하세요. - 전달. 경로, 길이, 음량, 피크, 게이트 결과, 변경 사항. 모든 버전을 보관합니다.
동기화 게이트
- 휘파람 소리는 움직임의 가장 빠른 프레임에서 피크에 배치합니다(
align="peak";kit/speed.ts는 카메라 움직임의 가장 빠른 프레임을 찾습니다;E.out입구는 시작 부분에서 가장 빠르고,E.exit출구는 끝 부분에서 가장 빠릅니다). - 팝 소리는 요소가 착지하는 프레임에 배치합니다. 칭 소리는 최종 숫자가 표시되는 프레임에 배치합니다.
- 라이저는 히트에서 끝납니다(
align="end"). - 모든 사운드는 화면상의 이벤트를 나타내는 레이블을 가지고 있습니다.
- 모든 믹스 후:
sound/check.py(화면 변경 전 사운드 없음),scripts/final-check.py(-14 LUFS ±1 LU 이내, 트루 피크 -2 dBFS 이하, 음량 범위 4 LU 이상, 무음 없음, 사일런트 렌더와 동일한 화면, 동일한 길이) 및scripts/verify.py, 모두scripts/gate.py에 의해 실행됩니다. 플래그는 사운드(또는 큐)를 이동하여 수정하며, 시트를 보지 않고 예외 처리하지 않습니다.
취향 메모리
references/base-rules.md는 스킬과 함께 제공됩니다: 실제 영화에서 얻은 교정 사항을 일반 규칙으로 정리합니다.taste.md(git 무시됨,taste.example.md에서 생성)는 이 머신의 취향입니다. 사용자가 제공하는 모든 새로운 교정 사항은 영화를 수정하기 전에 일반 규칙으로 여기에 기록되며, 어떤 영화에서든 문제를 방지할 수 있었을 표현으로 작성됩니다. 모든 실행 시작 시 읽습니다.- 여러 영화에 걸쳐 유지되는 규칙은 이 스킬에 대한 풀 리퀘스트를 통해
base-rules.md로 승격될 수 있으며, 무음 편집으로는 승격될 수 없습니다.
안전 (스크립트에 내장)
templates/project/scripts/safety.mjs는 모든 번들 및 렌더링에서 사용됩니다: 먼저 사용 가능한 디스크 확인(최소 10GB), 최대 2개의 렌더링이 동시에 실행, 임시 번들은 모든 작업 후 삭제되고 오래된 번들은 그 전에 삭제됩니다. 메모리가 부족한 머신에서는 동시성 1로 렌더링합니다. 자신이 시작한 프로세스만 중지합니다.
선택적 모드
- 생성된 미디어. 코드가 그릴 수 없는 것에만 해당: 실제 사진, 사진 질감, 컷아웃, 촬영된 배경(실크, 액체, 빛)은 사용자가 실제 촬영된 느낌을 원할 때 사용합니다.
scripts/gemini/image.mjs는 참조 이미지를 가져와 출력이 선택된 룩과 일치하도록 하고, 종횡비, 크기, 리사이즈 및 크로마 키를 처리합니다.scripts/gemini/video.mjs는 팔레트가 일치하는 첫 번째 프레임(또는 네이티브 루프)에서 Veo 클립을 만듭니다. 환경의GEMINI_API_KEY에서만 키를 가져옵니다. 모든 호출은 비용을 출력하고 사용자의 승인 후에만 실행됩니다. references/gemini.md를 참조하세요. - 미디어 도구 (무료, 모든 클립).
scripts/media/loop.py는 클립을 매끄러운 배경 루프(심 검색, 정확한 디졸브, 영화 FPS로 보간, 루프 + 포스터 + 스틸 시퀀스 + 경계 시트)로 변환합니다; 킷의LoopBackground는 영화의cues.json에서 모션 레이어 아래에 배치합니다.scripts/media/clip.py는 프로브하고, 프로젝트 형식으로 다시 인코딩하고, 가장자리를 자르고 스틸 또는 시트를 추출합니다.scripts/media/imgpost.py는 이미지를 키잉하고 크기를 조정합니다. - 갱신(Refresh). 사용자가 요청할 때: prompt-motion.com, skillry.dev 및 awesome-opus5-5-videos 리포지토리에서 새 항목을 다시 연구하고 PR로 참조 업데이트를 제안합니다. references/refresh.md를 참조하세요.
품질 기준 (항상)
- 제품 자체의 표면, 색상, 테두리 및 음영만 사용합니다. 가상의 패널이나 틴트는 없습니다.
- 전달 크기에서 읽을 수 있어야 합니다. 더 적은 단어가 더 작은 단어보다 낫습니다. 사람들이 읽어야 하는 줄은 단어당 약 0.2초에 나타나고 2초 이상 유지됩니다.
- 모든 카드와 마침표는 모든 움직임의 모든 프레임 동안 프레임 내에 완전히 있어야 합니다.
- 각 샷을 5~6초 동안 한 번의 느린 푸시로 유지합니다. 바쁘게 느껴지면 속도를 높이는 대신 화면을 잘라냅니다.
- 텍스트는 커서나 칩에 의해 가려지지 않고, 다른 텍스트와 교차하지 않으며, 빌드되는 동안 다시 중앙에 배치되지 않습니다.
- 모든 비트에 무언가 발생하고, 장면 경계는 마디에 위치하며, 루프의 마지막 프레임은 첫 번째 프레임과 같습니다.
- 세트 내에서 두 영화가 동일한 구조를 공유하지 않습니다. 나란히 유지되는 모든 것은 정확히 중앙에 배치됩니다.
- 제품의 언어가 사용하지 않는 효과는 없습니다: 글로우, 파티클, 클릭 링, 바운시 이징, 셰이더.
지식
- references/method.md: 강력한 코드 제작 영화가 어떻게 빌드되는지, 엔진, 제작 규칙.
- references/prompt-lessons.md: 최고의 프롬프트가 작성되는 방법.
- references/sound-rules.md: 측정된 사운드 규칙 및 동기화 수정 규칙.
- references/pitfalls.md: 디스크, 메모리, 렌더링, 코드 및 사운드 실패 및 수정.
- references/reference-videos.md: 참조 동영상 및 각각이 가르치는 것.
- references/base-rules.md: 제공된 취향.
실제 시간을 소모하는 함정
- Remotion 스틸은 콘솔 로그를 전달하지 않습니다: 프레임에 측정값을 출력하세요(
kit/debug.tsx). npx remotion still은 모든 호출을 다시 번들링합니다:scripts/stills.mjs를 사용하세요(하나의 번들, 여러 프레임).- Remotion의 번들 ffmpeg에는
tmix,select또는tile이 없습니다: 의사가 확인한 시스템 ffmpeg를 사용하세요. - 색상 범위: 모든 전달물의 프레임 0을 디코딩하고 확인하세요(
verify.py --bg); 제한된 범위의 마스터를 전체 범위로 읽으면 어두운 배경이 회색으로 올라갑니다. interpolateColors는color-mix()를 구문 분석할 수 없습니다: 애니메이션이 적용되는 항목에는 16진수를 사용하세요.- 비동기 이미지 컴포넌트는 프레임에서 빈 상태로 렌더링될 수 있습니다: Remotion
<Img>를 사용하세요. - 시간에서 계산된 인덱스는 해당 섹션 직전에 -1입니다: 클램프하세요(
safeIndex). - 카메라가 스케일하는 모든 것에
will-change를 적용하면 텍스트가 흐려집니다. - 단어 공개 마스크는 패딩 없이 마지막 글자를 자릅니다:
kit/components.tsx의WordReveal을 사용하세요. - 렌더링 내 비디오 디코딩은 신뢰할 수 없습니다: 루프를 이미지 시퀀스로 변환하세요.