> ## Documentation Index
> Fetch the complete documentation index at: https://usefulai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Best Video Understanding Models in 2026

export const models = [{
  rank: 1,
  name: "Gemini 3.1 Pro",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview",
  bestFor: "Best overall video understanding",
  score: "100",
  price: "$4.32 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio included · 3 hours",
  customLabel: "Video support"
}, {
  rank: 2,
  name: "Doubao Seed 2.0 Pro",
  dev: "ByteDance",
  icon: "/images/icons/seed.bytedance.com.png",
  url: "https://www.volcengine.com/product/doubao/",
  bestFor: "High-scoring audiovisual analysis",
  score: "87",
  price: "$0.71 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio included · Unclear",
  customLabel: "Video support"
}, {
  rank: 3,
  name: "Gemini 3.5 Flash",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://ai.google.dev/gemini-api/docs/models/gemini-3.5-flash",
  bestFor: "Fast, high-volume video analysis",
  score: "83",
  price: "$1.62 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio included · 3 hours",
  customLabel: "Video support"
}, {
  rank: 4,
  name: "Kimi K2.5",
  dev: "Moonshot AI",
  icon: "/images/icons/kimi.com.png",
  url: "https://www.kimi.com/ai-models/kimi-k2-5",
  bestFor: "Open weights with hosted access",
  score: "81",
  price: "$1.10 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio unclear · Unclear",
  customLabel: "Video support"
}, {
  rank: 5,
  name: "MiMo V2.5",
  dev: "Xiaomi",
  icon: "/images/icons/mimo.xiaomi.com.png",
  url: "https://mimo.mi.com/docs/en-US/quick-start/model",
  bestFor: "Open audiovisual self-hosting",
  score: "76",
  price: "$0.021 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio included · Unclear",
  customLabel: "Video support"
}, {
  rank: 6,
  name: "Qwen3.7 Plus",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://www.alibabacloud.com/blog/qwen3-7-plus-multimodal-agent-intelligence_603206",
  bestFor: "Long hosted video input",
  score: "75",
  price: "$0.66 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio separate · 2 hours",
  customLabel: "Video support"
}, {
  rank: 7,
  name: "Qwen3.5 397B A17B",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3.5-397B-A17B",
  bestFor: "Open-weight benchmark performance",
  score: "74",
  price: "$0.01 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio separate · Unclear",
  customLabel: "Video support"
}, {
  rank: 8,
  name: "Qwen3.5 27B",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3.5-27B",
  bestFor: "High-end local video model",
  score: "47",
  price: "$0.005 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio separate · Unclear",
  customLabel: "Video support"
}, {
  rank: 9,
  name: "Gemma 4 31B",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://huggingface.co/google/gemma-4-31B",
  bestFor: "Short local video clips",
  score: "42",
  price: "$0.03 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio separate · 1 minute",
  customLabel: "Video support"
}, {
  rank: 10,
  name: "Qwen3.5 Omni Plus",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://www.alibabacloud.com/help/en/model-studio/qwen-omni",
  bestFor: "Native audiovisual video",
  score: "42",
  price: "$0.334 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio included · 1 hour",
  customLabel: "Video support"
}, {
  rank: 11,
  name: "Pegasus 1.5",
  dev: "TwelveLabs",
  icon: "/images/icons/twelvelabs.io.png",
  url: "https://www.twelvelabs.io/pegasus",
  bestFor: "Structured long-video analysis",
  score: "33",
  price: "$1.75 / video-hour",
  license: "Proprietary",
  custom: "Upload video · Audio included · 2 hours",
  customLabel: "Video support"
}, {
  rank: 12,
  name: "Qwen3.6 35B A3B",
  dev: "Alibaba",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3.6-35B-A3B",
  bestFor: "Sparse, efficient local model",
  score: "24",
  price: "$0.015 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio separate · Unclear",
  customLabel: "Video support"
}, {
  rank: 13,
  name: "GLM-4.6V Flash",
  dev: "Z.ai",
  icon: "/images/icons/z.ai.png",
  url: "https://huggingface.co/zai-org/GLM-4.6V-Flash",
  bestFor: "Free hosted and local",
  score: "22",
  price: "Free",
  license: "Open weight",
  custom: "Upload video · Audio separate · 1 hour",
  customLabel: "Video support"
}, {
  rank: 14,
  name: "SmolVLM2 2.2B",
  dev: "Hugging Face",
  icon: "/images/icons/huggingface.co.png",
  url: "https://huggingface.co/HuggingFaceTB/SmolVLM2-2.2B-Instruct",
  bestFor: "Laptop-friendly local video",
  score: "9",
  price: "$0.01 / video-hour",
  license: "Open weight",
  custom: "Upload video · Audio separate · Unclear",
  customLabel: "Video support"
}];

