promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_

The 2026 video model lineup — what each one is actually good at — step 9 of 9

Checkpoint

One last thing before we move on. pass this to mark the lesson done, or skip and keep moving. hop to the next when you're ready.

Final footage drill. Write lint_video_plan(plan, as_of) that takes a plan dict and an as_of date string ("YYYY-MM-DD") and returns "FAIL", "WARN", or "PASS".

Plan keys you will see:

  • video_model (str)
  • api_method (str): "interactions.create", "generate_videos", "generateContent", or "generate_images"
  • first_frame_model (str, may be "")
  • first_frame_method (str, may be "")
  • production (bool): True if this is the production default

Rules, evaluated in order. FIRST matching rule wins:

  1. If video_model starts with "veo-2.0-" or "veo-3.0-""FAIL".
  2. If first_frame_model starts with "imagen-4""FAIL".
  3. If first_frame_method == "generate_images""FAIL".
  4. If video_model == "gemini-omni-1.1-flash" AND api_method == "generate_videos""FAIL" (Omni goes through interactions.create).
  5. If video_model starts with "sora-2":
    • as_of >= "2026-09-24""FAIL"
    • else if production is True → "WARN"
    • else → "PASS"
  6. If video_model == "gemini-omni-flash-preview":
    • as_of >= "2026-09-30""FAIL"
    • else → "WARN"
  7. Else → "PASS"

Fourteen plans run. Expected output:

dead_veo30                 FAIL
dead_veo20                 FAIL
imagen4_frame              FAIL
generate_images_frame      FAIL
omni_generate_videos       FAIL
sora_prod_sep01            WARN
sora_prod_sep25            FAIL
omni_old_preview_sep01     WARN
omni_old_preview_oct01     FAIL
veo31_preview              PASS
veo31_agent_001            PASS
omni_interactions          PASS
flash_image_frame          PASS
oneshot_omni_i2v           PASS

full-screen editor opens — close anytime to keep reading.