필자는 해외 AI 관련 뉴스를 매일 하나씩 검증하여 발신하는 챌린지의 12일차로서, video-shotcraft라는 OSS를 구동해 보았다. Claude Code/Codex용 에이전트 스킬(agent skill)로, Remotion(React 기반 영상 생성 프레임워크)을 기반으로 '영화적인 제품 영상'을 자동 생성한다. 157장의 샷 레시피 카드와 214개의 모션 프리뷰를 갖추고 있으며, 바로 사용할 수 있는 36.2초 분량의 프로모용 템플릿 'Ink Press'가 포함되어 있다. 라이선스는 Apache-2.0이다. 검증한 커밋은 5ddbf52이다.
(저자 날짜 2026-09-29). 필자가 검색한 범위에서는 Zenn, Qiita, note 어느 곳에서도 일본어 원문 소개 기사는 찾을 수 없었다 (2026-10-09 기준).
결론부터 말하자면. 추가 유료 API 키나 GPU 없이 공식 스펙대로 '36.2초・1920×1080・30fps・10샷'의 프로모 영상을 실제로 렌더링할 수 있었다. 9일차에 검증했던 OpenMontage에서도 같은 Remotion 기반 영상 생성 OSS를 다루었기 때문에, 이번에는 그때 발생했던 헤드리스(headless) 렌더링의 막히는 지점을 비교 기준으로 삼았다. 결과적으로, 9일차에 필수적이었던 외부 폰트의 TLS 인증서 오류 대책이 이번에는 필요하지 않았으며, 그 이유는 컴포지션 측의 설계에 있었다는 것이었다.
video-shotcraft란 무엇인가
공식 README(일본어 버전도 동봉되어 있음)에 따르면, 본체는 157장의 '샷 레시피 카드'(목적・에너지・권장 시간・파라미터・구현 시 주의사항을 정리한 Markdown)와 214개의 모션 프리뷰 라이브러리로 구성되어 있으며, Claude Code나 Codex에 에이전트 스킬로 추가하면 자연어 지시로부터 해당 샷들을 조합하여 Remotion 컴포넌트를 생성한다. 단일 샷 합성 외에도, 사전에 검증된 완벽한 36.2초 프로모 영상 템플릿 'Ink Press'가 포함되어 있으며, README는
$ npx remotion render src/index.ts AiflPromo out/promo.mp4 \
--concurrency=1 --scale=0.5 --codec=h264
Rendered 1085/1085
...
(명령어는 실행 환경마다 다른 브라우저 위치 지정은 생략하고 표기했습니다.)
ffprobe로 검증한 결과, h264 960x540 + aac, duration=36.224000초였습니다. README/TEMPLATE.md가 주장하는 '36.2초'라는 길이와 실측값이 정확히 일치했습니다. 나아가 공식 스펙에 맞는 풀 해상도(1920×1080, --scale 지정 없음)로도 실제로 렌더링해 보았습니다.
$ time npx remotion render src/index.ts AiflPromo out/promo-1080p.mp4 \
--concurrency=1 --codec=h264
Rendered 1085/1085
...
이 경우도 h264 1920x1080 + aac, duration=36.224000초로 scale=0.5 버전과 길이(尺)가 일치했습니다. 렌더링 실시간은 scale=0.5 버전(1분 35초)의 약 2.2배 수준으로, 픽셀 수가 4배가 되었음에도 증가 폭이 완만했습니다. 리포지토리에는 크기 문제로 인해 scale=0.5 버전(8.4MB)만 커밋하고, 풀 해상도 버전(20.3MB)은 실측값만 본문 기사와 results.md에 남겼습니다.
템플릿 자체가 권장하는 절차대로, 실제 렌더링 전에 먼저 프레임 1개만 정지 이미지로 추출하여 화질을 확인했습니다(npx remotion still ... --frame=150). 출력물은 1920×1080 크기의 1.2MB PNG 파일이었으며, 영어와 중국어가 혼재된 더미 UI의 텍스트, 카드 그림자, 2.5D 기울임 연출 모두 깨짐 없이 확인할 수 있었습니다. TEMPLATE.md가 경고하는 'transform: scale를 사용하면 문자가 먼저 다운샘플링되어 번진다'는 문제는 적어도 이 프레임 범위에서는 시각적으로 확인되지 않았습니다.
실측 3: 소개글의 수치와 실측값이 달랐지만, 원인은 '스냅샷이 오래되었기' 때문이었다
backlog.md에 기록된 소개글의 수치(2026-10-09 기준 GitHub Trending 게재 정보)는 '쇼트 레시피 카드 152개・모션 프리뷰 209개'였으나, 실제로 클론한 커밋(5ddbf52, 작성일자 2026-09-29)에서는 수치가 달랐습니다.
| 항목 | backlog.md 소개글 | 실측값 |
|---|
| 쇼트 레시피 카드 | 152 | 157 |
| 모션 프리뷰 | 209 | 214 |
다만, day-009 케이스와 달리 이는 소개글 자체의 오류는 아니었습니다. README.md를 읽어보면, '152 카드/209 프리뷰'는 2026년 8월 시점의 확장 이력으로 명시된 과거 마일스톤 수치였으며, 현재 README가 제시하는 수치는 '157 카드・214 프리뷰'였습니다. 그 위에서 이 '현재 수치'가 실제와 일치하는지 검증했습니다.
$ find references/shots -name "*.md" | wc -l # ATTRIBUTION.md(라이선스 기록) 1건 포함
158
$ python3 -c "import json; d=json.load(open('gallery/api/library.json')); print(d['stats'])"
...
references/shots/ 하위의 Markdown 파일 158개에서, 쇼트 레시피 카드가 아닌 ATTRIBUTION.md를 1개 제외하니 157개가 되어 Gallery 자체가 생성하는 통계(library.json)와 완벽하게 일치했습니다. day-009에서는 도구 수・skill 수로 소개글과 실측값이 크게 달랐지만, 이번에 차이가 난 것은 'backlog.md가 참조한 시점의 스냅샷'과 '검증 시점의 리포지토리 상태'였으며, 며칠 사이에 리포지토리가 계속 업데이트되었기 때문에 발생한 자연스러운 오차였습니다. 매일 활발하게 업데이트되는 리포지토리를 며칠 간격으로 검증할 때는 소개글 수치를 그대로 옮겨 적지 말고, 검증 시점에 다시 한번 확인해 볼 가치가 있다는 것을 이번에도 확인할 수 있었습니다.
실측 4: 동봉된 유닛 테스트도 실제로 실행했다
video-shotcraft 리포지토리 바로 아래에는 assets/lib/helpers
하위의 순수 함수에 대한 vitest 유닛 테스트가 포함되어 있다. 이것도 실제로 실행해 보았다.
$ npm install && npx vitest run
✓ assets/lib/helpers/__tests__/helpers.test.ts (23 tests) 89ms
Test Files 1 passed (1)
...
23개 모두 통과했다.
실측 5: 다른 환경(Windows)에서도 재현했으며, 시각적 차이도 확인했다
자동 실행 기록을 맹신하지 않기 위해, 필자의 장비(Windows 11・Node v24.15.0・16 논리 코어)에서 동일한 commit 5ddbf52를 clone하여 재현해 보았다.
$ npx remotion render src/index.ts AiflPromo out/promo.mp4 --concurrency=1 --scale=0.5 --codec=h264
Rendered 1085/1085
Encoded 1085/1085
...
ffprobe로는 h264 960x540 + aac, Duration: 00:00:36.22로, 자동 실행 시의 36.224초와 일치했다. 157개 카드・214개 미리보기 수치와 vitest의 23개 통과 기록도 같았다. 반면, 시각적인 부분에는 환경 차이가 있었다. 동일한 frame=150임에도 불구하고, 제목