Comfy Director은(는) 무엇을 하나요?
스토리가 먼저, 영상은 그 다음입니다. 다중 샷 AI 영화는 렌더링이 아니라 편집에서 실패합니다. 아무리 각 클립이 훌륭하더라도, 서로 인과 관계를 형성하지 않는 비트는 스토리라는 옷을 입은 몽타주로밖에 읽히지 않습니다.
필수 배경 지식: comfy 스킬 (CLI 조작법 및 재사용 가능한 다단계 그래프를 위한 레시피 경로 — apply/capture/foreach)에 대한 이해. 작업 실패 시 comfy-debug를 사용하세요.
작업 순서
- 컨셉 — 낯선 사람이 다시 말할 수 있는 하나의 아이디어.
- 시나리오 — 파이프라인을 만지기 전에 작성합니다. 먼저 사용자에게 전달하세요.
- 샷 리스트 — 각 장면을 연속성 전략에 매핑합니다.
- 오디오 디자인 — 영상이 아닌 시나리오의 감정적 비트에 맞춰 설계합니다.
- 프로덕션 → 컨폼 → QC.
2단계를 건너뛰고 바로 렌더링으로 넘어가는 것이 컷이 망가지는 가장 큰 원인입니다.
시나리오 규칙
- 카메라가 따라갈 수 있는 한 명의 주인공. 모든 샷에서 알아볼 수 있어야 합니다.
- 인과 관계 테스트: 모든 컷은 "그리고 그 때문에..."라는 질문에 답해야 합니다 — 절대 "그리고 다른 곳에서는..."이 아니어야 합니다. 비트의 순서를 바꿔도 아무 문제가 없다면, 그것은 아직 스토리가 아닙니다.
- 낯선 사람 테스트: 아무 맥락도 모르는 사람이 줄거리를 두 문장으로 다시 말할 수 있어야 합니다 ("X는 A를 원했고, B가 그것을 막았으며, 그래서 C를 하고, 결국 D가 되었다").
- 비트에는 목표 런타임에 맞춰 합산되는 타이밍이 포함됩니다.
컨셉 규칙
- 브랜드/제품은 언급되지 않고 느껴져야 합니다: 그 철학을 논증하세요; 화면에 인용된 내부 농담이나 커뮤니티 전설은 팬 서비스로 읽힙니다.
- 클라이언트가 언급한 기술 ("스타일 전환", 모델 이름)은 의무가 아닌 영감입니다 — 아이디어가 필요로 할 때만 사용하세요. 기술을 중심으로 영화를 만드는 것은 감독이 아니라 벤더의 특징입니다.
- 이상함은 축적되어야 합니다: 주제 AND 대상 AND 배경이 모두 놀라워야 합니다. 평범한 프레임에 하나의 이상한 요소는 장식에 불과합니다.
샷 프롬프팅
- 포토리얼 샷: 실사 촬영 감독 / 필름 스톡 언어만 사용하세요. 포토리얼 프롬프트에 일러스트레이터/애니메이션/만화 관련 이름 하나만 들어가도 결과물이 망가집니다. 일러스트 참조는 의도적으로 스타일화된 샷에만 속합니다.
- 모션 프롬프트는 장면 안에 있는 것이 아니라 장면이 어떻게 움직이는지 설명합니다 (
comfy스킬 비디오 주의사항 — t2v/i2v 모델 함정, SaveVideo, fps 연결 참조).
연속성 도구 상자
샷별로, 대략적인 강도 순서로 선택합니다:
| 전략 | 사용처 |
|---|---|
| 각 샷의 i2v 그래프에 캐릭터/장소 참조 이미지 전달 | 주인공 정체성 |
| 참조 이미지 편집을 통한 동일 정체성, 새로운 프레이밍 (하나의 히어로 → N 앵글) | 컷 전체에서 알아볼 수 있는 얼굴 |
| 샷 N의 키프레임이 샷 N+1을 시드 (이미지 참조 리스타일 또는 엔드 프레임) | 연속적인 액션 |
| 재생되는 정확한 오디오를 입력으로 받는 토킹 헤드(KlingAvatar), 동일한 립싱크 헤드의 다른 앵글 간 컷 — VO 위에 B-roll 절대 금지 | 실제처럼 느껴져야 하는 대화 |
| 모든 프롬프트에서 동일한 의상/조명/렌즈 라인을 그대로 반복 | 저렴한 기본 접착제 |
샷이 연속성을 유지할 수 없다면, 그 샷이 필요하지 않도록 시나리오를 다시 작성하세요 — 끊어진 부분을 그냥 넘기지 마세요.
오디오
- 스코어 = 스토리 전환점에서 결합된 짧은 디자인 큐; 하나의 긴 생성물은 다이내믹 아크를 따르지 않습니다 (정점이 필요한 정확한 지점에서 역전됩니다).
- 믹싱 전에 계산을 통해 VO 배치: 스템 지속 시간 대 비트 윈도우.
- VO 아래에서 스코어를 덕킹; 최종 믹스를 라우드니스 정규화 (~-14 LUFS).
- 대화는 설계상 립싱크되어야 합니다. 재생되는 정확한 오디오로 입을 구동하고(KlingAvatar
sound_file), 동일한 립싱크 헤드의 다른 앵글 간 컷 — 연속적인 VO 위의 B-roll은 몽타주로 읽히며, i2v가 만들어낸 입은 움직입니다. "립싱크 안 됨 / 실제 같지 않음"은 전형적인 거절 사유입니다. (그래프 내에서 오디오 생성 — 클라우드LoadAudio는 업로드를 볼 수 없음;comfy오디오 주의사항 참조.) - 비싼 렌더 전에 귀로 목소리와 캐스팅을 확정하세요. 목소리/억양은 주관적이며 파형으로 읽을 수 없습니다 — 한 줄의 저렴한 후보 TTS 테이크 몇 개를 렌더링하고, 사용자가 선택한 후, 그 승리자를 비용이 많이 들고
transient_auth에 취약한 아바타/립싱크 샷에 적용하세요. 거절된 목소리로 모든 샷을 다시 렌더링하는 것은 피할 수 있는 낭비입니다. 주인공의 외모도 마찬가지입니다: 모든 샷을 생성하기 전에 히어로 스틸을 승인받으세요. - 믹스를 믿음이 아닌 측정으로 검증하세요. 렌더를 들을 수 없습니다 — 각 섹션에
ffmpeg volumedetect를 실행하세요: "데드 에어" 엔딩이나 묻힌 라인은 -91dB 근처의 윈도우로 나타납니다. 완료를 선언하기 전에 모든 비트가 레벨에 존재하는지 확인하세요.
프로덕션 운영
-
모든 제출물(샷, 키프레임, 오디오 스템, 재제출)을 제출 시점에
job_ids.txt에 추가하세요 (<job_name> <prompt_id>). 추가 전용: 재제출은 새 줄을 얻습니다(shot_s3_resubmit <id>), 덮어쓰지 않으므로 죽은 prompt_id는 샷 정체성을 유지합니다. -
프로젝트 루트에
LOG.md를 유지하세요: 세션 종료가 아닌 이벤트 발생 시점에 작성되는 추가 전용 이벤트 로그 — 제출/재제출당 한 줄(+실패 코드), QC 판정당 한 줄(+재시도 사유), 그리고 이전 작업을 무효화하는 결정(리캐스트, 프롬프트 변경, 어떤 참조 이미지나 스템이 이제 표준인지)당 한 줄. 프레임별 발견 사항은qc/QC_LOG.md에 저장;LOG.md는 이를 인덱싱합니다.17:36 ERROR shot_s3 transient_auth -> RESUBMIT 27dd45b4 (동일 워크플로우, 재로그인 없음) 17:44 QC shot_s2 FAIL background-crawl -> 재시도 (동일 키프레임, 새 시드); 2차 실패 시 비트 재편집 17:50 DECISION 주인공 리캐스트 -> ref_ray.png가 표준; vo2, vo6은 오래됨, 재생성 -
복구 계약: 기억이 전혀 없는 후속 에이전트가 디스크만으로 작업을 재개할 수 있어야 합니다:
LOG.md(무슨 일이 있었고 왜) →job_ids.txt(어떤 작업) →comfy jobs status(작업 상태).LOG.md에 없는 결정은 세션과 함께 사라집니다 — 완료되었지만 오래된 작업(예: 이전 캐스팅의 VO 스템)은 그렇지 않으면 양호한 작업과 동일하게 보입니다. -
다운로드한 모든 클립을 ffprobe로 검사합니다; 사양에 맞지 않는 지속 시간/치수는 컨폼 전에 정규화합니다.
-
컷팅 전에 모든 클립의 한 프레임을 시나리오와 대조하여 QC합니다.
-
정확한 런타임: ffmpeg로 비트별로 트림/리타임, 희망에 맡기지 마세요.
일반적인 실수 (각각 실제 컷을 망가뜨렸습니다)
| 실수 | 결과 |
|---|---|
| 시나리오 전에 렌더링 | "서로 인과 관계가 없는 여덟 개의 멋진 비트" |
| 화면에 커뮤니티 전설 표시 | "너무 직접적, 팬 서비스" |
| 클라이언트가 언급한 기술을 컨셉으로 사용 | "아이디어를 얻으라고 말한 것뿐인데" |
| 연속성 계획 없음 | 컷마다 주인공 얼굴이 바뀜 |
| 하나의 40초 음악 생성 | 클라이맥스에서 아크가 역전됨 |
| 연속적인 VO 위에 B-roll | "몽타주 같음 / 오디오가 일치하지 않음" |
| 사용자가 듣기 전에 목소리를 N개 샷에 적용 | 거절 시 모든 것을 다시 렌더링 |
| 토킹 헤드 클립을 단순 이어붙이기 | 목소리 동기화가 어긋남 (아바타가 비디오를 오디오보다 길게 패딩) |