Code-Video-Infinite은(는) 무엇을 하나요?
화면은 '생성'되는 것이 아니라 '코드로 쓰여집니다'. 여기에는 이미지/비디오 생성 모델이 없습니다. 하나의 영상은 웹 페이지나 Remotion 프로젝트입니다. 그것에 시간 t를 주면 해당 프레임을 그립니다. 무헤드 브라우저나 Remotion 프레임별 렌더링, ffmpeg가 오디오와 비디오를 합칩니다. 사운드도 코드로 합성할 수 있습니다. 따라서 모든 영상은 임의로 seek하고, 임의로 재렌더링할 수 있으며, 한 버전을 수정해도 이전 버전이 틀어지지 않습니다.
이 스킬은 다섯 가지 엔진의 통합체입니다: 하나의 진입구, 하나의 프로세스, 세 가지 게이트. 각 엔진은 자체 전체 문서와 에셋을 유지합니다.
0 · 시작하기 전에 이 두 가지를 먼저 실행하세요 (30초, 건너뛰지 마세요)
node scripts/doctor.mjs # 환경 점검: Node / ffmpeg / ffprobe / Python / Chrome / 다섯 엔진 모두 준비되었는지 확인
node scripts/find.mjs --stats # 디렉토리: 880개 에셋을 출처와 컬렉션별로 정리
doctor에서 FAIL이 있으면 먼저 환경을 수정한 후 창작을 시작하세요. Chrome이 없으면 Chrome을 설치하거나 npx playwright install chromium을 실행하세요. Windows에서 npm이 실행 정책에 의해 차단되면 npm.cmd를 사용하세요.
1 · 먼저 엔진을 선택하고, 그 다음 스타일을 논하세요
엔진은 사용자의 요구에 의해 결정되며, 디렉토리의 풍부함에 의해 결정되지 않습니다. 하나의 영상은 기본적으로 하나의 메인 엔진만 사용하며, 두 번째 엔진은 에셋을 가져오는 데만 사용합니다.
| 요구 사항의 형태 | 엔진 | 강점 | 즉시 사용 시 지불해야 할 대가 |
|---|---|---|---|
| 15–30초 제품/출시/스킬 모션 영상, 리듬, 카메라 움직임, 'PPT 같지 않은' 느낌 필요 | onetake | 단일 HTML 합성, 실제 셔터 모션 블러, 합성 사운드 이펙트, 리듬과 이어짐을 위한 oracle | Python + Chrome 필요; 4K60 렌더링 느림 (먼저 시간 경고) |
| 제품 프로모션 영상, 영화 같은 느낌, 실제 웹 페이지 화면, 멀티 샷 내러티브, CapCut에서 추가 편집, 소셜 미디어 게시 필요 | shotcraft | 124장의 샷 레시피 카드 + Ink Press 템플릿 + 실제 페이지 캡처 + Freesound 사운드 선택 + 워크벤치 | Node + Remotion (npm 설치); Remotion은 별도 라이선스 |
| 구체적인 형태, 재질, 3D 오브젝트, 캐릭터와 동물, 손 그림, 종이 공예, 바로 실행 가능한 장면 필요 | claude-motion | 47개의 소스 코드 사례 + 20개의 소스 코드 컴포넌트 + 30개의 오브젝트 모델 + 14개의 시작 장면, 보존된 소스 코드 (스타일 태그 아님) | Node ≥ 22 + Playwright Chromium + ffmpeg 필요; 에셋 볼륨 큼 |
| MG 스타일 필요 (플랫/라인 아트/아이소메트릭/3D 렌더링/프레임별/콜라주/리퀴드/모프/바우하우스/신스웨이브/글라스/장식 글자/스티커/픽셀/사이버 HUD) | mg-motion | 15가지 검증 가능한 시그니처 기법 + 103 샘플 음악 도구 키트 + 10개의 머신 게이트 + 두 라운드 리뷰 | Chrome 필요 (MG_CHROME) + ffmpeg + 폰트 자체 로딩 |
| 하나의 동작, 전환, 텍스트 모션의 실제 소스 코드만 필요, 다른 프로젝트에서 사용 | wise-motion | 462개의 모션 항목, 미리보기, 실제 소스 코드 진입점 및 내보내기 스크립트 | 에셋만 제공, 전체 영상 디자인은 하지 않음 |
라우팅 세부 사항, 부정된 조합 및 각 엔진의 명확한 경계는 references/engine-selection.md를 참조하세요.
모든 에셋 검색은 동일한 명령어를 사용합니다 (다섯 엔진 공통):
node scripts/find.mjs "HUD 레이더"
node scripts/find.mjs "커피 손그림" --limit 5
node scripts/find.mjs fade --source wise-motion
node scripts/find.mjs "제목 등장" --collection shot-card --json
2 · 6단계 파이프라인 (순서 고정, 단계는 생략 가능하지만 게이트는 건너뛸 수 없음)
| 단계 | 수행 작업 | 심층 문서 |
|---|---|---|
| 0 요구사항 | 납품 사양 (길이/화면비/fps/더빙 및 자막 유무/언어), 에셋 출처, 대상 및 게시 위치를 한 번에 명확히 질문; 하나씩 묻지 않음 | references/pipeline.md §0 |
| 1 참조 | 참조 영상이 있으면 실제로 측정: 에너지 그래프, 컷 포인트, 정적 비율, t80 및 모션 블러 (onetake analyze_ref.py); 참조가 없으면 검증 가능한 숫자 목표 작성 | references/motion-grammar.md |
| 2 컨셉 | 서로 다른 세 가지 중심 아이디어, 사용자가 하나 선택; 동시에 이름으로 look/스타일 선택, 묵시적 기본값 사용 금지 | onetake §2 / mg-motion §2 |
| 3 리듬과 이어짐 | 스토리보드를 리듬과 이어짐 두 축으로 설계: 동일한 길이의 샷 금지, 하나의 비트를 이전 비트로 대체 금지 | references/motion-grammar.md |
| 4 에셋과 샷 | 실제 페이지 캡처 / 스크린샷 UI 복원 / 오브젝트 모델 / 샷 카드 / 모션 항목; 먼저 가장 작은 실행 가능한 조각 가져오기 | 각 엔진 ENGINE.md |
| 5 구현 | 모든 프레임은 시간의 순수 함수; 동작은 라이브러리에서 선택, 커브는 t80에 따라 결정; 먼저 정적 프레임 출력 후 전체 영상 | 각 엔진 ENGINE.md |
| 6 렌더링 및 납품 | 1080p30 초안 → 승인 → 4K60/최종 버전; 세 게이트 통과; 납품 계약에 따라 보고 | references/delivery.md |
3 · 철칙 (다섯 엔진 통합 중복 제거, 각각은 다른 사람이 이미 겪은 경험)
- 모든 프레임은 t에만 의존합니다.
Date.now()금지, rAF 누적 상태 금지, 상태 기반 CSS 애니메이션 금지; 의사 난수는 고정 시드 사용. - 템플릿의 이야기를 사용자의 이야기로 착각하지 마세요. 컨셉은 세 가지 중에서 선택; 새 영상에 템플릿의 비트를 적용하면 템플릿으로 읽힙니다.
- 이전 영상의 look을 다음 영상으로 가져오지 마세요. look/스타일은 이름으로 명시적으로 선택되어야 하며, 묵시적 기본값은 허용되지 않습니다.
- 메트로놈처럼 동일한 간격으로 나누지 마세요. 동일한 길이의 샷은 아무리 좋아도 슬라이드쇼로 읽힙니다.
- 비트를 대체하지 말고 이어가세요. 각 단락 경계에는 무언가가 살아남아 보이게 움직이거나 확대/축소되어 다음 단락으로 이어져야 합니다. 상호 배타적인 장면 (
display:none페이지 전환)은 리듬이 완벽해도 PPT입니다. 하드 컷 클라이맥스와 엔딩 카드는 예외입니다. - 여백은 클라이맥스가 떨어질 조건입니다. 참조 영상의 약 1/3 시간은 정적입니다. 영상 내내 멈추지 않으면 = 클라이맥스가 없습니다.
- 작은 요소, 큰 바탕. 이런 종류의 영상 화면은 종종 70% 흰색/배경색입니다. 화면을 채우는 에셋은 예외이지 기본이 아닙니다.
- 생성 과정이 보여야 합니다. 손이 녹화된 경로에서 그려지고, 공이 땅에 떨어지고, 점이 분열됩니다. 페이지가 스스로 움직이면 화면 보호기로 읽힙니다.
- 빠른 동작에는 셔터가 필요합니다. 약 80 px/프레임을 초과하면 모션 블러 없이 깜빡임과 잔상이 발생합니다. CSS blur가 아닌 렌더러의 셔터를 사용하세요.
- 카메라 움직임은 주인공을 따라가야 합니다. 고정 카메라는 '트래킹 카메라 움직임이 부족하다'는 평가를 받습니다.
inFrame을 선언하고 카메라가 지연, 기울기, 정지하도록 만듭니다. - 초안은 1080p30입니다. 승인되지 않은 편집은 4K60으로 렌더링하지 않습니다.
- 파티클/색종이/조각을 장식으로 사용하지 마세요. 템플릿으로 읽힙니다. 화려함이 필요하면 글자가 스스로 착지하게 만듭니다.
- 사운드는 하나의 공간, 하나의 재질. 각 이벤트에 하나의 합성 사운드 = 오디오 버전의 슬라이드쇼.
- 위조하지 마세요: 실행되지 않은 샘플 영상은 재현이라고 할 수 없고, 무음 영상을 유성 영상이라고 할 수 없으며, 기술적 통과가 미적 기준 충족을 의미하지 않습니다.
4 · 세 가지 게이트, 하나도 빠짐없이 필수
| 게이트 | 판단자 | 판단 내용 | 통과하지 못하면 어떻게 하나 |
|---|---|---|---|
| 머신 게이트 | node scripts/qc.mjs gate <video> | 길이/화면비/fps/오디오 트랙 유무/LUFS/트루 피크/블랙 프레임/정적 프레임 비율 | 영상 수정 후 재렌더링, 기준 변경 안 됨 |
| 정적 프레임 게이트 | 사용자 본인이 read_image | 6–10개의 키프레임이 포스터로 사용 가능한지: 구도/계층/여백/텍스트 레이아웃 | 화면 재구성 |
| 리뷰 게이트 | 컨텍스트가 깨끗한 독립 subagent | 7차원 점수 + 프레임 번호가 포함된 수정 목록; 수정 후 한 번 더 리뷰 | 영향 순서대로 수정 |
머신 게이트는 기계가 측정할 수 있는 것만 측정합니다. 미적 판단은 모두 독립 리뷰에 맡기며, 제작자의 자체 검사는 확인 편향이 있습니다.
각 엔진 고유의 게이트 (mg-qc.mjs, verify_promo.py, final-review.md, jury.md) 사용법과 판단 기준은 references/quality-gates.md를 참조하세요.
5 · 사운드
- 목표: 하나의 공간, 하나의 재질, 이벤트 수는 비트 수보다 적어야 함; 음악은 기본적으로 상업적 사용이 허가된 곡만 사용하고 기록해야 함.
- 일반적인 목표:
−14 LUFS(소셜/웹),−16 LUFS(장편/팟캐스트 스타일), 트루 피크≤ −1 dBTP(AAC 인코딩 후 더 올라감); 더 많은 여유를 두려면−3.5를 목표로 함. - 세 엔진의 기성 도구: onetake
sfx_palette.py/score.py(합성 + 녹음 믹스), mg-motionaudio.py+ 103 샘플, shotcraftsound-design.md+sfx-source.py(Freesound, 기본 CC0). - 세부 사항 및 라이선스 한계는
references/sound.md를 참조하세요.
6 · 납품 계약
모든 영상은 이 일곱 가지를 갖춰야 합니다 (하나라도 빠지면 완료되지 않은 것): 컨셉 두 문장 / 타임코드가 있는 비트 시트 / 시그니처 기법별 대응 / 어떤 스타일을 사용했고 어떻게 전환했는지 / 기술 경로 / 실제 측정 숫자 (길이 화면비 fps LUFS 트루 피크 블랙 프레임 정적 프레임 비율) / 솔직한 top-3 약점.
엔진별 추가 납품물: onetake 다국어 동일 소스 (?lang= 분기 없음), claude-motion ADAPTATION.md (보존/수정/라이선스/미해결 문제), shotcraft 모션 워크벤치 및 CapCut 프로젝트, mg-motion 버전 디렉토리 v1/ v2/. 자세한 내용은 references/delivery.md를 참조하세요.
7 · 디렉토리 맵
Code-Video-Infinite.skill/
├── SKILL.md # 본 파일: 라우팅 + 철칙 + 게이트 + 납품
├── README.md # 사람용: 다섯 엔진 설명, 설치 방법, 라이선스 표
├── LICENSES.md # 엔진별 라이선스 및 타사 저작권 표시
├── references/ # 통합된 공유 지식 (이 레벨에서 새로 작성, 엔진 간 판단만 포함)
│ ├── engine-selection.md # 의사 결정 매트릭스 및 경계
│ ├── pipeline.md # 6단계 파이프라인의 각 단계 심층 정보
│ ├── motion-grammar.md # 리듬/커브/이어짐/카메라 움직임의 통합 용어
│ ├── sound.md # 사운드 및 라이선스 한계
│ ├── quality-gates.md # 세 게이트의 판단 기준
│ ├── delivery.md # 납품 계약
│ ├── assets-and-licenses.md# 에셋 위치, 재배포 가능 여부
│ └── provenance.md # 다섯 출처, 버전, 통합 내용
├── catalog/
│ ├── INDEX.md # 880개 에셋 목록 (생성물)
│ ├── index.json # 동일 데이터의 기계 판독 가능 버전
│ └── assets-index.json # 537개의 대형 에셋 목록
├── scripts/
│ ├── doctor.mjs # 환경 자가 진단
│ ├── find.mjs # 엔진 간 검색
│ ├── qc.mjs # 통합 머신 게이트 (measure / gate / delegate)
│ ├── build-catalog.mjs # 인덱스 재구축
│ └── check-links.mjs # 문서 상호 링크 점검
└── engines/ # 다섯 엔진 원본 유지 (각 문서/에셋/라이선스 포함)
├── onetake/ ENGINE.md + lib/motion.js + scripts/ + looks/ + cases/
├── shotcraft/ ENGINE.md + references/shots(124) + template/ + demos/ + assets/
├── claude-motion/ ENGINE.md + references/*.json + assets/{cases,extensions,models,scenes}
├── mg-motion/ ENGINE.md + mg-styles-15/{harness,assets} + references/ + scripts/
└── wise-motion/ ENGINE.md + catalog/registry.json + references/effects(462) + scripts/
8 · 언제 어떤 파일을 읽을까
| 상황 | 읽을 파일 |
|---|---|
| 어떤 엔진을 사용해야 할지 모를 때 | references/engine-selection.md |
| 작업을 시작해야 하고 각 단계의 구체적인 작업과 명령어가 필요할 때 | references/pipeline.md |
| 리듬이 이상하고, PPT 같고, 동작이 너무 약하거나 강할 때 | references/motion-grammar.md |
| 더빙/효과음/배경 음악/라우드니스 관련 | references/sound.md |
| 영상이 완성되었는데 게이트를 통과할지 걱정될 때 | references/quality-gates.md |
| 영상을 납품해야 하고, 보고서를 제출해야 하며, 추가 수정이 필요할 때 | references/delivery.md |
| 특정 엔진의 에셋을 사용하는데 상업적 사용이 가능한지 확실하지 않을 때 | references/assets-and-licenses.md |
| 특정 엔진을 업그레이드하거나 출처를 확인해야 할 때 | references/provenance.md |
| 엔진 심층 정보 (유일한 권위) | engines/<engine>/ENGINE.md 및 해당 references/ |
9 · 라이선스 및 에셋 경계 (한 문장 요약)
다섯 엔진의 라이선스는 각각 다릅니다. 통합 저장소는 각각의 라이선스를 변경하지 않습니다. onetake는 PolyForm Noncommercial (비상업적 무료), wise-motion은 Apache-2.0, claude-motion과 상위 mg-styles-15는 MIT (타사 에셋은 각각 라이선스 유지), shotcraft는 자체 라이선스이며 Remotion은 별도 라이선스가 있습니다 (회사 상업적 사용은 직접 확인 필요). 글꼴, 모델, 효과음, 배경 음악의 라이선스는 references/assets-and-licenses.md와 각 엔진의 LICENSE / ATTRIBUTION / NOTICE에 기록되어 있습니다. 브랜드 이름은 모두 가상이며, 실제 상표를 사용하지 마십시오.