export const Fav = ({icon, size = "h-4 w-4"}) => <img src={icon} alt="" noZoom className={"relative -top-px mr-1 inline rounded-sm object-contain " + size} />;

export const LicenseBadge = ({license}) => license === "Open weight" ? <span className="inline-flex items-center rounded bg-emerald-50 px-1.5 py-[2px] text-xs font-medium leading-4 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-400">Open weight</span> : <span className="inline-flex items-center rounded bg-zinc-100 px-1.5 py-[2px] text-xs font-medium leading-4 text-zinc-600 dark:bg-white/10 dark:text-zinc-300">Proprietary</span>;

export const BestForChip = ({children}) => <span className="inline-flex min-w-0 max-w-full items-center rounded bg-sky-50 px-1.5 py-[2px] dark:bg-sky-500/10">
    <span className="truncate text-xs font-medium leading-4 text-sky-700 dark:text-sky-400">{children}</span>
  </span>;

export const HeaderTip = ({label, tip}) => <span className="inline-flex items-center gap-1.5">
    <span>{label}</span>
    <Tooltip tip={tip}>
      <span className="relative top-0.5 inline-flex cursor-pointer text-zinc-500 transition-opacity hover:opacity-70 dark:text-zinc-400">
        <Icon icon="circle-info" size={12} color="currentColor" />
        <span className="sr-only">About {label.toLowerCase()}</span>
      </span>
    </Tooltip>
  </span>;

export const ModelCard = ({model, children}) => <section className="not-prose my-5 rounded-lg border border-zinc-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/[0.03]">
    <div className="mb-3"><BestForChip>{model.bestFor}</BestForChip></div>
    <div className="flex items-center gap-3">
      <img src={model.icon} alt={model.dev + " logo"} noZoom className="h-10 w-10 shrink-0 rounded-lg object-contain" />
      <div className="min-w-0 flex-1">
        <h2 className="m-0 max-w-full text-xl font-semibold leading-7 tracking-normal">
          <a href={model.url} target="_blank" rel="noreferrer" className="group inline-flex min-w-0 max-w-full items-center gap-1.5 no-underline text-zinc-950 dark:text-white">
            <span className="min-w-0 break-words"><span className="underline-offset-4 group-hover:underline group-focus-visible:underline">{model.name}</span> <span className="font-normal text-zinc-500 dark:text-zinc-400">({model.dev})</span></span>
            <span aria-hidden="true" className="flex shrink-0 text-zinc-400 transition-colors group-hover:text-zinc-900 group-focus-visible:text-zinc-900 dark:text-zinc-500 dark:group-hover:text-white dark:group-focus-visible:text-white"><Icon icon="arrow-up-right" size={12} color="currentColor" /></span>
          </a>
        </h2>
        <div className="mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-[13px] leading-5 uai-ink-muted">
          <LicenseBadge license={model.license} />
          <span aria-hidden="true">∙</span>
          <span>Score <span className="tabular-nums text-zinc-950 dark:text-white">{model.score}</span></span>
          <span aria-hidden="true">∙</span>
          <span>Price <span className="tabular-nums text-zinc-950 dark:text-white">{model.price}</span></span>
          {model.custom && <><span aria-hidden="true">∙</span><span>{model.customLabel} <span className="tabular-nums text-zinc-950 dark:text-white">{model.custom}</span></span></>}
        </div>
      </div>
    </div>
    {children}
  </section>;

