Taste Application
파이프라인의 후반부입니다. taste-distillation은 참조 영상을 측정하여 스타일 팩으로 만듭니다. 이 단계에서는 해당 팩을 기반으로 생성하고 결과를 편집합니다.
실행 및 전달 계약
원본 구현은 scripts/ 디렉토리에 포함되어 있습니다. 별도의 ito-video 체크아웃이 필요하지 않습니다. 로컬 처리를 위해 scripts/requirements.txt를 설치하세요. 제공자(provider) 실행을 위해서만 scripts/requirements-live.txt를 설치하세요. 라이브 업로드, 제출 및 다운로드에는 자격 증명 외에 명시적인 TASTE_FORGE_ALLOW_LIVE=1 설정이 필요합니다. 사용자의 승인된 실행에 대해서만 설정하세요. --dry-run은 자격 증명 없이도 작동하며 레이블이 지정된 플레이스홀더를 생성합니다. 모호한 제공자 타임아웃은 새로운 유료 작업으로 재시도되지 않습니다. 제공자 요청을 검사한 후 다른 제출이 정당한지 결정하세요.
기존 완료된 촬영본을 제공자 호출 없이 사용합니다:
python scripts/pipeline.py --genre example --root stylepacks \
--takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
--out out/review-v1.mp4
--duration은 최선의 노력 케이던스 목표이며 정확한 실행 시간이 아닙니다. 완성된 샷은 더 짧거나 긴 편집을 생성할 수 있습니다. 어셈블러는 클립을 복제하거나 패딩을 추가하여 목표를 맞추지 않습니다. 출력 매니페스트에는 실제 duration과 함께 duration_contract가 포함되어 요청된 초와 실제 초, 부족분, 초과분, 그리고 cadence_target 정책을 기록합니다. 최소 한 프레임 이상의 차이가 있으면 명시적으로 경고합니다. 정확한 길이 모드는 제공되지 않습니다. 정확한 실행 시간이 필요한 경우, 영수증을 검사하고 전달 전에 컷을 수정하거나 거부하세요.
파이프라인은 각 실행의 그레이딩된 샷 파일을 보관합니다. 편집 가능한 FCPXML 및 EDL이 이를 참조하기 때문입니다. 출력 충돌을 거부하고 타임라인 내보내기 실패를 보고합니다. 완료된 렌더링은 저장된 편집기 프로젝트나 창작 승인이 아닙니다. 라이브 편집 전후에 소스 자산과 버전 관리된 프로젝트 체크포인트를 보존하세요. 저장된 경로와 다이제스트를 메모리 내 타임라인 영수증과 별도로 기록하세요.
클론 준비된 Fal 그래프와 오프라인 입력 컴파일러는 workflows/README.md에 문서화되어 있습니다. 제출 전에 브리프와 스타일 방향을 컴파일하세요. 연결 해제된 스키마 필드가 모델 프롬프트에 영향을 미친다고 가정하지 마세요. 유료 실행 전에 현재 엔드포인트 필드를 실제 제공자에 대해 검증하세요.
Blender의 경우 전체 텍스처가 적용된 소스 GLB를 사용하세요. 리토폴로지는 별도로 명명된 파생물이며 해당 소스를 대체하지 않습니다. blender_prop.py는 명시적인 --width 1920 --height 1080 --fps 30 --receipt receipt.json을 지원하며 팩에서 파생된 림 조명과 재질 텍스처를 보존합니다. 장면 저장은 렌더링과 별개입니다. 영수증의 상태와 패킹된 이미지를 검사하세요.
Resolve 오버레이의 경우, 명시적으로 선택된 버전 관리된 대상에서 주입된 객체와 함께 taste.resolve.apply_placements를 사용하세요. source_end_mode를 해당 호스트에서 확인된 관례에 맞게 설정하세요. Resolve 버전 간에 포괄적인 소스 끝을 가정하지 마세요. 어댑터는 보존된 트랙 위에 중복 효과를 할당하고 모든 배치를 즉시 그리고 모든 추가 후에 다시 확인합니다. 복합 정수는 설치된 API와 일치해야 합니다. 확인된 Studio 21 호스트의 경우 Screen은 5이며, 역사적인 빌더의 잘못된 22가 아닙니다. 영수증은 메모리 내 배치만 증명합니다. 프로젝트를 저장하고, 체크포인트를 확인한 다음, 정확한 렌더링 출력을 검사한 후 전달을 보고하세요.
활성화 시점
- "이 스타일로 비디오를 만들어 줘" / "팩을 적용해 줘" / "이 푸티지를 보완해 줘"
- 생성된 클립을 실제 편집 리듬이 있는 것으로 조립하기
- 룩에서 3D 소품을 만들어 비디오에 다시 통합하기
- 완성된 작품이 실제로 참조와 일치하는지 확인하기
작업 분담
모델은 콘텐츠, 모션, 프레이밍 및 조명 구조를 제공합니다. 팩은 색상과 리듬을 제공합니다. 이는 스타일적 선호도가 아니라 측정된 것입니다. 자세한 내용은 taste-distillation을 참조하세요. 실질적인 결과:
- 생성 프롬프트에는 색상 언어가 전혀 포함되지 않습니다. "색상: 없음. 중립 렌더링. 그레이딩은 이후에 적용됩니다." 를 추가하세요.
- 두 개의 별도 플래그를 유지하세요:
--brief(무슨 일이 일어나는지: 주제, 동작, 장소)와--style-steer(어떻게 보이는지). 이들을 병합하면 스타일 단어가 장면으로 누출되고("틸"이 틸 색상 객체가 됨) 주제 단어가 그레이드로 누출됩니다. - 모델은 로컬에서 확인 가능한 규칙에 전역 규칙보다 훨씬 잘 반응합니다. "배경은 순수 검정이고 조명이 없으며, 주제는 흰색으로 날아감"은 작동하지만 "극한 대비"는 작동하지 않습니다.
샷이 아닌 촬영본(TAKE) 생성
"케이던스 맞추기"의 명백한 해석은 샷당 하나의 생성입니다. 이는 경제적으로 터무니없습니다. 4초 바닥이 있는 엔드포인트에 대해 평균 0.78초/샷인 참조는 10초짜리 작품을 12번 호출, 사용된 10초를 위해 48초 생성(21% 효율) 으로 만들고, 연속적으로 읽혀야 할 열두 개의 관련 없는 클립을 이어 붙입니다.
편집자는 더 긴 촬영본을 굴리고 그 안에서 컷합니다. 샷을 ~5초 촬영본으로 그룹화: 3번 호출, 13초 생성, 77% 효율, 그리고 동일한 생성에서 나왔기 때문에 실제로 서로에게 속하는 연속적인 샷을 얻습니다.
원하는 모양을 모델에 알려주지 않으면 느린 고정된 푸시를 렌더링하고 그 안의 여섯 컷이 말더듬으로 읽힙니다:
"내부에 하드 컷이 없는 하나의 연속 테이크로 촬영되었습니다. 편집에서 약 0.8초씩 6개 조각으로 잘릴 예정이므로 프레이밍, 주제 및 조명이 전체적으로 계속 변경되어야 합니다. 어떤 0.8초 윈도우라도 그 자체로 하나의 샷으로 서 있을 수 있어야 합니다."
컷팅 규칙
- 스트림 복사하지 말고 다시 인코딩하세요. 스트림 복사는 키프레임에서만 컷하며, 0.78초에서 샷 길이는 모든 경계를 가장 가까운 GOP로 반올림하여 파이프라인이 존재하는 정확한 것을 파괴합니다.
- 기존 푸티지를 보완할 때는 자체 샷 경계를 사용하세요. 기본 비디오를 연속 조각으로 슬라이스하고 순서대로 재생하면 원본을 재조립할 뿐입니다. 모든 "컷"은 샷 중간에 떨어져 보이지 않습니다. 측정 결과, 20샷 어셈블리에서 감지된 컷은 12개에 불과했습니다. 실제 경계를 감지하고 매 N번째를 취하여 연속적인 선택이 불연속적임을 보장하세요. 이렇게 하면 컷 측정값이 0.78초 목표에 대해 1.29초에서 0.83초로 이동했습니다.
- 참조 분포에서 샷 길이를 샘플링하고 평균에서 샘플링하지 마세요. 그래야 컷이 균일한 클립으로 평탄화되지 않고 리듬 변화를 상속받습니다.
그레이딩 규칙
- 클립이 있을 때는 베이크된 LUT보다 직접 측정이 낫습니다. 클립을 측정하고, L* CDF를 일치시키고, 영역 크로마를 적용하세요.
grade_clip_direct는 MAE 1.58, 대비 34.0(목표 34.7)에 도달했습니다. - 클립의 히스토그램이 참조와 다를 때는 CDF 일치 대신 앵커를 사용하세요. 68% 검정 생성 클립을 복잡한 참조 히스토그램에 강제로 맞추면 전체 배경이 검정에서 들어 올려졌습니다. 배경 보존은 CDF 26.0% 대 앵커 69.0%로 떨어졌으며, MAE와 대비는 여전히 우수해 보였습니다. 기본적으로 앵커 톤을 사용하세요.
- 배치 크기가 중요합니다. 한 번에 48프레임을 그레이딩하면 프로세스가 OOM으로 종료되었습니다. 6프레임은 안전합니다.
복구된 fal 플랫폼 동작
이러한 관찰과 엔드포인트 예제는 복구된 워크플로우에서 비롯되었습니다. 현재 엔드포인트 메타데이터를 다시 확인하세요. 이는 모든 미래 제공자 버전에 대한 보장이 아닙니다. 번들로 제공되는 그래프 템플릿은 별도로 확인된 워크플로우 입력을 기록하며, 명시적인 생성 오디오 제어를 포함합니다.
이를 발견하는 데 실제 시간이 소요됩니다. 그래프를 설계하기 전에 확인하세요.
| 제한 | 세부 사항 |
|---|---|
| 3D 렌더러 없음 | fal에는 image-to-3d, text-to-3d, 3d-to-3d만 있습니다. 모든 3d-to-3d 엔드포인트는 다른 메시를 출력합니다. 3d-to-image/3d-to-video 카테고리가 없으므로, 민팅된 GLB는 fal 비디오 그래프에 재진입할 수 없습니다. 로컬에서 렌더링한 다음 fal-ai/ffmpeg-api/images-to-video를 사용하세요. |
| compose는 오버레이 불가 | fal-ai/ffmpeg-api/compose는 두 번째 트랙을 "Multiple video tracks are not supported" 오류로 거부합니다. image 트랙도 비디오 트랙으로 간주합니다. 하나의 비디오 트랙만 시퀀싱합니다. ffmpeg로 로컬에서 합성하세요. |
| compose 키프레임은 밀리초 | 응답에 그렇게 명시되어 있지 않습니다. 초 단위로 제출된 실행은 수락되고 1000배 짧은 비디오를 반환합니다. |
| extract-frame은 처음/중간/마지막만 제공 | 임의 타임스탬프 없음. 세 개를 세 개의 개별 조건 이미지로 사용하세요. |
| DAG에 루프, 문자열 연결 없음 | 샷별 팬아웃은 노드별로 작성하거나 로컬로 유지해야 합니다. |
| Kling 3.0에는 reference-to-video 없음 | v3 라인은 텍스트/이미지/모션 제어 전용입니다. reference-to-video는 o3 라인에 있습니다: fal-ai/kling-video/o3/pro/reference-to-video. |
| 접두사는 균일하지 않음 | bytedance/*, tripo3d/*, meshy/*, minimax/*, openai/*에는 fal-ai/ 접두사가 없습니다. kling-video, veo3.1, flux-*, hunyuan-3d, ffmpeg-api에는 있습니다. |
엔드포인트 선택
| 슬롯 | 최고 | 가치 대안 |
|---|---|---|
| reference→video | bytedance/seedance-2.5/reference-to-video (~$0.473/초 @720p) | fal-ai/kling-video/o3/pro/reference-to-video (~$0.112/초) |
| image→3D | fal-ai/hunyuan-3d/v3.1/pro/image-to-3d ($0.375, 최대 8뷰) | tripo3d/h3.1/image-to-3d ($0.20) |
| text→3D | fal-ai/hunyuan-3d/v3.1/pro/text-to-3d | tripo3d/h3.1/text-to-3d |
| 리토폴로지 | fal-ai/hunyuan-3d/v3.1/smart-topology ($0.75) | tripo3d/tripo/remesh (~75배 저렴) |
| 파트 분할 | fal-ai/hunyuan-3d/v3.1/part (FBX만) | tripo3d/tripo/segment |
| text→image | fal-ai/nano-banana-pro ($0.15 고정) | fal-ai/flux-2-pro ($0.03/MP) |
Seedance는 동일한 5초에 대해 Kling o3보다 약 4배 비쌉니다. 다중 참조 충실도(최대 50개의 혼합 이미지/비디오/오디오 참조)에서 그 가치를 발휘하며, 단일 스틸 이미지로 조건화할 때는 그 가치를 발휘하지 않습니다.
모델 ID와 가격은 변동됩니다. 어떤 것을 약속하기 전에 fal.ai/models에서 확인하세요.
3D 브랜치
python mint3d.py --genre <이름> --from-stills 4 --retopo --render
python mint3d.py --genre <이름> --prompt "금이 간 크롬 바이저" --render
- 먼저 깨끗한 플레이트를 생성하세요. 참조 스틸에서 가져오지 마세요. 엔드포인트의 명시된 입력 요구 사항은 단순 배경, 단일 객체, 객체가 프레임의 50% 이상입니다. 참조 릴은 그 반대입니다(콜라주, 와이드 샷, 여러 주제, 번인 그래픽). 이는 조각난 노이즈를 생성합니다. 텍스트 → 단일 객체 플레이트 → 메시는 약 $0.15 추가 비용이 들며, 사용 가능한 메시와 버려진 메시의 차이를 만듭니다.
- 다중 뷰는 각도별 명명된 필드이며, 목록이 아닙니다.
input_image_url(전면, 필수), 그 다음back_image_url,left_image_url,right_image_url,left_front_image_url,right_front_image_url,top_image_url,bottom_image_url.input_image_urls나multi_view플래그는 없습니다. 이를 임의로 만들면 모든 민트가 작동하는 것처럼 보이면서 단일 뷰로 저하됩니다. 잘못된 각도 레이블은 뷰를 생략하는 것보다 더 나쁩니다. 모델이 이를 신뢰하기 때문입니다. - GLB를 위치가 아닌 키로 주소 지정하세요. 응답에는
thumbnailPNG와model_glb와 함께model_urls블록이 포함됩니다. 첫 번째 URL을 취하는 것은 키가 재정렬될 때까지만 작동하며, 미리보기 PNG는 잘 다운로드됩니다. Blender가 열기를 거부할 때까지 아무것도 실패하지 않습니다. - PBR 맵을 요청하세요. 그렇지 않으면 메시가 페인트된 판지처럼 조명됩니다.
- 리토폴로지를 수행하세요. 누군가 편집하거나 리깅할 경우를 대비해서입니다. 생성된 메시는 밀도가 높고 혼란스럽습니다.
- 로컬에서 렌더링하여 루프를 닫으세요. 턴테이블이 프레임이 되면 그것은 푸티지이며, 모든 다운스트림 단계는 이미 푸티지를 처리합니다. 그레이딩하고, 컷하고, 요소로 스크린하거나 조건 참조로 업로드하세요. 바이너리가 PATH에 있을 때 Blender를 사용하세요. 종속성이 적은 소프트웨어 래스터라이저를 기본값으로 유지하세요. 헤드리스 GL 컨텍스트는 컨테이너에서 가장 흔히 누락되는 것이며, 워크스테이션에서만 작동하는 렌더러는 파이프라인의 일부가 아닙니다.
확인하고 믿으세요
모든 다른 단계는 결과를 주장합니다. 확인하고, 모멘트뿐만 아니라 분포 형태를 확인하세요:
background— L*10 미만 프레임 비율과 팩의 수치 비교. 소스 클립이 아닌 참조와 비교하세요. 68% 검정인 생성 소스는 24–55% 대역의 어떤 참조보다 더 검기 때문에, "소스의 검정을 보존하라"는 잘못된 것을 요구하며 들어 올려진 그레이드를 마찬가지로 용서합니다.chroma_mae— 영역별 a*/b* 오차, 중앙값 사용(팩의 대상이 측정된 방식과 일치; 여기서 평균을 사용하면 왜도에 민감한 통계를 강건한 통계와 비교하여 정의 불일치를 오류로 보고합니다).contrast/black_point/white_pointbanding— 점유된 L* 히스토그램 빈 사이의 빈 빈. 총 빈 빈 수를 세는 것은 작동하지 않습니다. 정당하게 어두운 클립은 빈 하이라이트 빈을 가집니다.cadence— 검출된 평균 샷 길이와 참조 비교.
단위 함정을 주의하세요: OpenCV는 dtype에 따라 Lab 관례를 변경합니다. float32에서 L*는 0–100이고 a*/b*는 부호가 있습니다. uint8에서 L*는 0–255이고 a*/b*는 +128 바이어스됩니다. 혼합하면 수백 단위의 크로마 오류가 보고됩니다.
전체 체인
python pipeline.py --genre <이름> --refs a.mov b.mov \
--brief "어떤 일이 일어나는지" --duration 12 \
--base-video existing.mp4 --out out/FINAL.mp4
mint → distill → (mint3d) → apply → forge → verify. 1–3단계는 캐시되므로 브리프를 반복해도 아무것도 다시 측정하지 않습니다. --dry-run은 모든 네트워크 호출을 스텁합니다. 계획, 프롬프트, 트랙 레이아웃 및 매니페스트는 모두 여전히 실행됩니다.
안티 패턴
| 금지 사항 | 이유 |
|---|---|
| 샷당 하나의 생성 | 21% 효율, 12개의 관련 없는 클립 |
| 프롬프트에 색상 넣기 | 측정 결과 작동하지 않음; LUT가 원하는 중립 베이스에서 멀어짐 |
| 컷 스트림 복사 | 키프레임 전용 경계가 1초 미만 리듬을 파괴 |
| 기본 비디오 연속적으로 컷 | 원본 재조립; 모든 컷이 보이지 않음 |
| compose가 오버레이한다고 믿기 | 불가능; 두 번째 트랙을 거부함 |
| compose에 초 보내기 | 조용히 1000배 짧아짐 |
| MAE만으로 배송 | 배경 공유 확인 추가 |
차용된 푸티지는 캡처 앱의 UI를 운반합니다
전달된 컷에서 발견된 가장 심각한 결함: 완성된 비디오가 다른 사람의 좋아요 버튼, 조회수 카운터 및 댓글 버블을 그대로 담고 있었습니다. 기본...