docs/cookbook/diffusion/LongLive/LongLive-2.0.mdx
import { DiffusionModelTags } from '/src/snippets/diffusion/model-tags.jsx';
<DiffusionModelTags tags={["video", "text/image-to-video", "4-step", "multi-shot", "Wan2.2 5B"]} />
LongLive 2.0 is NVIDIA's 4-step text/image-to-video model distilled from Wan2.2-TI2V-5B. Its main strength is extending few-step causal generation across prompt changes, so a single request can produce multi-shot sequences without paying a full diffusion schedule for every shot.
Choose it for low-step long or multi-shot generation rather than maximum one-shot fidelity. The SGLang path uses a Diffusers conversion of the official weights, and scene continuity still depends on prompt-block and sink settings; validate transitions on the target storyboard.
The model weights use the NVIDIA Open Model License. See the paper and GitHub repository for training details.
Please refer to the official SGLang-diffusion installation guide for installation instructions.
sglang serve --model-path Rabinovich/LongLive-2.0-5B-Diffusers
In auto mode, GPUs with at least 60 GiB available keep the DiT, text encoder,
and VAE resident. This uses about 44 GiB on H200 for the 832x480 preset and
avoids moving encoder and decoder layers from host memory on every request.
Smaller GPUs retain the layerwise-offload defaults.
If the GPU runs out of memory, move the text encoder, VAE, and DiT to CPU between stages:
sglang serve \
--model-path Rabinovich/LongLive-2.0-5B-Diffusers \
--dit-cpu-offload \
--text-encoder-cpu-offload \
--vae-cpu-offload
Rabinovich/LongLive-2.0-5B-Diffusers is the Diffusers-format conversion of the official Efficient-Large-Model/LongLive-2.0-5B weights.
Generate one clip without starting a server:
sglang generate \
--model-path Rabinovich/LongLive-2.0-5B-Diffusers \
--prompt "A quiet street at dusk" \
--num-frames 61 \
--save-output \
--output-path outputs
61 frames is 16 latent frames, which is two causal blocks of 8.
Multi-shot prompts are sampling parameters, so pass them through the Python API:
from sglang import DiffGenerator
gen = DiffGenerator.from_pretrained("Rabinovich/LongLive-2.0-5B-Diffusers")
result = gen.generate(sampling_params_kwargs={
"shot_prompts": [
"A husky walks down a sunlit hallway.",
"The husky turns and looks at the camera.",
"Two dogs play together on a carpet.",
],
"chunks_per_shot": 4,
"num_frames": 381, # 3 shots x 4 chunks x 8 = 96 latent frames -> 381 frames
"scene_cut_prefix": "The scene transitions. ",
"multi_shot_sink": True,
"multi_shot_rope_offset": 8.0,
"save_output": True,
"output_path": "outputs",
})
Each shot runs for chunks_per_shot causal blocks before the next prompt is used. The multi-shot defaults mirror the original LongLive prompt-block settings.
These are SGLang request parameters. Original LongLive configs use latent-frame num_output_frames; SGLang exposes output-video num_frames.
num_frames: 61 in the examples. This maps to 16 latent frames, while the original release config defaults to 128 latent frames.num_inference_steps: 4, matching original sampling_steps.guidance_scale: 1.0, matching the original inference config.height / width: 704 / 1280 by default, matching original latent H/W 44 / 80 with 16x spatial compression.shot_prompts, chunks_per_shot, scene_cut_prefix, multi_shot_sink, and multi_shot_rope_offset: SGLang request fields for the original prompt-block and multi-shot behavior.Pass a first frame with --image-path to condition the clip on an image:
sglang generate \
--model-path Rabinovich/LongLive-2.0-5B-Diffusers \
--prompt "A quiet street at dusk" \
--image-path first_frame.png \
--num-frames 61 \
--save-output \
--output-path outputs
The image is used as the first-frame condition.
num_frames must map to a whole number of causal blocks. The latent frame count is (num_frames - 1) / 4 + 1 and must be divisible by 8. For example, 61, 125, and 189 frames give 16, 32, and 48 latent frames.num_frames to match len(shot_prompts) * chunks_per_shot * 8 latent frames, that is num_frames = (len(shot_prompts) * chunks_per_shot * 8 - 1) * 4 + 1.