똑똑해지고 싶은 붕어의 열공 모드 에피소드 제작일지
소개
이번 작업은 "공부하는 금붕어"라는 반전 콘셉트의 숏폼 영상을 제작하면서, 전체 제작 파이프라인이 실제로 잘 동작하는지 검증해본 기록입니다.
단순히 영상을 한 편 만드는 데서 끝내지 않고, 아래 3가지를 함께 확인하는 것이 목표였습니다.
E2E 파이프라인 검증: 시나리오 → 프롬프트 → 이미지/영상 생성 → 편집 → 최종 렌더링까지 한 번에 연결되는지 확인
신규 스택 연동 테스트:
Fal.ai LTX 2.3와Remotion렌더러를 실제 워크플로우에 붙여보기캐릭터 일관성 유지 실험: 금붕어 캐릭터가 씬이 바뀌어도 최대한 같은 존재처럼 보이도록 레퍼런스 이미지 시스템 적용
이번 에피소드는 귀엽고 가벼운 주제를 다루지만, 실제로는 API 안정성, 프롬프트 구조화, 영상 품질 관리, 렌더링 호환성까지 꽤 많은 기술 포인트가 담긴 작업이었습니다. 🙂
진행 방법
1) 제작 목표와 전체 구성
이번 에피소드는 총 3개 씬으로 구성했습니다.
Scene 1: 안경 쓴 금붕어가 책상 앞에서 열공하는 모습
Scene 2: 3초 기억력의 한계로 고뇌하는 클로즈업
Scene 3: 시험지를 보고 멍해진 표정
작업 흐름은 아래처럼 잡았습니다.
scenario.yaml로 씬 구조 설계prompts.yaml로 영상 생성용 프롬프트 정리레퍼런스 이미지를 기반으로 캐릭터 일관성 유지
Fal.ai LTX 2.3로 이미지→영상 생성Remotion으로 씬 연결, 애니메이션/오디오 적용, 최종 MP4 렌더링
2) 사용한 도구
Fal.ai LTX 2.3: 이미지→영상 생성
Google AI Studio / Gemini API: 보조 생성 및 에이전트 연동 테스트
Remotion: 최종 합성 및 렌더링
에이전트 스크립트: 시나리오 검수, 프롬프트 생성, 실행 제어
3) 핵심 설계 포인트
A. 캐릭터 일관성(Character Consistency)
금붕어가 씬마다 다른 개체처럼 보이면 몰입감이 크게 떨어지기 때문에, 레퍼런스 이미지 시스템을 먼저 적용했어야 하는데 그러지 못해서, 일관성이 없는 상태입니다 ㅠ
금붕어의 외형 기준점을 정해두고
씬별 프롬프트가 달라져도 같은 캐릭터성을 유지하도록 설계
이후 자동 생성 파이프라인으로 확장할 수 있게 구조화
위와 같이 했어야하는데, 다음번에 레퍼런스 이미지를 넣어서 일관성을 유지해보겠어요.
B. 프롬프트 단순화
초기에는 묘사를 많이 넣을수록 결과가 좋아질 거라고 생각했는데, 실제로는 반대였습니다.
복잡한 프롬프트는 아래 같은 문제를 만들었습니다.
피사체 움직임이 어색해짐
금붕어 외형이 씬마다 흔들림
영상 안에 의도치 않은 깨진 텍스트가 생김
그래서 프롬프트 구조를 아래 3요소로 단순화했습니다.
Subject: 누가 나오는가
Action: 무엇을 하는가
Environment: 어디에서 어떤 분위기인가
그리고 모든 영상 프롬프트에 부정 조건을 자동으로 넣도록 바꿨습니다.
No text, no subtitles, no watermark, no distorted letters
이 한 줄이 생각보다 품질 안정화에 큰 역할을 했습니다.
C. 검수 모드 추가
생성형 영상은 한 번 호출할 때마다 비용이 나가기 때문에, 바로 API를 때리는 방식은 비효율적이었습니다.
그래서 에이전트에 아래와 같은 검수 모드를 넣었습니다.
--mode review
이 모드에서는 사용자가 아래 내용을 먼저 확인할 수 있게 했습니다.
시나리오가 자연스러운지
프롬프트가 과한지/부족한지
바로 생성해도 되는지
이 덕분에 불필요한 API 호출과 비용 낭비를 꽤 줄일 수 있었습니다.
4) 시행착오와 수정 과정
❌ 문제 1. Fal.ai 및 Google AI Studio API 호출 오류 (401/404)
증상
이미지 생성 요청 시 인증 에러 발생
특정 모델명을 찾을 수 없다는 응답 발생
원인
config.yaml과.env의 API 키 매핑이 서로 달랐음Gemini 엔드포인트 버전 처리에서 혼선이 있었음
초기 코드에 하드코딩된 모델명이 실제 제공 모델명과 맞지 않았음
수정
.env템플릿을 표준화에이전트 스크립트가 환경변수 기준으로 모델명을 읽도록 수정
안정적인 모델명 기준으로 호출하도록 정리
예를 들어 모델 지정과 환경변수 처리를 아래처럼 더 명확하게 가져갔습니다.
const model = process.env.GEMINI_MODEL ?? "models/gemini-1.5-flash";
const apiKey = process.env.GEMINI_API_KEY;
if (!apiKey) {
throw new Error("GEMINI_API_KEY is missing");
}
배운 점
생성형 API는 기능보다 먼저 환경변수 체계와 모델명 관리 전략이 중요했습니다.
특히 여러 공급자를 함께 쓰는 경우,
.env.example표준화가 거의 필수였습니다.
❌ 문제 2. 이미지→영상(I2V) 품질 저하
증상
이미지가 거의 움직이지 않음
금붕어 외형이 씬마다 불규칙하게 변함
영상 내에 깨진 텍스트가 섞여 나옴
원인
프롬프트가 너무 복잡했음
부정 프롬프트가 누락됨
캐릭터 중심 정보보다 주변 묘사가 많았음
수정
prompt-engineer로직을 3요소 구조로 단순화모든 영상 프롬프트에 부정 프롬프트 자동 삽입
캐릭터 기준 묘사를 우선순위로 재배치
프롬프트 예시는 아래처럼 정리했습니다.
subject: "glasses-wearing goldfish"
action: "studying intensely at a desk"
environment: "cozy study room, warm lamp light"
negative_prompt: "No text, no subtitles, no watermark, no distorted letters"
배운 점
영상 생성에서는 “많이 쓰는 것”보다 핵심만 정확히 쓰는 것이 더 중요했습니다.
특히 캐릭터 중심 작업에서는 프롬프트의 길이보다 우선순위 설계가 결과를 좌우했습니다.
❌ 문제 3. Remotion 렌더링 시 오디오 코덱 오류
증상
생성된 MP4가 일부 기본 플레이어에서 소리가 나지 않음
원인
렌더링 시 기본 오디오 코덱 조합이 재생 환경과 맞지 않는 경우가 있었음
수정
render.ts의renderMedia옵션에서 오디오 코덱을 명시적으로 지정
await renderMedia({
composition,
serveUrl,
codec: "h264",
audioCodec: "aac",
outputLocation,
inputProps,
});
배운 점
렌더링 완료 자체보다 더 중요한 것은 최종 파일의 재생 호환성이었습니다.
특히 전달용 산출물이라면 코덱을 “기본값에 맡기지 않는 습관”이 필요했습니다.
결과와 배운 점
산출물
이번 작업으로 아래 결과물을 만들었습니다.
scenario.yaml: 금붕어 공부 시나리오 (3씬)prompts.yaml: LTX-2.3 최적화 프롬프트 3세트goldfish_study_final.mp4: 최종 영상 파일길이: 약 28초
용량: 약 26.7MB
작업 요약
Scene 1: 안경 쓴 금붕어가 책상 앞에서 열공하는 모습 (이미지 → 8초 영상)
Scene 2: 3초 기억력의 한계로 고뇌하는 클로즈업 (이미지 → 8초 영상)
Scene 3: 시험지를 보고 멍해진 모습 (이미지 → 12초 영상)
이번 작업에서 특히 좋았던 점
신규 비디오 엔진을 실제 파이프라인에 붙여서 검증할 수 있었음
캐릭터 일관성을 단순 감각이 아니라 시스템 설계 문제로 다뤄볼 수 있었음
프롬프트 엔지니어링이 결과 품질에 직접 연결된다는 걸 체감했음
Remotion 단계에서 “보이는 결과”뿐 아니라 “배포 가능한 결과”까지 확인할 수 있었음
아쉬웠던 점
레퍼런스 이미지 생성이 아직 수동 단계에 가까움
BGM이 빠져 있어 감정선이 조금 약함
검수 모드는 잘 작동했지만, 추후에는 더 자동화할 여지가 많음
다음 계획
1. 캐릭터 자동 생성
world-builder 완료 직후, 주인공 금붕어의 정면/전신 레퍼런스 이미지를 자동으로 생성하는 흐름을 추가할 예정입니다.
이게 붙으면:
캐릭터 설계 → 레퍼런스 확보 → 프롬프트 반영
이 과정을 훨씬 매끄럽게 자동화할 수 있을 것 같습니다.
2. BGM 믹싱 고도화
현재는 나레이션 중심이기 때문에 감정 밀도가 조금 약합니다.
다음 단계에서는 상황에 맞는 배경음악을 붙여서,
공부 장면에는 집중감
고뇌 장면에는 긴장감
멍해지는 장면에는 코믹한 여운
이런 리듬을 더 살려볼 생각입니다.
정리 한마디
이번 작업은 귀여운 금붕어 숏폼을 만든 기록이기도 하지만, 동시에 생성형 영상 파이프라인을 실제 운영 가능한 구조로 다듬어간 과정이었습니다. 🐠
특히 아래 3가지는 꽤 선명하게 남았습니다.
API 연동은 기능보다 환경 설정이 먼저다
프롬프트는 길이보다 구조가 중요하다
최종 렌더링은 생성 성공보다 재생 호환성이 더 중요하다
다음에는 캐릭터 자동 생성과 BGM까지 붙여서, 더 완성도 있는 에피소드 제작 흐름으로 확장해보려고 합니다. 😄
도움 받은 글
fal.ai LTX-2.3 Image to Video 문서
Remotion
renderMedia()문서Google AI for Developers Gemini API 모델/레퍼런스 문서
ElevenLabs Music 문서
첨부/캡처 표시 예시
[첨부 파일]scenario.yaml
[첨부 파일]prompts.yaml
[첨부 파일]goldfish_study_final.mp4
댓글 1개
로그인하고 댓글을 작성하세요