AnyLearn
All lessons
AIbeginner

Video generation models: Sora, Veo, Runway, and what they actually do

How diffusion-based video models turn a text prompt into a moving image, why consistency is so hard, and the practical patterns you need to know before generating anything longer than a few seconds.

Not signed in โ€” your progress and quiz score won't be saved.
Lesson progress1 / 8

Why video is harder than images

Generating a single image is hard. Generating a video means generating many images that are also temporally consistent โ€” the same character has the same face frame to frame, the cup stays on the table, the camera moves smoothly.

The naive approach โ€” generate each frame independently โ€” produces flickering chaos. The frontier models all share the same fix: treat video as a single 3D tensor (height ร— width ร— time) and run diffusion across all three axes at once. That's why these models need orders of magnitude more compute than image models, and why outputs tend to be 3โ€“10 seconds long: the tensor grows linearly with duration but quality degrades fast past that.

Full lesson text

All 8 steps on one page โ€” for reading, reference, and search.

Show

1. Why video is harder than images

Generating a single image is hard. Generating a video means generating many images that are also temporally consistent โ€” the same character has the same face frame to frame, the cup stays on the table, the camera moves smoothly.

The naive approach โ€” generate each frame independently โ€” produces flickering chaos. The frontier models all share the same fix: treat video as a single 3D tensor (height ร— width ร— time) and run diffusion across all three axes at once. That's why these models need orders of magnitude more compute than image models, and why outputs tend to be 3โ€“10 seconds long: the tensor grows linearly with duration but quality degrades fast past that.

2. Diffusion, very briefly

Almost every modern video model is a latent diffusion model. The recipe:

  1. Train an autoencoder that compresses a video clip into a much smaller latent tensor.
  2. Add Gaussian noise to that latent in TT small steps until it's pure noise.
  3. Train a network to reverse one step of noise, conditioned on a text embedding.
  4. To generate: start from noise, iteratively denoise for TT steps using your prompt as the condition.
  5. Decode the final latent back to pixels.

The text embedding (often from a CLIP-like model or T5) steers the denoising toward content that matches the prompt. The 3D structure means each step considers spatial and temporal context.

3. The current model landscape

Frontier text-to-video as of mid-2025:

  • OpenAI Sora โ€” long-form (up to ~60s), strong physics, closed.
  • Google Veo (Veo 2/3) โ€” competitive quality, exposed via Vertex AI and Gemini API.
  • Runway Gen-3 / Gen-4 โ€” earliest commercial offering, mature control surface.
  • Kling โ€” Chinese model, particularly strong on human motion.
  • Luma Dream Machine โ€” fast, web-first.
  • Open source โ€” HunyuanVideo, Mochi, CogVideoX, LTX-Video โ€” viable on a single GPU at 5โ€“10s clips.

All of them produce noticeably different aesthetics. "Try several" is genuinely good advice; outputs differ more than for text models.

4. Modes: T2V, I2V, V2V

Three input modes you'll see:

  • Text-to-video (T2V): just a prompt. Maximum creative freedom, minimum control.
  • Image-to-video (I2V): a starting frame + a prompt describing motion. You control the look; the model controls the motion. Far more reliable for character/brand consistency.
  • Video-to-video (V2V): a reference clip + a prompt. The model preserves motion or composition while restyling. Used heavily for music videos and visual effects.

I2V is what most production teams actually use. Generate the look with an image model (where iteration is cheap), then animate the result. It sidesteps the "every clip looks like a different character" problem.

5. The I2V workflow most teams converge on

Cheap iteration on the look, expensive only once.

flowchart LR
  Idea["Concept"] --> ImgGen["Image model: many tries"]
  ImgGen --> Pick["Pick best frame"]
  Pick --> Prompt["Write motion prompt"]
  Prompt --> VidGen["Video model: I2V"]
  VidGen --> Edit["Trim and assemble"]

6. Prompt patterns that actually work

Video prompts are structured. A bare phrase like "a man walking" wastes the model's capacity. Good prompts cover four axes:

  1. Subject: who/what โ€” including specific traits ("a tall woman with curly red hair in a navy raincoat").
  2. Action: what they're doing, including pace ("jogging slowly along a wet boardwalk").
  3. Setting: where, time of day, weather, mood.
  4. Camera: shot type (close-up, wide), motion (static, slow dolly forward, handheld), lens (35mm, telephoto).

Most models also respect aesthetic keywords ("cinematic", "shot on 16mm", "in the style of Wes Anderson") and can be steered hard by a single strong reference image when in I2V mode.

7. What still goes wrong

Known and recurring failure modes โ€” budget for these:

  • Hands and faces: still fragile, especially in motion. Faces "morph" between frames.
  • Text: signs, screens, T-shirt logos. Comes out as gibberish almost always.
  • Object permanence: a glass that goes off-screen and returns isn't the same glass.
  • Physics: cloth, water, hair occasionally violate basic causality.
  • Long shots: past 10โ€“15 seconds, drift compounds and content slowly mutates.
  • Compositional prompts: "a dog under a table next to a blue chair" โ€” models conflate attributes.

Workflow trick: generate clips in 4โ€“8s pieces, then edit them together. Avoids most of the long-shot drift.

8. Cost and latency reality check

Video is expensive. Rough ballpark for a 5-second 1080p clip from a frontier model: 0.50โ€“0.50โ€“3.00 per generation, and 30โ€“120 seconds of wall time. Multiply by however many iterations you need.

Budget at least 5x your final clip count in generations โ€” the model misses on the first try more often than image models do, and prompt iteration is part of the workflow rather than the exception.

For cost-sensitive use: an open-source model on a single H100 can produce a 5s clip in ~2 minutes at near-zero per-unit cost, if you have the GPU sitting around. For one-off production, the API is cheaper than hardware. For ongoing volume, it flips.

Check your understanding

The lesson ends with a 5-question quiz. Take it in the player above to see your score.

  1. Why do most video diffusion models generate frames jointly across time rather than one frame at a time?
    • Joint generation is faster on GPUs
    • Independent frames produce flickering inconsistency โ€” the model needs temporal context to keep characters and objects stable
    • It saves memory
    • Single-frame diffusion isn't possible technically
  2. You need to generate 10 video clips that all feature the same character in different scenes. Best approach?
    • Use text-to-video with a very detailed character description in every prompt
    • Use image-to-video: lock the look with one image, then animate that image with different motion prompts
    • Use video-to-video with a stock clip and replace the character
    • Train your own video model on the character
  3. Which output is video models *least* likely to get right today?
    • A wide shot of a forest in autumn
    • A close-up of an espresso being poured
    • A sign in the background that reads "FRESH PASTA"
    • A car driving along a beach at sunset
  4. Your client wants a 30-second product spot. What's the standard workflow given current model limitations?
    • Generate a single 30s clip with a long detailed prompt
    • Generate several 4โ€“8s clips and edit them together
    • Use one model for the first 15s and a different model for the rest
    • Generate at 720p first to save cost
  5. What does the *text encoder* contribute to a diffusion-based video model?
    • It generates the final video frames directly
    • It produces an embedding of the prompt that conditions each denoising step
    • It denoises the latent tensor
    • It encodes the video back into pixels

Related lessons