Capability notes
Cinematic generation is the discipline of producing video with intentional directorial control — shot composition, camera movement, lighting mood, and lens characteristics — not just "generate a video of X." Where [text-to-video](/tasks/text-to-video) answers "what happens," cinematic generation answers "how is this shot." Wan 2.1's cinematic mode (14B, Alibaba) is the closest open-weight option: supports explicit camera controls (focal length, aperture, dolly/zoom/pan parameters) and lighting presets (golden hour, overcast, noir, studio) injected as conditioning into the diffusion process.
**Shot composition primitives**: Wan's cinematic mode accepts shot-type tokens — "close-up," "medium shot," "wide shot," "dutch angle," "over-the-shoulder," "aerial/drone" — as conditioning vectors that bias frame layout. A "close-up" token increases the subject's frame occupancy and decreases depth of field (blurrier backgrounds). Shot-type adherence is ~70-80% — the model usually gets the general framing right but may drift from "dutch angle" to flat horizon by frame 40.
**Camera movement language**: The prompt format for cinematic work specifies camera path + speed + subject tracking. "Camera dollies forward, starting wide on the cityscape, pushing into a medium shot of the protagonist on the balcony, tracking left as they turn" produces more controllable results than "show a city and a person." Camera speed matters: "slow creep," "brisk pace," "rapid whip pan" all influence motion magnitude. On Wan, camera movement adherence is ~60-75% — models understand "pan left" better than "arc around subject while tilting up."
**Lighting genres as conditioning**: Wan supports lighting keywords as conditioning signals. "Golden hour backlighting" biases color temperature warm (3000-4000K), adds rim light effect. "Noir high-contrast" biases toward strong key/shadows with crushed blacks. "Studio three-point lighting" produces even, flat illumination. Lighting adherence is ~50-65% — the strongest conditioning axis in open-weight models, ahead of camera movement but behind shot composition. [HunyuanVideo](/tasks/text-to-video) has weaker lighting controls than Wan; LTX-Video has none.
**Render quality**: Open-weight cinematic generation produces 480p-720p at 15-24fps. The "cinematic" label here refers to directorial intent, not resolution parity with Arri/Red cinema cameras. Professional output requires upscaling + frame interpolation as separate post-processing steps.
If you just want to try this
Lowest-friction path to a working setup.
Set up [ComfyUI](/tools/comfyui) with Wan 2.1 T2V 14B (not I2V — T2V generates everything from scratch, including the scene). Install WanVideoWrapper custom node. Required hardware: [RTX 4090 24GB](/hardware/rtx-4090) or [RTX 3090 24GB](/hardware/rtx-3090) — cinematic generation pushes the model harder than standard video gen because of added conditioning, pushing VRAM to 16-20 GB FP8.
Start with static-shot exercises before attempting camera movement. A fixed-camera shot with lighting direction: "Medium shot of a detective sitting at a desk, noir lighting with venetian blind shadows across the face, cigarette smoke curling upward, 24fps cinematic" — this prompts the model to hold the frame and focus on atmospheric quality. Check the output for lighting accuracy before adding camera movement.
Once static shots work, add simple camera moves: "Slow push-in on the detective, starting medium-wide and closing to close-up over 5 seconds, noir lighting, 24fps." Keep camera moves to one axis (forward/back OR left/right, not both). Complex orbital moves produce jerky output.
Prompt structure for cinematic work (learn this order): **Shot type** (close-up/wide/etc.) → **Subject description** (character, setting) → **Camera movement** (static/tracking/dolly) → **Lighting style** (noir/golden hour/studio) → **Lens reference** (24mm wide, 85mm portrait, anamorphic) → **Film stock/color** (Kodak Portra warmth, teal-orange grade). This order matches how the model weights conditioning — shot type is strongest, color grading weakest.
Expect 2-4 minute generation per clip on [RTX 4090](/hardware/rtx-4090). Cinematic mode adds ~20% generation time vs standard T2V (extra conditioning computation).
For production deployment
Operator-grade recommendation.
Production cinematic pipelines combine Wan T2V with [ComfyUI](/tools/comfyui) for shot generation, then post-processing for cinema-grade output. The open-weight stack can match API services (Runway, Kling) on shot composition but trails on temporal smoothness — interpolation and stabilization are mandatory.
**Shot library pipeline**: (1) Storyboard → shot list (structured JSON: shot type, camera move, lighting, duration, transition type) → (2) per-shot Wan T2V with cinematic conditioning → (3) RIFE interpolation (15→24/30fps, 10-20s per clip) → (4) Real-ESRGAN upscaling (480p→1080p, 15-30s) → (5) DaVinci Resolve color grading (LUT application, exposure matching across shots) → (6) FFmpeg assembly with scene-consistent encoding. Single [RTX 5090 32GB](/hardware/rtx-5090): ~8-12 cinematic shots/hour (5s each).
**Shot consistency across a sequence**: The hardest production problem. Shot 1 and Shot 2 of the same scene generate with different color temperatures, different subject interpretations, different noise patterns. Solutions: (a) use consistent seed ranges (same seed ± small offset preserves scene "world" state), (b) embed a reference frame from Shot 1 as conditioning for Shot 2 via Wan I2V variant, (c) apply global color grading (DaVinci Resolve via Python API with per-clip LUT) to match shots.
**Real-time vs offline**: Cinematic generation is inherently offline — 60-120s per 5s clip. Real-time is not possible. For real-time camera control (virtual production, live previz), use Unreal Engine + Metahuman with AI-generated texture/motion, not diffusion video models. The diffusion pipeline is for pre-rendered content.
**Multi-GPU shot farm**: Deploy 4-8× [RTX 5090](/hardware/rtx-5090) behind a job queue. Each GPU runs one ComfyUI worker. Pipeline: shot list → queue (assign shots round-robin to workers) → per-worker generation → unified post-processing. 8× RTX 5090 = ~80-100 cinematic shots/hour. At $2-3/hr cloud per GPU, cost is $16-24/hr for the render farm. Compare to API: Runway Gen-3 cinematic mode ~$0.15-0.30/shot. Self-hosting breaks even at ~600-1,500 shots/month.
**Shot-type-specific conditioning tweaks**: Close-ups: increase CFG (8-10) for detail, reduce motion magnitude (0.3-0.5). Wide shots: reduce CFG (5-7) for scene coherence, increase motion (0.7-1.0). Tracking shots: increase frame count (81+) for longer motion sequences. Static shots: reduce frame count (33-49) for fewer generation artifacts.
What breaks
Failure modes operators see in the wild.
**Shot composition drift.** Symptom: "close-up" starts as a face filling 60% of frame, but by frame 50 the camera has "zoomed out" to a medium shot without being prompted. Cause: the model's default composition prior is mid-shot; without continuous conditioning reinforcement, it relaxes toward the mean. Mitigation: use I2V (start with the desired close-up frame, prompt only motion), or re-inject shot-type conditioning every 20 frames in advanced ComfyUI workflows.
**Lighting inconsistency across shots.** Symptom: Shot 1 has warm golden-hour backlight; Shot 2 of the same scene has cool overcast flat lighting. Cause: each generation is independent — no shared lighting state. Mitigation: extract color histogram from Shot 1, apply as conditioning to Shot 2 via ControlNet-style color transfer in post, or batch-generate with fixed seed ± small offset (seed-consistent "world" state partially preserves lighting).
**Uncanny valley on human faces in motion.** Symptom: faces look photorealistic in frame 1 but deform subtly across frames — eyes drift, mouth shapes shift unnaturally. Cause: diffusion models lack face-specific temporal constraints. Mitigation: apply face restoration (CodeFormer/GFPGAN) per-frame, or reduce human presence in shots (cinematic generation works better for environments, objects, and camera movement than for close-up human performance).
**Lens artifacts hallucination.** Symptom: model adds lens flares, chromatic aberration, or film grain that wasn't prompted. Cause: cinematic training data includes these artifacts as style features — the model confuses "cinematic look" with "lens artifact." Mitigation: negative prompt "lens flare, chromatic aberration, film grain, dust, scratches" in Wan's negative conditioning, or accept as aesthetic enhancement for authenticity.
**Motion-judder on complex camera paths.** Symptom: "camera orbits subject while dollying back and tilting up" produces jerky, frame-skipping motion. Cause: the model can't decompose compound camera moves into smooth velocity curves. Mitigation: decompose complex moves into single-axis passes, generate each separately, stitch in post. Three single-axis clips stitched look better than one compound-motion clip.
Hardware guidance
**Minimum viable (24 GB VRAM)**: [RTX 3090 24GB](/hardware/rtx-3090) or [RTX 4090 24GB](/hardware/rtx-4090). Wan 2.1 cinematic mode FP8 (~16-20 GB VRAM with conditioning overhead). 60-120s per cinematic clip (cinematic conditioning adds ~20% time vs standard T2V). Below 24 GB, reduce to 33-frame clips at 480p — still looks "cinematic" in shot composition but shorter and lower resolution.
**Recommended (32 GB+)**: [RTX 5090 32GB](/hardware/rtx-5090). Wan 2.1 cinematic FP16 (~27 GB model) with full conditioning pipeline — all cinematic parameters active simultaneously. 40-90s per clip. Also fits HunyuanVideo 720p at reduced frame counts for higher base resolution.
**Enterprise/shot farm (48 GB+)**: [NVIDIA L40S](/hardware/nvidia-l40s) 48 GB. Single GPU runs Wan FP16 cinematic + concurrent 2-clip generation for throughput. [NVIDIA H200](/hardware/nvidia-h200) 141 GB or 8× [RTX 5090](/hardware/rtx-5090) cluster for an always-on render farm producing 500+ shots/day.
**Post-processing hardware**: After generation, each clip needs interpolation + upscaling. Dedicate a separate GPU for post-processing to avoid blocking generation workers. [RTX 4070 12GB](/hardware/rtx-4070): RIFE interpolation at 2-3× real-time, Real-ESRGAN upscaling at 1-2fps. 4× generation GPUs + 1× post-processing GPU is the efficient farm ratio.
**Multi-GPU limitations**: Cinematic generation doesn't support tensor parallelism — one clip per GPU. Scale horizontally with more GPUs. Cloud economics: 8× [L40S](/hardware/nvidia-l40s) at ~$1.50/hr each = $12/hr. 8× [RTX 4090](/hardware/rtx-4090) equivalent at consumer cloud providers ~$0.50/hr each = $4/hr — consumer GPUs offer better $/clip for cinematic farms than enterprise.
Runtime guidance
**If generating individual cinematic shots** → [ComfyUI](/tools/comfyui) with WanVideoWrapper and cinematic conditioning nodes. The standard and only practical runtime for open-weight cinematic generation. Workflow: Wan Text-to-Video (Cinematic) node with shot type, camera move, lighting, lens, and film stock conditioning fields → output frames → Video Combine.
**If building a shot library/automated pipeline** → ComfyUI API mode with programmatic workflow construction. Build Python/JS layer: input = storyboard JSON (array of shot specs), output = array of video URLs. Each shot spec contains all cinematic parameters as JSON → injected into ComfyUI workflow template → submitted to queue. Template maintenance: ~10 ComfyUI workflow templates cover 90% of shot types (close-up, medium, wide, tracking, static, aerial) — swap prompts and parameters, not workflow topology.
**If combining with traditional VFX/CGI** → ComfyUI for AI-generated base plates → export as image sequence → import into Blender/DaVinci Resolve/AE for compositing. The AI output is a starting point — real production adds VFX elements, color grading, and compositing in traditional tools. Python bridge: ComfyUI API → download frame sequence → scripted import into Resolve via Python API.
**Post-processing runtime stack** (required for cinema quality): RIFE (frame interpolation) via ComfyUI RIFE node or standalone — 15fps→24/30fps. Real-ESRGAN (upscaling) via ComfyUI Upscale node — 480p→1080p. FFmpeg encoding with cinematic settings: `-c:v libx265 -crf 16 -preset slow -x265-params "colorprim=bt709:transfer=bt709:colormatrix=bt709"` for Rec.709 color space. DaVinci Resolve Python API for final color grading and shot matching.
**What doesn't work for cinematic**: [Automatic1111](/tools/automatic1111) (image only, no video), [Ollama](/tools/ollama) (LLMs only, no diffusion video), [LM Studio](/tools/lm-studio) (same), [Diffusers](/tools/diffusers) (experimental Wan support, not production-ready for cinematic mode). ComfyUI is the single viable runtime.