THE LAST SIGNAL: MacBook M5 Max 128GB에서 완전히 로컬로 제작된 46초 분량의 SF 트레일러, 전체 파이프라인
요약
작성자는 MacBook Pro (Apple M5 Max, 128GB)만을 사용하여 SF 트레일러 제작의 전 과정을 공개했습니다. 클라우드나 API 호출 없이 스토리 구상부터 Blender 모델링, Z-Image-Turbo를 이용한 스틸 이미지 생성, LTX-2.5 증류본을 활용한 영상 초안 및 품질 검토까지 모든 단계를 로컬에서 처리했습니다. 이는 고성능 하드웨어와 AI/렌더링 툴의 통합적인 워크플로우를 보여줍니다.
핵심 포인트
- MacBook M5 Max만을 사용하여 트레일러 제작 전 과정을 완료함.
- 클라우드 렌더링이나 외부 API 호출 없이 모든 작업을 로컬에서 처리함.
- 메모리 관리를 위해 모델을 단계별로 로드하고 언로드하는 방식을 사용함.
- Blender Cycles on Metal, Z-Image-Turbo 등 다양한 전문 툴이 활용됨.
새벽 2시에 한 줄짜리 아이디어로 시작하여 그날 오후 5시 38분에 완성된 트레일러를 만들었습니다. 모든 프레임, 음성 및 사운드는 내 MacBook에서 제작되었으며, 클라우드에 아무것도 렌더링하지 않았고, 전체 파이프라인은 실제 시계 시간과 중단 시간을 포함하여 아래에 정리했습니다.
하드웨어: MacBook Pro (Mac17,6), Apple M5 Max, 128GB 통합 메모리(unified memory), macOS 27.2. 그 외에는 아무것도 사용하지 않았습니다. 클라우드 렌더링도, API 호출도, 구독 서비스도 없었습니다.
메모리 규칙: 한 번에 하나의 모델만 메모리에 로드합니다. 각 단계는 자신의 모델을 로드하고, 모든 작업을 배치(batch) 처리한 후 언로드하며 다음 단계가 시작됩니다. 무거운 작업은 먼저 메모리 임대(memory lease)를 하고, Song Forge 서버에 고객 작업이 실행 중이면 기다립니다.
만들어진 순서대로 과정 (시간은 10/31의 실제 시계 시간):
스토리: 오전 2:00부터 2:52까지. 채팅을 통해 전제와 10비트 트레일러 스크립트를 작성한 후, v3 스크립트로 더 빠르게 편집했습니다 (약 40개 컷, 약 50초) 그리고 아무것도 렌더링하기 전에 확정했습니다.
샷 리스트: 오전 3:08부터 3:20까지 (12분). 배는 Blender 5.1.1을 사용했으며, Cycles on Metal로 작업했습니다. 오전 3:20부터 4:27까지 (67분). 스크립트로 모델링한 절차적 도시 크기의 우주선이었습니다. 히어로 스틸 이미지 7개와 카메라 애니메이션 2개(그림자가 지면을 쓸고 지나가는 도착 플라이오버)가 포함되었습니다. Cycles 스틸 이미지는 11초에서 41초가 걸렸고, 볼륨메트릭(volumetric) 작업은 6분이 걸렸으며, 애니메이션은 프레임당 48 샘플로 약 12초가 소요되었습니다.
중단/대기: 오전 4:32부터 4:48까지 (16분). 내 메모리 가드(memory guard)가 Qwen-Image를 거부했습니다 (48GB 필요, 다른 작업이 메모리를 점유하고 있어 23GB만 여유 공간이었음). 그래서 강제하기보다 이미지 모델을 변경하여 사용했습니다.
스틸 이미지: Z-Image-Turbo (6B, bf16, 9단계, MPS의 diffusers)를 사용하여 오전 4:50부터 5:45까지 (55분). 캐릭터 캐논(canon)과 모든 시작 프레임에 사용되었습니다. 두 부분으로 나누어 실행하여 맞췄습니다: 텍스트 인코더가 모든 프롬프트를 인코딩하고 언로드한 다음, 트랜스포머와 VAE가 렌더링을 담당했습니다. 생명체의 레이아웃은 MattPaint (나의 자체 브라우저 페인트 엔진)에서 그린 그림으로 시작하여 img2img를 0.82에서 0.9로 거치며 포토리얼하게 변환되었습니다. Blender 우주선 프레임에는 가벼운 img2img 폴리싱(0.42)을 적용했으며, 그랩 샷(grab shot)에 더 많은 작업(0.6에서 0.72)을 했습니다. 로컬 비전 모델이 움직이기 전에 스틸 이미지를 판정했습니다.
Previs, LTX-2.5 증류본(MLX, bf16) 작업은 오전 5:46부터 6:14까지(총 28분) 진행되었습니다. 모든 샷에 대한 빠른 초안을 만들었고(총 20개 초안, 각 약 106초), 이를 스크립트 타이밍에 맞춰 러프 컷했습니다(39개의 컷, 총 39.3초). 이 컷을 통해 어떤 샷과 몇 초 분량이 실제 렌더링할 가치가 있는지 결정되었습니다: 총 18개 렌더가 진행되었고, 35개의 테이크를 사용했습니다. 품질 검토(Quality pass) 단계에서는 LTX-2.5 hq(개발자 트랜스포머 및 CFG 적용, 2단계, MLX bf16, 832x480)를 사용하여 오전 6:15부터 약 11:30까지(약 5시간 15분) 작업했습니다. 최종적으로 선택된 샷들만 사용했으며, 각 컷 길이와 핸들(handles)로 약 반 초가 추가되었습니다. 히어로 샷은 3개의 테이크를, 나머지는 12개의 테이크를 사용했습니다. 한 테이크당 약 9.5분이 소요되었으며, 이는 제가 예상했던 시간보다 오래 걸렸습니다. 두 개의 스트로브 샷은 프리비즈 초안을 유지했습니다. 클립 게이트(Clip gate) 작업은 Qwen3-VL-32B 로컬 비전 심사관을 이용해 오전 11:31부터 11:56까지(총 25분) 진행되었습니다. 총 44개의 테이크가 있었고, 각 테이크는 3프레임으로 구성되어 있었습니다. 이 중 단 10개만이 통과했는데, 이는 해당 도구가 정지된 프레임에서 모션 비트(motion beats)를 '정적'으로 인식하기 때문이었습니다. 그래서 저는 서면 예외 조항을 근거로 직접 눈으로 컷을 선택했습니다. 스코어 작업은 ACE-Step 1.5를 통해 로컬 Song Forge 서버에서 오전 11:34부터 11:35까지 진행되었습니다. 총 3개의 기악 후보가 있었고, 각 후보는 스크립트에 의해 트레일러의 비트 맵에 맞춰 편집되었습니다(드론 사운드, 도착 시 'BRAAAM', 상승 빌드업, 대사 구간에서의 급정지, 가속 램프, 최종 히트). 그중 가장 적합한 것이 선정되었습니다. 에디팅 및 자체 신스 작업은 게이트가 작동하는 동안 CPU를 사용하여 오전 11:36부터 11:57까지 진행되었습니다. 최종 컷은 총 50개의 샷으로 구성되었으며, 길이는 46.6초였습니다. NumPy로 작성된 서브 베이스는 도착 시점의 2540Hz 스웰(swell), 심장 박동처럼 빨라졌다가 갑자기 멈추는 라디오 비프음, 모든 램프 컷마다 발생하는 55~28Hz 피치 드롭 서브 킥, 그리고 타이틀 아래에 깔리는 긴 서브 드롭으로 구성되었습니다. 사운드 효과(Sound effects)는 MMAudio large 44k v2 (MPS의 fp32)를 이용해 오전 11:57부터 12:01까지(총 4분) 진행되었습니다. 하나의 모델 로드로 25가지 효과를 처리했으며, 그중 15가지는 실제 클립에서 생성되어 영상과 동기화됩니다(울음소리, 유리 파열음, 발톱 소리, 굉음). 나머지는 텍스트 기반으로 생성되었습니다. 보이스는 ChatterBox 0.1.7을 이용해 오전 12:02부터 12:03까지(총 1.5분) 진행되었으며, 하나의 로드로 3개 대사의 9개 테이크를 처리했습니다. 행성의 목소리는 피치를 낮추고 옥타브를 쌓아 리버브에 잠기게 했으며, 선장은 속삭였습니다. Whisper가 모든 테이크를 검토했습니다. 최종 믹싱은 자체 5.1 패너(numpy)를 이용해 오전 12:13부터 12:20까지 진행되었습니다.
모든 움직이는 소리에는 방위각 경로(azimuth path)가 부여됩니다: 우주선은 앞쪽에서 뒤쪽으로 스윕하고, 행성은 모든 스피커에서 들려오며, 럼블 사운드는 LFE에, 대화는 중앙에 배치됩니다. 정적 게인(Static gain)을 사용했으며, 라우드니스 노멀라이저(loudness normalizer)는 사용하지 않았습니다. 결과물은 E-AC3 5.1과 스테레오 믹스를 포함합니다.
업스케일링은 SeedVR2-3B (MPS의 fp16 사용)를 이용했습니다. 처음에는 오후 12:05부터 12:34까지(29분) 작업이 중단되었는데, Mac에서 flash attention 충돌이 발생했습니다. 이후 21프레임을 인코딩하는 데만 약 7분이 소요되는 4K 직방 측정을 했고, 그래서 계획을 변경했습니다. 0.9초 이상 지속된 19개 장면은 SeedVR2를 이용해 720p로 처리되었습니다(총 866프레임, 프레임당 약 12.7초 소요, 오후 12:34부터 3:56까지, 약 3시간 20분). 이후 lanczos 리사이즈를 통해 4K로 만들었습니다. 초 단위의 스트로브 커트는 lanczos와 약간의 샤프닝을 적용했습니다.
따라서 이는 네이티브 4K 디테일이 아닌, 4K 결과물입니다. 다음으로, 오후 3:27부터 4:45까지(78분) 작업이 중단되었습니다. 세 번의 배치(batch)가 필요한 유일한 긴 장면인 도착 장면은 중간 배치가 두 번에 걸쳐 회색 바탕에 흰 얼룩이 있는 상태로 나왔습니다. 이를 2개의 단일 배치 청크로 분할하여 처리했더니 깨끗하게 나왔습니다.
마무리 및 색 보정(Finish and grade)은 오후 3:19부터 4:02까지 CPU를 사용하여 업스케일링과 병행했습니다. 엔진과 조명에 블룸(Bloom) 효과와 아나모픽 스트릭(anamorphic streak)을 넣고, 자체 LUT(space 샷에는 cold_space_teal, 다른 모든 곳에는 teal_orange_blockbuster)를 사용했으며, 미세한 필름 그레인(film grain)을 추가했습니다. 프레임은 3840x2160 안에 2.39:1 스코프 바 형태로 구성되었고, 모든 커트와 인코딩에는 FFmpeg 8.1이 사용되었습니다.
품질 관리(QC)는 오후 4:46부터 5:37까지 두 차례 진행되었습니다. film_qc (Qwen3-VL-32B를 4비트 MLX로 사용하여 사진을 확인하고, whisper-large-v3-turbo가 청취): 53개 중 51개의 검사 항목이 통과했으며, 나머지 2개 플래그는 심판이 기형으로 인식한 돌 괴물 자체였습니다. 연속성 검사(Continuity check)는 209/209를 완료했습니다. 얼굴 검사(ArcFace)에서 선장이 일부 장면에서 다른 여성처럼 보이는 것을 포착하여, 해당 4개 장면은 그녀의 원본 얼굴로 되돌리는 페이스 락(face lock, inswapper 사용)을 거쳤고, 이후 모든 과정이 다시 마무리되고 재검토되었습니다.
오후 5:38분에 완료되었습니다. 약 2시간의 중단 시간을 포함하여 빌드 시작부터 최종 트레일러까지 총 14시간 반이 걸렸습니다.
제가 아는 문제점들(Rough spots)은 다음과 같습니다. 생명체가 거대한 존재가 솟아오르는 장면과 스트로브 클로즈업 사이에서 일관성이 부족하며, 승무원의 얼굴이 스트로브(strobe)에서 흐릿하게 보입니다. '돌에 새겨진 그녀의 필체' 비트가 명확하지 않고, 후크 우주선(hook ship)이 카메라를 충전하는 것보다 크기를 유지하고 있습니다. 또한 고정된 얼굴들이 주변 디테일보다 약간 더 부드럽습니다. 모든 스크립트는 공개되어 있습니다: https://github.com/nicedreamzapp/story-forge (영화 전체 폴더는 계획(plan), 시간 장부(time ledger), 게이트 보고서(gate reports) 및 알려진 결함(known defects)과 함께 projects/last_signal에 있습니다). 제출자: /u/divinetribe1 [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/StableDiffusion의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기