[
  {
    "key": "google_veo_3_1_vertex",
    "vendor": "Google",
    "model": "Veo 3.1",
    "model_id": "veo-3.1-generate-001",
    "surface": "Vertex AI API",
    "plan": "API (Vertex AI / Gemini Enterprise Agent Platform; no consumer plan)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "Reference-image-to-video supports 8 seconds only. Output up to 4K.",
    "status": "available",
    "notes": "Page text: 'Video lengths: 4, 6, or 8 seconds; reference image to video only supports 8 seconds.' The page gives no date other than release (2025-11-17).",
    "source_url": "https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/veo/3-1-generate",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_veo_3_1_fast_vertex",
    "vendor": "Google",
    "model": "Veo 3.1 Fast",
    "model_id": "veo-3.1-fast-generate-001",
    "surface": "Vertex AI API",
    "plan": "API (Vertex AI / Gemini Enterprise Agent Platform; no consumer plan)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "Output up to 1080p (no 4K).",
    "status": "available",
    "notes": "Page text: 'Video lengths: 4, 6, or 8 seconds.'",
    "source_url": "https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/veo/3-1-generate",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_veo_3_1_lite_vertex",
    "vendor": "Google",
    "model": "Veo 3.1 Lite",
    "model_id": "veo-3.1-lite-generate-001",
    "surface": "Vertex AI API",
    "plan": "API (Vertex AI / Gemini Enterprise Agent Platform; no consumer plan)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "Reference images not supported.",
    "status": "preview",
    "notes": "Preview model, released 2026-04-02 per the page.",
    "source_url": "https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/veo/3-1-generate",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_veo_3_1_extend_vertex",
    "vendor": "Google",
    "model": "Veo 3.1 (extend video)",
    "model_id": "",
    "surface": "Vertex AI API",
    "plan": "API (Vertex AI / Gemini Enterprise Agent Platform; no consumer plan)",
    "hosted_by": "",
    "limit_kind": "extended_total",
    "min_seconds": null,
    "max_seconds": 37,
    "allowed_seconds": null,
    "per_extension_seconds": 7,
    "conditions": "Input must be MP4, 1 to 30 seconds, 24 fps, 720p/1080p/4k, 9:16 or 16:9.",
    "status": "available",
    "notes": "'Videos can be extended up to ... 37 seconds for Veo'; 'The extended length is 7 seconds.' The page states no limit on how many extensions can be chained.",
    "source_url": "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/video/extend-videos",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_gemini_omni_flash_extend_vertex",
    "vendor": "Google",
    "model": "Gemini Omni Flash (extend video)",
    "model_id": "gemini-omni-1.1-flash-preview",
    "surface": "Vertex AI API",
    "plan": "API (Vertex AI / Gemini Enterprise Agent Platform; no consumer plan)",
    "hosted_by": "",
    "limit_kind": "extended_total",
    "min_seconds": null,
    "max_seconds": 40,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "",
    "status": "preview",
    "notes": "'Videos can be extended up to 40 seconds for Gemini Omni Flash.' Per-extension length not stated on this page.",
    "source_url": "https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/video/extend-videos",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_flow_veo_3_1_quality",
    "vendor": "Google",
    "model": "Veo 3.1 Quality",
    "model_id": "",
    "surface": "Google Flow",
    "plan": "Google Flow (AI Plus, Pro, Ultra); the page names no per-plan clip cap",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "No Ingredients, Extend or Video to Video on this model.",
    "status": "available",
    "notes": "Flow models page: '4s, 6s, 8s video lengths' for Text to Video and Frames.",
    "source_url": "https://support.google.com/flow/answer/16352836?hl=en",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_flow_veo_3_1_fast",
    "vendor": "Google",
    "model": "Veo 3.1 Fast",
    "model_id": "",
    "surface": "Google Flow",
    "plan": "Google Flow (AI Plus, Pro, Ultra); the page names no per-plan clip cap",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "Ingredients/References: 8s videos only. No Extend.",
    "status": "available",
    "notes": "Flow models page: '4s, 6s, 8s video lengths'.",
    "source_url": "https://support.google.com/flow/answer/16352836?hl=en",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_flow_veo_3_1_lite",
    "vendor": "Google",
    "model": "Veo 3.1 Lite",
    "model_id": "",
    "surface": "Google Flow",
    "plan": "Google Flow (AI Plus, Pro, Ultra); the page names no per-plan clip cap",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 8,
    "allowed_seconds": [
      4,
      6,
      8
    ],
    "per_extension_seconds": null,
    "conditions": "Ingredients/References and Extend: 8s videos only.",
    "status": "available",
    "notes": "Flow models page: '4s, 6s, 8s video lengths'.",
    "source_url": "https://support.google.com/flow/answer/16352836?hl=en",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "google_flow_gemini_omni_flash_1_1",
    "vendor": "Google",
    "model": "Gemini Omni Flash 1.1",
    "model_id": "",
    "surface": "Google Flow",
    "plan": "Google Flow (AI Plus, Pro, Ultra); the page names no per-plan clip cap",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 10,
    "allowed_seconds": [
      4,
      6,
      8,
      10
    ],
    "per_extension_seconds": null,
    "conditions": "Video to Video editing: up to 10s.",
    "status": "available",
    "notes": "Flow models page: '4s, 6s, 8s, 10s video lengths'. The page says all users can access Omni models; the Flow get-started page says a plan is required, and the two are not reconciled.",
    "source_url": "https://support.google.com/flow/answer/16352836?hl=en",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "openai_sora_2_api",
    "vendor": "OpenAI",
    "model": "Sora 2",
    "model_id": "sora-2",
    "surface": "OpenAI API (Videos API)",
    "plan": "API (pay per second)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 20,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "Up to six extensions of up to 20 seconds each, 120 seconds total.",
    "status": "shut_down",
    "notes": "Guide: 'Both sora-2 and sora-2-pro support 16- and 20-second generations.' The page never lists every accepted value (examples use 8). Shut down 2026-09-24 per OpenAI's deprecations page. Consumer Sora app limits are not on a page a program can read (MANUAL).",
    "source_url": "https://developers.openai.com/api/docs/guides/video-generation",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "status_check": "live: shut down 2026-09-24. OpenAI's deprecations page, re-read 2026-11-13, lists sora-2 and the Videos API under past deprecations with shutdown date Sep 24, 2026 (notice Mar 24, 2026)",
    "checked": "2026-11-12"
  },
  {
    "key": "openai_sora_2_pro_api",
    "vendor": "OpenAI",
    "model": "Sora 2 Pro",
    "model_id": "sora-2-pro",
    "surface": "OpenAI API (Videos API)",
    "plan": "API (pay per second)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 20,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "Up to six extensions of up to 20 seconds each, 120 seconds total. 1080p output.",
    "status": "shut_down",
    "notes": "Same guide sentence as Sora 2. Shut down 2026-09-24 per OpenAI's deprecations page.",
    "source_url": "https://developers.openai.com/api/docs/guides/video-generation",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "status_check": "live: shut down 2026-09-24. OpenAI's deprecations page, re-read 2026-11-13, lists sora-2-pro and the Videos API under past deprecations with shutdown date Sep 24, 2026 (notice Mar 24, 2026)",
    "checked": "2026-11-12"
  },
  {
    "key": "runway_gen4_5_api",
    "vendor": "Runway",
    "model": "Gen-4.5",
    "model_id": "gen4.5",
    "surface": "Runway API",
    "plan": "API (credit-based; the page names no per-plan clip cap)",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": 2,
    "max_seconds": 10,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "",
    "status": "available",
    "notes": "Runway's Python SDK (generated from its API spec): 'Must be an integer from 2 to 10.' Gen-4 Turbo's SDK entry states no range (MANUAL).",
    "source_url": "https://raw.githubusercontent.com/runwayml/sdk-python/main/src/runwayml/types/image_to_video_create_params.py",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "runway_kling_4_0_hosted",
    "vendor": "Kling",
    "model": "Kling 4.0",
    "model_id": "kling_4",
    "surface": "Runway API",
    "plan": "API (credit-based; the page names no per-plan clip cap)",
    "hosted_by": "Runway",
    "limit_kind": "per_clip",
    "min_seconds": 3,
    "max_seconds": 30,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "",
    "status": "available",
    "notes": "Runway's model page: '720p or 1080p video for 3–30 seconds'. This is Runway's wording for its hosted copy, not Kling's own page (unreadable).",
    "source_url": "https://docs.dev.runwayml.com/guides/models/",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "runway_kling_3_0_pro_hosted",
    "vendor": "Kling",
    "model": "Kling 3.0 Pro",
    "model_id": "",
    "surface": "Runway API",
    "plan": "API (credit-based; the page names no per-plan clip cap)",
    "hosted_by": "Runway",
    "limit_kind": "per_clip",
    "min_seconds": 3,
    "max_seconds": 15,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "",
    "status": "available",
    "notes": "Runway's model page: '1080p text and image to video, 3–15 seconds'. Runway's wording, not Kling's.",
    "source_url": "https://docs.dev.runwayml.com/guides/models/",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "runway_kling_2_5_turbo_pro_hosted",
    "vendor": "Kling",
    "model": "Kling 2.5 Turbo Pro",
    "model_id": "",
    "surface": "Runway API",
    "plan": "API (credit-based; the page names no per-plan clip cap)",
    "hosted_by": "Runway",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 10,
    "allowed_seconds": [
      5,
      10
    ],
    "per_extension_seconds": null,
    "conditions": "",
    "status": "available",
    "notes": "Runway's model page: 'Text and image to video at 5 or 10 seconds'. Runway's wording, not Kling's.",
    "source_url": "https://docs.dev.runwayml.com/guides/models/",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "runway_seedance_2_5_hosted",
    "vendor": "ByteDance",
    "model": "Seedance 2.5",
    "model_id": "seedance2_5",
    "surface": "Runway API",
    "plan": "API (credit-based; the page names no per-plan clip cap)",
    "hosted_by": "Runway",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 30,
    "allowed_seconds": null,
    "per_extension_seconds": null,
    "conditions": "",
    "status": "available",
    "notes": "Runway's model page: 'Cinematic video up to 30 seconds at 480p, 720p, and 1080p'. Runway's wording, not ByteDance's (BytePlus docs unreadable).",
    "source_url": "https://docs.dev.runwayml.com/guides/models/",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "minimax_hailuo_2_3_api",
    "vendor": "MiniMax",
    "model": "Hailuo 2.3",
    "model_id": "MiniMax-Hailuo-2.3",
    "surface": "MiniMax API",
    "plan": "API",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 10,
    "allowed_seconds": [
      6,
      10
    ],
    "per_extension_seconds": null,
    "conditions": "10 seconds only at 768P; 1080P only at 6 seconds.",
    "status": "available",
    "notes": "API reference: 'Video length (seconds). Default is 6.' with a duration-by-resolution table.",
    "source_url": "https://platform.minimax.io/docs/api-reference/video-generation-t2v",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  },
  {
    "key": "minimax_hailuo_02_api",
    "vendor": "MiniMax",
    "model": "Hailuo 02",
    "model_id": "MiniMax-Hailuo-02",
    "surface": "MiniMax API",
    "plan": "API",
    "hosted_by": "",
    "limit_kind": "per_clip",
    "min_seconds": null,
    "max_seconds": 10,
    "allowed_seconds": [
      6,
      10
    ],
    "per_extension_seconds": null,
    "conditions": "10 seconds only at 768P; 1080P only at 6 seconds.",
    "status": "available",
    "notes": "Same table as Hailuo 2.3 on the API reference.",
    "source_url": "https://platform.minimax.io/docs/api-reference/video-generation-t2v",
    "source_updated": "2026-11-05",
    "source_check": "live: vendor page re-read and key phrases matched",
    "checked": "2026-11-12"
  }
]