export const Take = ({children}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>;

export const ST = ({label, children}) => <div className="not-prose mt-4">
    <div className="text-sm font-semibold text-zinc-950 dark:text-white">{label}</div>
    <div className="mt-1 flex flex-col gap-2.5 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>
  </div>;

export const AccessBullets = ({rows}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">
    <div className="font-semibold text-zinc-950 dark:text-white">How to access</div>
    <div className="mt-1.5 flex flex-col gap-1.5">
      {rows.map(([key, body]) => <span key={key} className="flex items-baseline gap-2.5"><span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-700 dark:bg-zinc-300" /><span><span className="font-semibold text-zinc-950 dark:text-white">{key}</span> — {body}</span></span>)}
    </div>
  </div>;

export const Alt = ({icon, name, dev, url, children}) => <span className="flex items-baseline gap-2.5">
    <span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-300 dark:bg-zinc-600" />
    <span><Fav icon={icon} /><a href={url} target="_blank" rel="noreferrer" className="font-medium text-zinc-950 underline underline-offset-2 dark:text-white">{name}</a> <span className="uai-ink-muted">({dev})</span> — {children}</span>
  </span>;

<div className="not-prose -mt-2 mb-8 flex flex-wrap items-center gap-x-2 text-sm text-zinc-800 dark:text-zinc-200 lg:-mt-5" style={{ paddingLeft: "2px" }}>
  <span className="inline-flex items-center gap-1.5"><Icon icon="clock-rotate-left" size={10} color="currentColor" /> Updated <time dateTime="2026-07-12">July 12, 2026</time></span>
</div>

Video understanding models take a whole video and answer questions about it, reasoning across time instead of generating footage. The hard part: scores swing with frame sampling and audio, and some models need frames extracted first. We ranked 14 by benchmark, price, and real access.

## Best Video Understanding Models

<div className="uai-overview-breakout not-prose my-5">
  <input type="checkbox" id="models-more" className="fy-more-toggle sr-only" aria-label={"Show all 14 video understanding models"} />

  <div className="fy-more-table overflow-x-auto rounded-lg border border-zinc-200 bg-white dark:border-white/10 dark:bg-white/[0.03]">
    <div className="table text-sm" style={{ width: "100%" }}>
      <div className="table-header-group bg-zinc-50/60 dark:bg-white/[0.02]">
        <div className="table-row">
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">#</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Model</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Best for</span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Score" tip={"UsefulAI's 0-100 score combines normalized Video-MME-v2 results with and without subtitle and audio inputs. Higher is better."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Price" tip={"Estimated input cost to process one hour of source video. Sampling, resolution, audio, output, caching, and tools can change the real cost."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="License" tip="Proprietary means no public model weights. Open weight means weights are available, though exact licenses and commercial-use terms vary." />
          </span>
        </div>
      </div>

      <div className="table-row-group">
        {models.map((model, index) => (
                        <a key={model.name} href={model.url} target="_blank" rel="noreferrer" className={"table-row no-underline transition-colors hover:bg-zinc-50/60 dark:hover:bg-white/[0.02]" + (models.length > 9 && index >= 7 ? " fy-more-row" : "")}>
                          <span className="table-cell w-8 whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] tabular-nums dark:border-white/5"><span className="sr-only">Rank </span><span className="uai-ink-muted">{model.rank}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="flex items-center gap-2.5"><Fav icon={model.icon} /><span className="text-sm font-semibold leading-5 text-zinc-950 dark:text-white">{model.name}</span></span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] leading-5 text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Best for: </span>{model.bestFor}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Score: </span>{model.score}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums dark:border-white/5"><span className="sr-only">Price: </span><span className="uai-ink-muted">{model.price}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="sr-only">License: </span><LicenseBadge license={model.license} /></span>
                        </a>
                      ))}
      </div>
    </div>
  </div>

  {models.length > 9 && <div className="fy-more-pill mt-3 flex justify-center">
      <label htmlFor="models-more" className="inline-flex cursor-pointer items-center gap-1.5 rounded-full border border-zinc-200 px-4 py-1.5 text-[13px] font-medium text-zinc-600 transition-colors hover:text-zinc-900 dark:border-white/15 dark:text-zinc-300 dark:hover:text-white">
        <span className="fy-more-open inline-flex items-center gap-1.5">Show {models.length - 7} more <Icon icon="chevron-down" size={13} /></span>
        <span className="fy-more-close items-center gap-1.5">Show less <Icon icon="chevron-up" size={13} /></span>
      </label>
    </div>}
</div>

***

<ModelCard model={models[0]}>
  <Take>This is our top current pick for long audiovisual analysis, reading hours of footage and its audio track without you touching a single frame.</Take>

  <ST label="Strengths:">
    <div>It handles genuinely long videos - up to three hours - and processes the embedded audio alongside the visuals, so speech, on-screen text, and action all land in one request.</div>
    <div>For summarizing, searching, and reasoning across a full video, nothing here is more reliable or needs less setup.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is the priciest way to analyze an hour of video here, so for high-volume or latency-sensitive jobs, Gemini 3.5 Flash gives the same direct workflow for less.</div>
    <div>Its score uses the earlier Gemini 3 Pro result; Doubao Seed 2.0 Pro is the strongest model measured directly.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://gemini.google.com/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Gemini</a>.</span>],
["API", <span>Accessible via <a href="https://ai.google.dev/gemini-api/docs/models/gemini-3.1-pro-preview" target="_blank" rel="noreferrer" className="underline underline-offset-2">Gemini API</a>, <a href="https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-1-pro" target="_blank" rel="noreferrer" className="underline underline-offset-2">Vertex AI</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[1]}>
  <Take>The strongest directly measured proprietary model here, taking a video and its audio in one call and landing just behind the top Gemini.</Take>

  <ST label="Strengths:">
    <div>It reads visuals and the embedded audio track in one pass, so speech-heavy footage needs no separate transcription step.</div>
    <div>Among hosted models it posts the best directly measured result here and undercuts the top Gemini on price by a wide margin - strong value if you want near-frontier quality.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Its documented maximum duration is unclear, so if you need a guaranteed multi-hour window, Gemini 3.1 Pro and Pegasus 1.5 publish firm limits.</div>
    <div>The listed price is a rough same-provider estimate, not a firm Ark quote, so confirm current rates before you budget.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.volcengine.com/docs/82379/1795150" target="_blank" rel="noreferrer" className="underline underline-offset-2">Volcano Engine Ark</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[2]}>
  <Take>The value pick in Google's video lineup: the same direct video-and-audio workflow as 3.1 Pro, faster and much cheaper, with a small quality step down.</Take>

  <ST label="Strengths:">
    <div>You get the same direct video workflow - upload footage up to three hours long, with visuals and the audio track read together - but faster and cheaper than 3.1 Pro.</div>
    <div>For high-volume summarizing, searching, and Q\&A over long video, this is the practical default when peak quality is not essential.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>As a Flash-tier model it trails 3.1 Pro and Doubao Seed 2.0 Pro on the hardest temporal reasoning, so reach for the Pro when accuracy matters more than speed or cost.</div>
    <div>For pure visual analysis without audio, cheaper open models close much of the gap.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://gemini.google.com/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Gemini</a>.</span>],
["API", <span>Accessible via <a href="https://ai.google.dev/gemini-api/docs/models/gemini-3.5-flash" target="_blank" rel="noreferrer" className="underline underline-offset-2">Gemini API</a>, <a href="https://cloud.google.com/vertex-ai/generative-ai/docs/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Vertex AI</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[3]}>
  <Take>The open-weight model that feels like a hosted one, with a strong benchmark result, a first-party app and API, and permissive weights behind it.</Take>

  <ST label="Strengths:">
    <div>It pairs a top-tier open-weight benchmark result with something most open models lack: a polished first-party app and API, so you can start in a browser and move to production without hosting anything.</div>
    <div>The Modified MIT weights are there if you later want full control.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Its audio handling and maximum duration are not clearly documented, so for guaranteed audiovisual or long-video work, Gemini's models are safer. Kimi K2.6 is newer, but K2.5 is the version with a real measured score.</div>
    <div>Despite open weights, self-hosting needs server infrastructure, not a desktop.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://www.kimi.com/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Kimi</a>.</span>],
["API", <span>Accessible via <a href="https://platform.moonshot.ai/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Moonshot API</a>, <a href="https://www.alibabacloud.com/help/en/model-studio/kimi-api" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
["Run locally", <span>Open weights are available from <a href="https://huggingface.co/moonshotai/Kimi-K2.5" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>, but in practice this needs self-hosting infrastructure, not a local machine.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[4]}>
  <Take>A rare open-weight model that takes direct video with its embedded audio, under a permissive MIT license and backed by a first-party API.</Take>

  <ST label="Strengths:">
    <div>Most open models make you strip the audio and run a separate speech pipeline; this one reads the embedded track directly, so audiovisual understanding stays in one model.</div>
    <div>MIT weights plus a first-party API make it a flexible pick for teams that want to own the stack.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Maximum duration is undocumented, so for guaranteed long-video jobs it is a gamble. Running the weights yourself needs server-grade GPUs, not a laptop, and its score is a successor estimate rather than a direct benchmark result.</div>
    <div>For higher measured audiovisual quality, Doubao Seed 2.0 Pro is the stronger pick.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://mimo.mi.com/docs/en-US/quick-start/model" target="_blank" rel="noreferrer" className="underline underline-offset-2">Xiaomi MiMo API</a>.</span>],
["Run locally", <span>Open weights are available from <a href="https://huggingface.co/XiaomiMiMo/MiMo-V2.5" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>, but in practice this needs self-hosting infrastructure, not a local machine.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[5]}>
  <Take>Alibaba's hosted flagship for long video, taking clips up to two hours through a single API, though you handle the audio track yourself.</Take>

  <ST label="Strengths:">
    <div>It accepts long footage - up to two hours in one request - through a straightforward hosted API, with no weights to manage.</div>
    <div>If your work is visual long-video summarization and Q\&A and you want a managed endpoint rather than self-hosting, it is a solid, mid-priced option.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Audio is handled separately, so speech-heavy work needs your own transcription step - Gemini's models and Doubao Seed 2.0 Pro read the track natively.</div>
    <div>Its score is a same-family estimate rather than a direct benchmark result; the price is calculated from Alibaba's current documented visual budget and rate.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/vision-model/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[6]}>
  <Take>The highest-scoring open-weight model measured here, but its size makes "open" mostly theoretical unless you rent serious GPU infrastructure.</Take>

  <ST label="Strengths:">
    <div>It posts the best directly measured benchmark result of any open model here, so if you want frontier-adjacent video understanding with public weights and no vendor lock-in, this is the ceiling.</div>
    <div>You can route it through whichever host is cheapest or fits your compliance needs.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It is far too large for a personal machine, so in practice you rent hosted GPUs just like a proprietary API. Qwen3.6 is newer, audio is separate, and its rock-bottom price is a low-confidence estimate.</div>
    <div>For practical local Qwen, drop to the 27B.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/vision-model/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
["Run locally", <span>Open weights are available from <a href="https://huggingface.co/Qwen/Qwen3.5-397B-A17B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>, but in practice this needs self-hosting infrastructure, not a local machine.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[7]}>
  <Take>The Qwen open model you can actually run yourself if you own a high-memory machine, trading a chunk of quality for real local control.</Take>

  <ST label="Strengths:">
    <div>It keeps a meaningfully stronger measured result than most small open models while staying runnable on a single high-end machine, so you get private, offline video understanding without renting a cluster.</div>
    <div>For a self-hosted open model that is both capable and practical, it hits a rare balance.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It still needs a high-memory GPU, so it is not laptop-friendly - for that, GLM-4.6V Flash or SmolVLM2 2.2B run on ordinary hardware.</div>
    <div>Audio is separate and its quality is well behind the hosted frontier. Qwen3.5 397B scores far higher if you can host it.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/vision-model/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3.5-27B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[8]}>
  <Take>An Apache-2.0 open model with genuine built-in video support, but a one-minute ceiling that limits it to short clips.</Take>

  <ST label="Strengths:">
    <div>It has real processor-level video support and a permissive Apache-2.0 license, so you can build short-clip understanding into your own product without usage restrictions.</div>
    <div>Running on a high-end machine, it keeps your footage private and off third-party servers.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The official maximum is one minute, so it is out for anything longer than a short clip - Qwen3.7 Plus or Pegasus 1.5 handle hours.</div>
    <div>Audio is separate, it needs a high-end GPU, and the listed price uses a third-party route rather than a Google endpoint.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://openrouter.ai/google/gemma-4-31b-it/api" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenRouter</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> after downloading weights from <a href="https://huggingface.co/google/gemma-4-31B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[9]}>
  <Take>One of the few Qwen models that reads a video's embedded audio directly, making it a natural fit for speech-and-visual footage up to an hour.</Take>

  <ST label="Strengths:">
    <div>Unlike most of the Qwen video lineup, it processes the embedded audio track alongside the visuals, so dialogue, narration, and on-screen action are understood together in one hosted call.</div>
    <div>For audiovisual clips up to an hour where speech matters, it is a convenient managed option.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>On measured quality it lands well below the hosted leaders, so for demanding temporal reasoning, Gemini 3.5 Flash or Doubao Seed 2.0 Pro are stronger.</div>
    <div>Its one-hour cap trails Qwen3.7 Plus and Pegasus 1.5, and despite the family's open reputation, this endpoint is proprietary.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/qwen-omni" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[10]}>
  <Take>A purpose-built video model that turns hours of footage into timestamped, structured JSON, aimed at segmentation and retrieval rather than open chat.</Take>

  <ST label="Strengths:">
    <div>It is built for one job and does it well: ingest a video up to two hours long and return timestamped summaries, chapters, and structured JSON against your own schema, with the audio track included.</div>
    <div>For segmentation, moment retrieval, and metadata extraction, a specialist beats a general chat model.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>On a video-QA benchmark it scores near the bottom, but that is not what it optimizes for - it is a structured-analysis tool, not an open-ended reasoner.</div>
    <div>For free-form questions or summaries about a video's content, Gemini's models or Doubao Seed 2.0 Pro are far stronger.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://playground.twelvelabs.io/" target="_blank" rel="noreferrer" className="underline underline-offset-2">TwelveLabs Playground</a>.</span>],
["API", <span>Accessible via <a href="https://docs.twelvelabs.io/api-reference/analyze-videos" target="_blank" rel="noreferrer" className="underline underline-offset-2">TwelveLabs Analyze API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[11]}>
  <Take>A newer sparse open Qwen with only a few billion active parameters, efficient to run on a high-end machine but weaker than the Qwen3.5 leaders.</Take>

  <ST label="Strengths:">
    <div>Its sparse design activates only a small slice of its parameters per step, so it runs more efficiently than dense models its size and stays viable on a high-end local machine.</div>
    <div>If you want a current-generation open Qwen you can self-host with headroom to spare, it fits.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Its measured video quality is much weaker than the older Qwen3.5 27B and 397B, so newer does not mean better here. Audio is separate and duration is undocumented.</div>
    <div>If you can run it locally, GLM-4.6V Flash scores higher on lighter hardware.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/vision-model/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3.6-35B-A3B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[12]}>
  <Take>A compact MIT model you can use two ways for free: a currently no-cost first-party API, or local deployment on ordinary hardware.</Take>

  <ST label="Strengths:">
    <div>Two things make it stand out: a first-party API that is currently free, and weights small enough to run on a typical machine.</div>
    <div>That combination lets you prototype in the cloud at no cost and move fully offline when you need privacy, all under a permissive MIT license.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Its benchmark quality sits well below the leaders, so it is best for lighter summarization and tagging, not demanding temporal reasoning - reach for a hosted frontier model there.</div>
    <div>Audio is separate, and "currently free" can change, so do not build a long-term budget around it.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://chat.z.ai/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Z.ai Chat</a>.</span>],
["API", <span>Accessible via <a href="https://docs.z.ai/guides/vlm/glm-4.6v" target="_blank" rel="noreferrer" className="underline underline-offset-2">Z.ai Open Platform</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> after downloading weights from <a href="https://huggingface.co/zai-org/GLM-4.6V-Flash" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[13]}>
  <Take>The most genuinely laptop-friendly model here, small enough to run video understanding on ordinary hardware - even a free Colab - at the cost of real capability.</Take>

  <ST label="Strengths:">
    <div>It runs on modest hardware - a few gigabytes of GPU memory, or even a free Colab notebook - with practical Transformers and MLX paths, including Apple Silicon.</div>
    <div>Under a permissive Apache-2.0 license, it is one of the easiest ways to get offline video understanding onto a normal laptop.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It has the lowest score here by a wide margin, so expect only basic captioning and short-clip Q\&A, not serious reasoning or long video.</div>
    <div>It samples just a handful of frames and audio is separate. Almost anything hosted is dramatically more capable.</div>
  </ST>

  <AccessBullets
    rows={[
["Run locally", <span>You can run it locally with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> or <a href="https://github.com/ml-explore/mlx" target="_blank" rel="noreferrer" className="underline underline-offset-2">MLX</a> after downloading weights from <a href="https://huggingface.co/HuggingFaceTB/SmolVLM2-2.2B-Instruct" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

***

## How to Choose

When choosing between these models, consider:

* **Access:** First decide whether you want an app, an API, or a model you run yourself, because that choice drives cost, privacy, latency, and setup work. Proprietary models are hosted only. Open weights split hard: GLM-4.6V Flash and SmolVLM2 2.2B run on a typical machine, Qwen3.5 27B and Gemma 4 31B need a high-end one, and Kimi K2.5, MiMo V2.5, and Qwen3.5 397B are "open" but really need server infrastructure.
* **Quality:** We use a normalized Video-MME-v2 score, averaging its with-subtitle/audio and without-subtitle/audio conditions. The benchmark runs 3,200 grouped questions across 800 videos and rewards consistent answers over a whole clip, not lucky single hits. A few scores are directional: Gemini 3.1 Pro and 3.5 Flash inherit a predecessor Gemini result, and MiMo V2.5, Qwen3.7 Plus, Pegasus 1.5, and SmolVLM2 2.2B use estimates from related benchmark or family evidence rather than a run of that exact model, so treat narrow gaps as ties. Frame count and audio or subtitle input also move scores, so a leaderboard number is a guide, not a guarantee.
* **Price:** We compare USD per hour of source video, the cleanest way to line up hosted models. It measures one hour of footage, not equal visual detail - a model can look cheap because it samples fewer frames and inspects less. Several prices here are same-provider or third-party estimates rather than firm quotes, so confirm live rates before you budget.
* **Video support:** All 14 picks accept a video file directly through their listed route. The frame-based models we mention below need you to extract and order frames yourself first, a real extra step. Audio-included models read the embedded track in one call; audio-separate models need your own transcription pipeline; and duration limits range from one minute (Gemma 4 31B) to three hours (Gemini).

***

## Other Models We Considered

<div className="not-prose my-4 flex flex-col gap-1.5 text-sm text-zinc-700 dark:text-zinc-300">
  <Alt icon={"/images/icons/qwen.ai.png"} name={"Qwen3-VL 235B A22B"} dev={"Alibaba"} url={"https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Instruct"}>A recognizable dedicated video model, now superseded and too large to self-host.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"InternVL3.5 241B A28B"} dev={"OpenGVLab"} url={"https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Instruct"}>A strong open alternative, but you extract frames and self-host heavy weights.</Alt>
  <Alt icon={"/images/icons/kimi.com.png"} name={"Kimi-VL 16B A3B"} dev={"Moonshot AI"} url={"https://huggingface.co/moonshotai/Kimi-VL-A3B-Instruct"}>A smaller open Kimi video model, but its workflow runs on extracted frames.</Alt>
  <Alt icon={"/images/icons/mimo.xiaomi.com.png"} name={"MiMo-VL 7B"} dev={"Xiaomi"} url={"https://huggingface.co/XiaomiMiMo/MiMo-VL-7B-RL-2508"}>A handy small local baseline, but frame-based and behind MiMo V2.5.</Alt>
  <Alt icon={"/images/icons/qwen.ai.png"} name={"Qwen2.5-VL 72B"} dev={"Alibaba"} url={"https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct"}>A familiar Qwen video baseline, now behind newer Qwen generations.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"VideoLLaMA 3 7B"} dev={"Alibaba DAMO Academy"} url={"https://huggingface.co/DAMO-NLP-SG/VideoLLaMA3-7B"}>A small local model with direct video, but weak on quality.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"LLaVA-Video 72B Qwen2"} dev={"LMMS-Lab"} url={"https://huggingface.co/lmms-lab/LLaVA-Video-72B-Qwen2"}>An influential older video model, now large, frame-based, and outclassed.</Alt>
</div>

***

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title={"What is the best video understanding model right now?"}>
    Gemini 3.1 Pro. It reads long footage and its audio together and handles up to three hours in one request. Its score uses the earlier Gemini 3 Pro benchmark result, while Doubao Seed 2.0 Pro is the strongest directly measured current model and costs far less.
  </Accordion>

  <Accordion title={"What is the best video understanding model for most people?"}>
    Gemini 3.5 Flash. You get the same direct video-and-audio workflow as 3.1 Pro, faster and much cheaper, with only a small quality drop. Test it against Doubao Seed 2.0 Pro on your own footage, since that pairing covers most hosted use at a sensible price.
  </Accordion>

  <Accordion title={"What is the best open-weight video model?"}>
    Qwen3.5 397B A17B has the highest measured open score, but it is server-only. Kimi K2.5 is the easiest to actually use, with a first-party app and API on top of its weights. If you need the embedded audio track read in one model, MiMo V2.5 is the standout open pick.
  </Accordion>

  <Accordion title={"What is the best video understanding model you can run locally?"}>
    On a typical machine, GLM-4.6V Flash and SmolVLM2 2.2B are the realistic options - GLM for more capability, SmolVLM2 for the lightest laptop footprint. With a high-end GPU, Qwen3.5 27B is meaningfully stronger, while Gemma 4 31B and Qwen3.6 35B A3B suit short clips and efficient self-hosting respectively.
  </Accordion>

  <Accordion title={"Which of these models understand audio, not just the picture?"}>
    Gemini 3.1 Pro, Gemini 3.5 Flash, Doubao Seed 2.0 Pro, MiMo V2.5, Qwen3.5 Omni Plus, and Pegasus 1.5 read the embedded audio track directly. The other Qwen checkpoints, Gemma 4 31B, GLM-4.6V Flash, and SmolVLM2 2.2B handle only visuals, so you supply speech through a separate transcription step.
  </Accordion>

  <Accordion title={"Is a video-analysis platform the same thing as a video understanding model?"}>
    No. Products like video indexers and search platforms often wrap a model in retrieval, OCR, and transcription. This list ranks the models themselves. Pegasus 1.5 is a genuine model, not a platform, but reach for a retrieval pipeline when useful moments are sparse across many hours of footage.
  </Accordion>

  <Accordion title={"Do these benchmark scores match real-world use?"}>
    Roughly. They predict which models reason across time and handle long clips, but results shift with frame count, audio input, prompting, and each provider's own preprocessing. Some scores here are estimates or predecessor proxies. Treat close rankings as ties and run a short test on your own videos before committing.
  </Accordion>

  <Accordion title={"What matters most when choosing a model for video understanding?"}>
    Three things: how you want to access it (app, API, or self-hosted), how long your videos are and whether audio matters, and your tolerance for cost versus quality. Match the model to your longest, messiest real footage, because that is where the differences show up.
  </Accordion>
</AccordionGroup>
