한 줄 요약
가족 만화카페 소개 영상을 만들면서, AI 생성물 관리용 대시보드와 Remotion 합성 구조를 점검하고, 씬 설계부터 최종 final.mp4 렌더링까지 이어지는 로컬 영상 제작 워크플로우를 정리했습니다.
시작점: 영상은 만들 수 있는데, 과정이 흩어져 있었다
처음 목표는 단순했습니다.
“심심푸리”라는 가족 만화카페 소개 영상을 30초 정도의 짧은 영상으로 만들고 싶었습니다.
그런데 실제로 해보면 영상 제작은 한 번의 프롬프트로 끝나지 않았습니다.
프로젝트 설정이 필요하고
씬별 대사와 프롬프트가 필요하고
이미지, 영상, 음성, BGM 파일을 정해진 위치에 넣어야 하고
각 씬 상태를 확인해야 하고
마지막에는 Remotion으로 최종 합성을 해야 했습니다
즉, AI 생성 도구보다 더 중요한 건 “생성된 결과물을 어디에 넣고, 어떻게 검수하고, 어떻게 최종 영상으로 묶을 것인가”였습니다.
먼저 한 일: 하네스 구조 파악
AI 에이전트와 함께 먼저 코드베이스 구조를 읽었습니다.
이 저장소는 크게 네 부분으로 나뉘어 있었습니다.
dashboard/: 씬 상태와 에셋을 보는 로컬 대시보드
projects/: 프로젝트별 project.json, scenes.json, 생성 결과물 저장소
remotion/: 최종 영상을 합성하는 Remotion 컴포지션
scripts/: 로컬 서버와 검증 스크립트
여기서 중요한 판단은 projects/를 “단일 진실 소스”로 두는 것이었습니다.
영상의 제목, 플랫폼, 비율, 씬 순서, 대사, 프롬프트, 에셋 경로가 모두 파일로 남기 때문에, 나중에 다른 AI 에이전트가 이어받아도 현재 상태를 복원할 수 있었습니다.
로컬 대시보드 연결
다음으로 대시보드 서버를 실행하고 확인했습니다.
python scripts/server.py
포트 8000에서 서버가 정상 동작하는지 확인했고, /dashboard/, /api/projects, /api/project-data, /api/assets, /api/scene-state 같은 API 응답도 점검했습니다.
대시보드에서는 씬 상태를 바꾸면 scenes.json에 반영되는 구조였습니다.
그래서 “지금 어떤 씬이 생성 전인지, 검수 중인지, 완료인지”를 눈으로 확인할 수 있었습니다.
새 영상 프로젝트 만들기
그 다음 실제 프로젝트인 simsimpuri-video를 만들었습니다.
project.json에는 영상의 세계관, 타깃, 톤, 플랫폼, 캐릭터 정보를 넣었습니다.
scenes.json에는 5개 씬의 구성과 대사를 넣었습니다.
예시는 이런 식입니다.
s01: 가족이 만화카페에 들어서는 후킹 장면
s02: 아빠는 만화책, 엄마는 커피와 콘텐츠를 즐기는 장면
s03: 아이들이 휴대용 게임을 즐기는 장면
s04: 라면, 떡볶이, 음료가 나오는 식사 장면
s05: 가족이 함께 인사하는 CTA 장면
각 씬에는 이미 지 프롬프트, 비디오 프롬프트, 수정 프롬프트, 필요한 에셋 참조를 함께 넣었습니다.
이렇게 해두니 “다음에 뭘 생성해야 하는지”가 문서가 아니라 작업 데이터 안에 남았습니다.
생성 프롬프트 안전성 정리
중간에 한 번 중요한 정리도 했습니다.
처음 프롬프트에는 특정 스튜디오명, 게임기 브랜드명, OTT 브랜드명처럼 그대로 쓰면 애매한 표현이 섞여 있었습니다.
그래서 생성 프롬프트에서는 이런 표현을 직접 쓰지 않고, “따뜻한 손그림 2D 애니메이션풍”, “로고 없는 휴대용 게임기”, “읽을 수 없는 미디어 UI”처럼 일반 묘사로 바꿨습니다.
이건 단순한 문장 다듬기가 아니라, 생성 결과물에 상표나 특정 스타일 모방이 노출되지 않게 하는 검수 단계였습니다.
생성 준비 패키지 만들기
남은 작업자가 바로 이어서 작업할 수 있도록 ep01generationpack.md와 ep01_review.md도 만들었습니다.
ep01generationpack.md: 어떤 씬을 어떤 프롬프트로 생성할지 정리
ep01_review.md: 생성된 이미지와 영상을 검수할 때 볼 기준 정리
docs/handoff/...: 다음 작업자에게 넘길 현재 상태와 미해결 항목 정리
이 단계에서 좋았던 점은 “작업 기억”이 사람 머리에만 남지 않았다는 것입니다.
AI 에이전트가 다음 세션에서 이어받아도, 파일을 읽고 맥락을 복구할 수 있었습니다.
마지막 문제: 씬은 가로인데 최종 영상이 세로로 나옴
최종 합성 단계에서 실제 문제가 하나 나왔습니다.
각 씬 영상은 1280x720 가로형이었는데, Remotion으로 만든 final.mp4는 세로형으로 렌더링되고 있었습니다.
그래서 영상 좌우가 잘렸습니다.
확인해보니 원인은 명확했습니다.
Remotion 쪽 렌더 해상도가 1080x1920으로 고정되어 있었고, 씬 영상은 objectFit:cover로 들어가고 있었습니다.
그래서 project.json의 ratio 값을 읽어 렌더 해상도를 자동으로 정하도록 바꿨습니다.
16:9이면 가로형
9:16이면 세로형
1:1이면 정방형
그리고 이번 프로젝트는 ratio를 16:9로 바꿨습니다.
추가로 Remotion 렌더 스케일 때문에 처음에는 852x480으로 줄어드는 문제가 있어, 가로 프로젝트는 스케일 1로 렌더되도록 설정도 보강했습니다.
결과
최종 렌더 후 ffprobe로 확인한 결과입니다.
width=1280
height=720
display_aspect_ratio=16:9
duration=30.000000
최종 파일은 아래 위치에 생성됐습니다.
projects/simsimpuri-video/outputs/ep01/final.mp4
이제 씬 영상과 최종 영상이 같은 16:9 비율이라 좌우가 잘리지 않습니다.
Before vs After
Before:
생성 결과물이 폴더 여기저기에 흩어질 수 있음
어떤 씬이 준비됐는지 대시보드 없이 확인하기 어려움
프롬프트에 직접 상표명이나 특정 스타일 표현이 섞일 위험이 있음
씬 영상과 최종 렌더 비율이 달라 잘릴 수 있음
After:
프로젝트 설정, 씬 데이터, 생성 결과물이 폴더 규칙으로 정리됨
대시보드에서 씬 상태와 에셋을 확인할 수 있음
생성 프롬프트와 검수 기준이 파일로 남음
Remotion 최종 렌더가 프로젝트 비율을 따라가도록 개선됨
ffprobe로 최종 결과를 수치로 검증함
배운 점
이번 작업에서 가장 크게 느낀 건, AI 영상 제작은 “생성”보다 “운영 구조”가 더 중요하다는 점이었습니다.
이미지나 영상 하나를 잘 만드는 것도 중요하지만, 실제 프로젝트에서는 그다음 질문이 계속 나옵니다.
이 파일은 어느 씬에 들어가야 하지?
이 씬은 검수 완료인가?
프롬프트는 나중에 다시 찾을 수 있나?
최종 영상 비율은 원본과 맞나?
다음 사람이 이어받을 수 있나?
이번에는 그 답을 로컬 하네스 안에 넣어봤습니다.
project.json, scenes.json, 대시보드, generation pack, review note, Remotion 렌더까지 하나로 묶으니, AI 생성물이 “결과 파일”이 아니라 “다시 실행 가능한 제작 과정”으로 남았습니다.
다음에 해볼 것
다음 단계에서는 최종 렌더 후 자동 검수까지 넣고 싶습니다.
예를 들면 이런 식입니다.
씬 영상과 final.mp4의 비율이 다르면 경고
필요한 sNN-video.mp4, sNN-voice.mp3가 빠지면 렌더 전 알림
대시보드에서 바로 Remotion 렌더 실행
최종 결과물 해상도와 길이를 자동으로 리뷰 노트에 기록
이렇게 되면 AI 영상 제작을 매번 감으로 하는 게 아니라, 작은 제작 파이프라인처럼 반복할 수 있을 것 같습니다.