2025년 10월 25일 기술 보고서(arXiv:2510.22200)와 함께 가중치가 공개됐고, 12월에는 오디오로 입을 맞추는 LongCat-Video-Avatar까지 추가됐다. 폐쇄형 상용 모델(구글 Veo3·바이트댄스 Seedance)에 견줄 품질을 오픈소스로 내놨다는 점이 화제다.
기존 텍스트→영상 모델은 "한 컷 스냅 촬영"이다. 프롬프트를 주면 5초 안팎의 짧은 클립을 한 방에 만든다. 그런데 이걸 이어 붙여 긴 영상을 만들려고 하면, 뒤로 갈수록 색이 누렇게 뜨고(컬러 드리프트) 인물이 슬슬 다른 사람이 된다.
LongCat-Video는 "이야기를 이어 쓰는 작가"다. 처음부터 "앞 영상 → 뒤 영상"을 예측하는 영상 이어붙이기(Video-Continuation) 과제로 사전학습돼서, 직전 장면을 기억하고 다음을 이어 그린다. 그래서 길어져도 색감·인물·움직임이 무너지지 않는다.
대부분의 영상 모델은 짧은 클립 생성에 최적화돼 있다. 긴 영상이 필요하면 클립을 생성하고 그 마지막 프레임을 다시 입력해 이어 붙이는데, 이 과정에서 오차가 누적돼 컬러 드리프트(색 번짐)와 품질 저하가 생긴다. LongCat-Video는 처음부터 Video-Continuation(앞 영상을 조건으로 다음 영상을 예측)을 네이티브 사전학습 과제로 삼았다.
짧은 모델로 학습한 뒤 추론 때만 마지막 프레임을 다시 넣어 연장하면, 모델은 "이어 그리기"를 제대로 배운 적이 없다. 매 연장마다 미세한 색·밝기·구도 오차가 쌓여 1분쯤 가면 화면이 누렇게 뜨거나 인물이 뭉개진다.
학습 단계부터 "앞 영상 → 뒤 영상"을 직접 예측하도록 훈련됐다. 그래서 연장이 모델이 잘 아는 작업이 되고, 분 단위로 길어져도 시간적 일관성(temporal coherence)이 유지된다. 텍스트→영상·이미지→영상도 이 통합 프레임 안의 특수 케이스로 처리된다.
보통은 "텍스트→영상 모델"과 "이미지→영상 모델"이 따로다. LongCat-Video는 같은 가중치 하나로 세 가지를 모두 한다.
"비 오는 도쿄 거리를 걷는 사람" 같은 묘사를 넣으면 그 장면을 영상으로 만든다. 내부적으로는 "빈 영상에서 시작하는 이어붙이기"로 처리된다.
정지 이미지를 첫 프레임으로 주면, 그 이미지가 자연스럽게 움직이는 영상을 만든다. 광고·썸네일을 "살아 움직이게" 만드는 용도.
핵심 작업. 여기서 run_demo_long_video.py(장편)와 run_demo_interactive_video.py(인터랙티브 — 진행 중 조건을 바꿔가며 생성)가 파생된다. 후자는 "월드 모델"의 맹아다.
영상 생성의 최대 적은 속도다. 프레임 수×해상도만큼 연산이 폭증하기 때문. LongCat-Video는 두 가지 트릭으로 이를 누른다.
사람 선호를 반영하는 다중 보상 RLHF를 GRPO(Group Relative Policy Optimization)로 적용했다. 그 결과 13.6B Dense 모델이, 28B(활성 14B) MoE인 Wan 2.2와 비슷하거나 더 나은 영역도 보인다. 즉 더 작은 모델로 비슷한 품질을 낸다.
| Text-to-Video (내부 MOS) | Veo3 | PixVerse-V5 | Wan 2.2-T2V | LongCat-Video |
|---|---|---|---|---|
| 접근성 | 상용(폐쇄) | 상용(폐쇄) | 오픈소스 | 오픈소스 |
| 아키텍처 / 파라미터 | — | — | MoE · 28B(활성14B) | Dense · 13.6B |
| 텍스트 정합도 ↑ | 3.99 | 3.81 | 3.70 | 3.76 |
| 시각 품질 ↑ | 3.23 | 3.13 | 3.26 | 3.25 |
| 모션 품질(Motion Quality) ↑ | 3.86 | 3.81 | 3.78 | 3.74 |
| 종합 품질 ↑ | 3.48 | 3.36 | 3.35 | 3.38 |
※ MOS = Mean Opinion Score(사람 평가 평균). 폐쇄형 Veo3가 종합 1위지만, 오픈소스 중에서는 더 작은 LongCat-Video가 Wan 2.2를 종합에서 앞선다.
모델 가중치가 MIT 라이선스로 풀렸다. 상업적 이용·재배포·수정이 모두 자유롭다. 영상 생성처럼 비용이 큰 분야에서 상용급 오픈 모델이 관대한 라이선스로 나온 것은 드물고, 이게 트렌딩의 큰 이유다.
"긴 영상에서 무너지지 않고(Continuation 프리트레이닝), 빠르며(coarse-to-fine + BSA), 작아도 상용급(GRPO RLHF)이고, 라이선스가 관대(MIT)하다" — 영상 생성 오픈소스가 갖추기 어려운 네 가지를 한 번에 충족한 게 핵심이다.
저장소는 Python 100%다. 단순 한 덩어리가 아니라 "확산 백본(DiT) + 영상 VAE + Flow Matching 스케줄러 + 효율 어텐션 + 분산 추론"의 레이어로 나뉜다. 핵심 의존성은 diffusers·transformers·flash-attn이다.
longcat_video_dit.py에 있고, 13.6B 파라미터의 Dense Transformer다.autoencoder_kl_wan.py가 그것으로, 알리바바 Wan 모델 계열의 3D VAE를 차용했다. 시간×높이×너비를 함께 압축(예: 시간 4배·공간 8×8배)해 연산량을 수십 배 줄인다.scheduling_flow_match_euler_discrete.py. 노이즈에서 데이터로 가는 "흐름"을 직접 학습하는 확산의 변종. DDPM/DDIM의 수십~수백 스텝 대신 적은 스텝으로 깨끗한 결과를 내 추론을 빠르게 한다.| 레이어 | 모듈 / 도구 | 역할 |
|---|---|---|
| 희소 어텐션 | block_sparse_attention/ (BSA + FlashAttention 커널) | 고해상도에서 어텐션 비용 급감 |
| 분산 추론 | context_parallel/ (Ulysses 시퀀스 병렬) | 여러 GPU로 긴 영상 시퀀스 분할 처리 |
| 위치 인코딩 | rope_3d.py (3D RoPE) | 시간·높이·너비 3축 회전 위치 임베딩 |
| 경량화 | quantization.py · lora_utils.py | 양자화 추론 · LoRA 어댑터 |
| 프롬프트 강화 | utils/prompt_enhancer.py | 짧은 프롬프트를 LLM으로 풍부하게 확장 |
| 해상도 버킷 | utils/bukcet_config.py | 다양한 종횡비/해상도를 버킷으로 관리 |
| 오디오(아바타) | audio_process/wav2vec2.py | 음성에서 입모양 특징 추출(Avatar 전용) |
| 패키지 | 버전 | 역할 |
|---|---|---|
| torch | 2.6.0 (+cu124) | 딥러닝 프레임워크 |
| diffusers | 0.35.1 | 확산 파이프라인/스케줄러 토대 |
| transformers | 4.41.0 | 텍스트 인코더(UMT5) 로딩 |
| flash-attn | 2.7.4.post1 | 고속 어텐션 커널 (FA2/FA3) |
| av · imageio-ffmpeg · opencv-python | — | 영상 디코딩/인코딩·프레임 처리 |
| einops | 0.8.0 | 텐서 차원 재배열(영상 텐서 필수) |
| streamlit | 1.50.0 | 웹 데모 UI (run_streamlit.py) |
# 가중치 다운로드
huggingface-cli download meituan-longcat/LongCat-Video --local-dir ./weights/LongCat-Video
# 텍스트 → 영상 (단일 GPU, torch.compile 켜기)
torchrun run_demo_text_to_video.py --checkpoint_dir=./weights/LongCat-Video --enable_compile
# 멀티 GPU (시퀀스 병렬 2-way)
torchrun --nproc_per_node=2 run_demo_text_to_video.py \
--context_parallel_size=2 \
--checkpoint_dir=./weights/LongCat-Video --enable_compile
# 장편 영상 / 인터랙티브 영상
torchrun run_demo_long_video.py --checkpoint_dir=./weights/LongCat-Video --enable_compile
torchrun run_demo_interactive_video.py --checkpoint_dir=./weights/LongCat-Video --enable_compile
# 웹 데모(Streamlit)
streamlit run ./run_streamlit.py --server.fileWatcherType none --server.headless=false
LongCat-Video는 픽셀을 직접 만들지 않는다. 영상을 Wan VAE로 압축한 잠재 공간으로 옮긴 뒤, 그 안에서 DiT가 노이즈를 걷어내며(확산) 영상을 그리고, 마지막에 VAE 디코더가 다시 픽셀로 푼다. 아래는 텍스트→영상 기준 전체 흐름이다.
720p·30fps·수십 초 영상을 픽셀 단위로 확산하면 연산이 감당 불가다. 그래서 Wan VAE로 시간·공간을 함께 압축한 잠재로 옮겨 작업량을 수십 배 줄인다. DiT는 이 작은 잠재 공간 안에서만 노이즈를 제거하고, 디코더가 마지막에 한 번 픽셀로 푼다. 이미지의 Stable Diffusion이 쓰던 "잠재 확산"을 3D(영상)로 확장한 것.
rope_3d.py에 구현돼 있으며, 어떤 프레임의 어느 위치인지를 모델이 인지해 시공간 일관성을 잡는다.한 번에 고해상도·고프레임을 만들지 않는다. 먼저 거친 뼈대(적은 프레임·낮은 해상도)를 잡아 전체 움직임·구도를 정하고, 그 위에 ⒜ 시간축으로 중간 프레임을 채워 30fps로 부드럽게 만들고 ⒝ 공간축으로 해상도를 720p까지 올린다. 큰 그림을 먼저 그리고 디테일을 덧칠하는 화가의 순서와 같다. 초반에 전역 구조가 고정되니 길어져도 흔들림이 적다.
어텐션은 모든 토큰 쌍을 보므로 토큰 수의 제곱으로 비용이 는다. 720p 영상은 토큰이 수십만 개라 치명적이다. BSA는 토큰을 블록으로 묶고 관련 없는 블록 쌍의 계산을 통째로 건너뛴다. block_sparse_attention/flash_attn_bsa_varlen_mask.py가 FlashAttention 커널 위에 가변 길이 마스크를 얹어 이를 구현한다.
모든 참석자가 서로 한 명도 빠짐없이 악수하면(밀집 어텐션) 인원이 늘수록 악수 횟수가 폭증한다. BSA는 "같은 테이블(블록) 사람끼리, 그리고 의미 있는 옆 테이블끼리만 악수"하게 해 횟수를 확 줄인다. 멀리 떨어져 관계가 거의 없는 테이블끼리는 생략한다.
긴 영상은 한 GPU 메모리에 다 안 들어간다. context_parallel/ulysses_wrapper.py는 Ulysses 방식으로 시퀀스(영상 토큰)를 여러 GPU에 쪼개 나눠 처리한다. CLI의 --context_parallel_size=2가 이 2-way 분할을 켜는 스위치다. 데이터 병렬(모델 복제)이 아니라 "한 영상을 여러 카드가 나눠 만드는" 방식이라 더 긴 영상을 빠르게 만들 수 있다.
확산 백본을 일반 학습으로만 끝내지 않고, 사람 선호(텍스트 정합·시각 품질·움직임 자연스러움 등 여러 보상)를 동시에 반영하는 강화학습으로 다듬었다. 기법은 GRPO로, 여러 샘플을 그룹으로 비교해 상대적으로 나은 쪽을 강화한다(별도 가치망 없이). 이 덕에 작은 Dense 모델이 큰 MoE 모델급 선호 점수를 낸다.
2025년 12월 추가된 분기. 오디오를 받아 캐릭터의 입·표정을 맞춰 말하게 한다(Audio-Text-to-Video, Audio-Image-to-Video). audio_process/wav2vec2.py가 음성에서 발화 특징을 뽑고, modules/avatar/longcat_video_dit_avatar.py의 전용 DiT가 이를 조건으로 영상을 만든다. 한 사람(single-stream)·여러 사람(multi-stream) 오디오를 모두 지원한다.
Avatar-1.5 (2026-05-21 추가): 오디오 인코더를 Wav2Vec2에서 Whisper-large-v3로 교체해 인식 정확도를 높였고, step distillation으로 추론을 8 스텝으로 단축했다. 또한 --use_int8 플래그로 INT8 양자화 추론을 지원해 메모리 부담을 줄였다. 가중치는 HuggingFace에 별도 공개(meituan-longcat/LongCat-Video-Avatar-1.5)됐으며 기존 Avatar와 독립된 모델이다.
실제 두뇌는 pipeline_longcat_video.py 하나다. T2V·I2V·Continuation·Long·Interactive 다섯 개의 run_demo_*.py는 이 같은 파이프라인을 서로 다른 입력 조건으로 호출하는 얇은 래퍼일 뿐이다. "통합 아키텍처(한 모델 = 여러 작업)"가 코드 구조에도 그대로 드러난다.
block_sparse_attention/와 context_parallel/이 모델 정의(modules/)와 분리돼 있다. "무엇을 계산하나(모델)"와 "어떻게 빠르게/나눠 계산하나(시스템)"를 갈라 둔 설계. 연구자가 모델만, 시스템 엔지니어가 효율화만 따로 만지기 쉽다.
modules/avatar/와 pipeline_longcat_video_avatar.py가 본체 구조를 그대로 본떠(별도 attention·blocks·rope_3d) 오디오 조건만 추가한다. 코어를 갈아엎지 않고 모달리티를 얹는 확장 방식의 예시다.
Stable Diffusion(2D latent) → DiT(Sora 계열) → 3D VAE + DiT(영상)로 이어지는 흐름. "왜 픽셀이 아니라 잠재에서 확산하나"를 체득한다.
실습 아이디어: diffusers로 이미지 latent diffusion을 먼저 돌려보고, Wan VAE가 시간축까지 압축하는 지점을 코드에서 짚어보기.
scheduling_flow_match_euler_discrete.py를 읽고 DDPM/DDIM과의 차이를 이해. 영상처럼 무거운 도메인에서 스텝 수를 줄이는 게 왜 결정적인지.
실습 아이디어: MNIST에 Flow Matching을 10스텝으로 구현 → 같은 원리가 LongCat DiT 안에서 돈다는 것을 확인.
FlashAttention(IO 인지 커널) 위에 Block Sparse Mask를 얹는 구조. 트랜스포머의 O(n²) 병목을 실전에서 어떻게 푸는지.
실습 아이디어: bsa_interface.py의 블록 마스크 생성을 작은 시퀀스로 시각화해 어느 블록이 생략되는지 그려보기.
데이터 병렬과 다른 "시퀀스 병렬"의 개념. 긴 컨텍스트/긴 영상을 다루는 현대 분산 추론의 핵심.
실습 아이디어: 2-GPU 환경에서 --context_parallel_size=2 on/off로 같은 영상의 생성 시간·VRAM을 측정·비교.
LLM에서 온 GRPO가 영상 생성의 다중 보상(품질·정합·움직임)에 어떻게 적용되는지. "작은 모델이 큰 모델급"이 되는 비결의 한 축.
실습 아이디어: 기술 보고서(arXiv:2510.22200)의 RLHF 절을 정독하고, 보상 항목별 기여를 표로 정리.
아래 GPU 권장은 13.6B 파라미터 + 영상(다프레임) 활성값 + FlashAttention 요구사항을 근거로 한 합리적 추정이다. 공식 최소 사양은 저장소에 명시돼 있지 않으니 참고용으로만 보자.
| 항목 | 내용 |
|---|---|
| 모델 규모 | 13.6B 파라미터 (Dense) |
| 출력 사양 | 720p · 30fps · 수 분 안 생성(고급 GPU 기준) |
| Python | 3.10 (conda 권장) |
| PyTorch / CUDA | torch 2.6.0 / CUDA 12.4 |
| 필수 가속 | flash-attn 2.7.4 (FA3·xformers로 교체 가능) |
| 멀티 GPU | --context_parallel_size=N (Ulysses 시퀀스 병렬) |
| 속도 옵션 | --enable_compile (torch.compile JIT) |
RTX 4090 24GB 1장 + --enable_compile. 짧은 클립/저해상도부터. 양자화(quantization.py)로 메모리 여유 확보.
A100 40/80GB 1장. 720p·긴 영상도 한 카드에서 처리. 가장 무난한 출발점.
A100/H100 2장 이상 + --context_parallel_size=2. 분 단위 장편을 빠르게. 커뮤니티 가속(CacheDiT)로 추가 ~1.7배.
커뮤니티 프로젝트 CacheDiT가 DBCache·TaylorSeer로 LongCat-Video에 정밀도 손실 거의 없이 ~1.7배 가속을 제공한다(README의 Community Works). 또한 모델 config에서 FlashAttention-3나 xformers로 교체하면 어텐션이 더 빨라진다.
가중치를 받아 run_demo_text_to_video.py로 같은 한국어/영어 프롬프트 10개를 생성한다. 그 다음 utils/prompt_enhancer.py로 강화한 프롬프트와 결과를 비교.
배우는 것: 프롬프트 디테일이 영상 품질·정합도에 미치는 영향, 그리고 LLM 기반 프롬프트 강화의 실제 효과를 눈으로 체감.
내 사진/일러스트 한 장을 첫 프레임으로 넣어 run_demo_image_to_video.py 실행. 같은 이미지에 서로 다른 모션 프롬프트("카메라 줌인" / "바람에 머리카락 흔들림")를 줘 비교.
배우는 것: 이미지 조건이 latent에 어떻게 들어가는지, 모션 프롬프트가 어디까지 통제 가능한지.
run_demo_long_video.py로 1분 장편을 만든 뒤, 비교군으로 "5초 클립을 만들고 마지막 프레임을 I2V에 재입력"하는 방식으로도 1분을 만들어 본다. 두 결과의 후반부 색·인물 일관성을 프레임별로 비교.
배우는 것: Video-Continuation 네이티브 학습이 실제로 무너짐을 막는지 정량/정성 검증. 섹션 2의 주장 직접 확인.
2장 이상 GPU에서 --context_parallel_size를 1→2→4로 바꿔가며 같은 영상의 생성 시간·피크 VRAM을 측정. --enable_compile on/off도 교차.
배우는 것: Ulysses 시퀀스 병렬의 스케일링 특성과 torch.compile 워밍업 비용. 분산 추론 감각.
block_sparse_attention/bsa_interface.py의 블록 마스크 생성을 계측해 "어느 블록이 생략되는지/연산 절감률"을 시각화하고, run_demo_interactive_video.py를 띄워 진행 중 조건을 바꿔가며 "월드 모델"식 상호작용을 실험.
배우는 것: 희소 어텐션의 실제 절감 메커니즘과, 영상 생성 모델이 "상호작용 가능한 세계 시뮬레이터"로 가는 길의 현주소.
DDPM(Ho 2020) → DDIM(Song 2021) → Latent Diffusion(Stable Diffusion) → Flow Matching(Lipman 2023). 마지막에 scheduling_flow_match_euler_discrete.py를 읽고 MNIST Flow Matching 구현.
DiT 원논문(Peebles & Xie 2023) → Sora 기술 블로그 → Wan/CogVideoX의 3D VAE. LongCat의 longcat_video_dit.py·autoencoder_kl_wan.py를 대조하며 정독.
FlashAttention(Dao 2022) → Block Sparse 변형 → DeepSpeed-Ulysses 시퀀스 병렬. 저장소의 block_sparse_attention/·context_parallel/로 실물 확인.
RLHF/GRPO를 생성 모델에 적용하는 흐름 + "영상 생성 → 월드 모델" 담론(Genie, 인터랙티브 생성). 기술 보고서(2510.22200)의 RLHF·world model 절을 정리.
| 용어 | 뜻 |
|---|---|
| DiT (Diffusion Transformer) | 확산 모델의 노이즈 제거망을 Transformer로 구현. Sora 이후 영상 생성 표준 |
| Latent Diffusion | 픽셀이 아니라 VAE로 압축한 잠재 공간에서 확산을 수행해 연산을 줄이는 방식 |
| 3D VAE (Wan VAE) | 영상의 시간×높이×너비를 함께 압축/복원하는 오토인코더 |
| Flow Matching | 노이즈→데이터 흐름을 직접 학습하는 확산 변종. 적은 스텝으로 충분 |
| 3D RoPE | 회전 위치 임베딩을 시간·높이·너비 3축으로 확장 |
| Video-Continuation | 앞 영상을 조건으로 다음 영상을 예측. LongCat의 핵심 사전학습 과제 |
| Color Drift (컬러 드리프트) | 영상을 길게 연장할수록 색·밝기가 누적 오차로 변질되는 현상 |
| Coarse-to-fine | 거친 뼈대 → 세부로 단계적 생성. 시간축·공간축 양쪽에 적용 |
| Block Sparse Attention | 관련 없는 토큰 블록 쌍의 어텐션 계산을 생략해 비용 절감 |
| FlashAttention | IO를 인지해 메모리 효율적으로 어텐션을 계산하는 커널 |
| Context/Sequence Parallel (Ulysses) | 한 샘플의 긴 시퀀스를 여러 GPU에 나눠 처리하는 병렬화 |
| GRPO | Group Relative Policy Optimization. 그룹 내 상대 비교로 정책을 강화(가치망 불필요) |
| RLHF | 사람 선호(보상)를 강화학습으로 모델에 주입 |
| Dense vs MoE | 모든 파라미터를 매번 쓰는 Dense / 일부 전문가만 활성화하는 MoE |
| MOS | Mean Opinion Score. 사람 평가자의 평균 점수(품질 지표) |
| World Model | 세계의 동역학을 학습해 시뮬레이션·예측하는 모델. 인터랙티브 영상 생성이 그 맹아 |
| UMT5-XXL | 다국어 T5 텍스트 인코더. 프롬프트를 임베딩으로 변환 |
| LoRA | 큰 모델에 작은 저랭크 어댑터만 끼워 효율적으로 미세조정 |
| MIT License | 상업 사용·재배포·수정을 폭넓게 허용하는 관대한 오픈소스 라이선스 |