<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ryan Cole</title>
    <description>The latest articles on DEV Community by Ryan Cole (@ryancole1).</description>
    <link>https://dev.to/ryancole1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4113545%2Fb1c19de8-a032-4f70-9bb5-dff18bb47f9e.png</url>
      <title>DEV Community: Ryan Cole</title>
      <link>https://dev.to/ryancole1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryancole1"/>
    <language>en</language>
    <item>
      <title>DeepSeek V4.1 Flash vs V4 Pro: moving production traffic without breaking your budget</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:41:56 +0000</pubDate>
      <link>https://dev.to/ryancole1/deepseek-v41-flash-vs-v4-pro-moving-production-traffic-without-breaking-your-budget-34l3</link>
      <guid>https://dev.to/ryancole1/deepseek-v41-flash-vs-v4-pro-moving-production-traffic-without-breaking-your-budget-34l3</guid>
      <description>&lt;p&gt;The pricing page now splits DeepSeek's lineup into two live routes, &lt;code&gt;deepseek-flash&lt;/code&gt; and &lt;code&gt;deepseek-v4-pro&lt;/code&gt;, and they are not aliases for each other. One serves V4.1 Flash, the other serves V4-Pro-0813. Different prices, different concurrency ceilings, different vision support. If you are wiring up a new integration, pick the ID that matches the workload instead of trusting whatever the old alias resolved to last quarter.&lt;/p&gt;

&lt;p&gt;Here is what I look at before moving traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec comparison: the architecture flipped
&lt;/h2&gt;

&lt;p&gt;V4 Pro is a very large sparse MoE. V4.1 Flash is an asymmetric causal encoder-decoder MoE, where input processing activates fewer parameters than output generation. That split is deliberate: prefill and decode have different compute profiles, so there is no reason to run both stages through the same active-parameter budget.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Spec&lt;/th&gt;
&lt;th&gt;V4.1 Flash&lt;/th&gt;
&lt;th&gt;V4 Pro 0813&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Causal encoder-decoder MoE&lt;/td&gt;
&lt;td&gt;Sparse MoE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total parameters&lt;/td&gt;
&lt;td&gt;552B backbone; Hugging Face lists 763B model size&lt;/td&gt;
&lt;td&gt;1.6T backbone; Hugging Face lists about 1.7T model size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active parameters&lt;/td&gt;
&lt;td&gt;8B input / 16B output&lt;/td&gt;
&lt;td&gt;49B per token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max output&lt;/td&gt;
&lt;td&gt;384K tokens&lt;/td&gt;
&lt;td&gt;384K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking and non-thinking modes&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native image understanding&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;Not supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documented concurrency&lt;/td&gt;
&lt;td&gt;2,500&lt;/td&gt;
&lt;td&gt;500 on the current configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API status&lt;/td&gt;
&lt;td&gt;Active as &lt;code&gt;deepseek-flash&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Active as &lt;code&gt;deepseek-v4-pro&lt;/code&gt; (V4-Pro-0813)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Two numbers people keep conflating
&lt;/h3&gt;

&lt;p&gt;The 552B in DeepSeek's model card counts &lt;strong&gt;backbone&lt;/strong&gt; parameters. The 763B on Hugging Face is model size, a different accounting scope. Do not treat them as interchangeable totals in a capacity plan.&lt;/p&gt;

&lt;p&gt;Similarly, the V4.1 Flash model card recommends &lt;code&gt;max_tokens ≥ 256K&lt;/code&gt; for local inference. The API pricing page states a 384K maximum output for both models. A recommended local setting is not an enforced API ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: the win is execution-heavy, not universal
&lt;/h2&gt;

&lt;p&gt;The published table favors Flash almost everywhere that involves running code, driving a terminal, or chaining tools. Percentage deltas below are my own arithmetic on the published scores; I skip them where the metric is a rating.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;V4.1 Flash&lt;/th&gt;
&lt;th&gt;V4 Pro 0813&lt;/th&gt;
&lt;th&gt;Delta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;td&gt;90.6&lt;/td&gt;
&lt;td&gt;87.9&lt;/td&gt;
&lt;td&gt;+2.7 points, +3.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 3.0&lt;/td&gt;
&lt;td&gt;30.0&lt;/td&gt;
&lt;td&gt;11.8&lt;/td&gt;
&lt;td&gt;+18.2 points, +154.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 4.0&lt;/td&gt;
&lt;td&gt;31.2&lt;/td&gt;
&lt;td&gt;12.4&lt;/td&gt;
&lt;td&gt;+18.8 points, +151.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE v1.1&lt;/td&gt;
&lt;td&gt;74.2&lt;/td&gt;
&lt;td&gt;62.7&lt;/td&gt;
&lt;td&gt;+11.5 points, +18.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ProgramBench&lt;/td&gt;
&lt;td&gt;20.3&lt;/td&gt;
&lt;td&gt;15.5&lt;/td&gt;
&lt;td&gt;+4.8 points, +31.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NL2Repo-Bench&lt;/td&gt;
&lt;td&gt;64.0&lt;/td&gt;
&lt;td&gt;61.5&lt;/td&gt;
&lt;td&gt;+2.5 points, +4.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CyberGym&lt;/td&gt;
&lt;td&gt;88.1&lt;/td&gt;
&lt;td&gt;83.3&lt;/td&gt;
&lt;td&gt;+4.8 points, +5.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HLE with tools&lt;/td&gt;
&lt;td&gt;63.9&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;td&gt;+3.9 points, +6.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation-Bench&lt;/td&gt;
&lt;td&gt;54.8&lt;/td&gt;
&lt;td&gt;43.2&lt;/td&gt;
&lt;td&gt;+11.6 points, +26.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agents' Last Exam&lt;/td&gt;
&lt;td&gt;31.8&lt;/td&gt;
&lt;td&gt;25.7&lt;/td&gt;
&lt;td&gt;+6.1 points, +23.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codeforces rating&lt;/td&gt;
&lt;td&gt;3,471&lt;/td&gt;
&lt;td&gt;3,348&lt;/td&gt;
&lt;td&gt;+123 rating points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPQA Diamond&lt;/td&gt;
&lt;td&gt;90.9&lt;/td&gt;
&lt;td&gt;92.4&lt;/td&gt;
&lt;td&gt;-1.5 points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HLE without tools&lt;/td&gt;
&lt;td&gt;36.8 (39.1 on text subset)&lt;/td&gt;
&lt;td&gt;42.7 on text subset&lt;/td&gt;
&lt;td&gt;-3.6 points on the comparable text subset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs9ra72h7rh3gdspp5wdf.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs9ra72h7rh3gdspp5wdf.PNG" alt="DeepSeek V4.1 Flash vs V4 Pro comparison" width="800" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read that as two different products rather than a ranking. Flash owns terminal work, repo-level coding, automation, security execution, and tool-augmented reasoning. Pro keeps its edge on closed-book reasoning, specifically GPQA Diamond and HLE without tools. Judge your workload by task mix, not by a single headline number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the serving cost drops
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Asymmetric activation
&lt;/h3&gt;

&lt;p&gt;8B active for input, 16B for output, against 49B per token for V4 Pro. Prefill gets cheap, decode keeps enough capacity to stay useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  KV cache
&lt;/h3&gt;

&lt;p&gt;DeepSeek reports V4.1 Flash uses one quarter of the HBM and one eighth of the SSD of the previous generation's KV cache. The published chart puts global KV cache at 890 bytes per token versus 3,514 bytes for V4 Flash. Long-context services feel this immediately, because that footprint is what limits how many concurrent sessions fit on a node.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4b4yyoeaxb2xh91k8afm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4b4yyoeaxb2xh91k8afm.png" alt="KV cache footprint" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vision and concurrency
&lt;/h3&gt;

&lt;p&gt;Native image understanding plus a documented concurrency of 2,500, five times the current V4 Pro figure of 500. If you are building screenshot-driven agents, document extraction, or visual troubleshooting, this is the part that changes the design, not the benchmark table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing per 1M tokens
&lt;/h2&gt;

&lt;p&gt;Off-peak / peak, from the current official schedule:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Cache-hit input&lt;/th&gt;
&lt;th&gt;Cache-miss input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;$0.003 / $0.006&lt;/td&gt;
&lt;td&gt;$0.15 / $0.30&lt;/td&gt;
&lt;td&gt;$0.60 / $1.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V4 Pro&lt;/td&gt;
&lt;td&gt;$0.022 / $0.044&lt;/td&gt;
&lt;td&gt;$0.66 / $1.32&lt;/td&gt;
&lt;td&gt;$1.98 / $3.96&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Roughly 4.4x on input and 3.3x on output. Prices move, so pin your budget model to the live page rather than to this table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use explicit model IDs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# or "deepseek-v4-pro"
&lt;/span&gt;    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review this migration plan.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt; and &lt;code&gt;deepseek-v4-flash-vision-exp&lt;/code&gt; still resolve to V4.1 Flash and bill at the new Flash price, but explicit naming keeps your dashboards and future rollbacks auditable. Use &lt;code&gt;deepseek-v4-pro&lt;/code&gt; only when you intend to hit V4-Pro-0813.&lt;/p&gt;

&lt;p&gt;If you already route through a unified multi-model endpoint such as CometAPI, the model string is the only switch to flip, though the evaluation work below still applies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Re-evaluate, do not just smoke-test
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run representative prompts in both thinking and non-thinking modes. Compare task success, token counts, and latency, not just HTTP 200.&lt;/li&gt;
&lt;li&gt;Retest tool schemas, JSON output, Responses API behavior, prefix completion, and FIM where you depend on them.&lt;/li&gt;
&lt;li&gt;Add image-input tests if the product will use native vision.&lt;/li&gt;
&lt;li&gt;Re-baseline budgets at both peak and off-peak rates. Do not carry V4 Pro assumptions forward.&lt;/li&gt;
&lt;li&gt;Track prompt-cache hit rate. At scale it dominates input cost.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Record what resolved
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;deepseek-v4-pro&lt;/code&gt; route currently selects V4-Pro-0813. Log the resolved version, evaluation date, prompt set, and pricing window alongside your results so a future routing change does not invalidate the comparison silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workload routing cheat sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Pick&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coding agents, repo maintenance&lt;/td&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;DeepSWE, ProgramBench, NL2Repo, terminal scores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-driven automation&lt;/td&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;Automation-Bench, HLE with tools, agent scores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image-aware assistants&lt;/td&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;Native image understanding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-throughput or cost-sensitive serving&lt;/td&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;2,500 concurrency, much lower token prices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical V4 Pro reproduction&lt;/td&gt;
&lt;td&gt;V4 Pro&lt;/td&gt;
&lt;td&gt;The route currently identifies V4-Pro-0813&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pure closed-book reasoning&lt;/td&gt;
&lt;td&gt;Test on your domain data&lt;/td&gt;
&lt;td&gt;Pro stays ahead on GPQA Diamond and HLE without tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Traps I have hit
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint compatibility is not output compatibility. Reasoning paths, tool selection, token usage, and formatting all shift. Re-run production evals before trusting old thresholds.&lt;/li&gt;
&lt;li&gt;The two model IDs are not aliases. Do not swap them by config drift.&lt;/li&gt;
&lt;li&gt;Legacy V4 Flash IDs still work and bill at the new rate, so a forgotten environment variable will quietly move you to V4.1 Flash. That is usually what you want, but you should know it happened.&lt;/li&gt;
&lt;li&gt;Concurrency limits are documented, not guaranteed by your account tier. Check before designing a 2,500-way queue.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/deepseek-v4-1-flash-vs-v4-pro-performance/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=deepseek-v4-1-flash-vs-v4-pro-performance"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>FLUX 3 video over an async HTTP API: requests, polling, keyframes, and real pricing</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Fri, 09 Oct 2026 07:23:09 +0000</pubDate>
      <link>https://dev.to/ryancole1/flux-3-video-over-an-async-http-api-requests-polling-keyframes-and-real-pricing-54ao</link>
      <guid>https://dev.to/ryancole1/flux-3-video-over-an-async-http-api-requests-polling-keyframes-and-real-pricing-54ao</guid>
      <description>&lt;h2&gt;
  
  
  Status check: this is GA now, not early access
&lt;/h2&gt;

&lt;p&gt;BFL closed out the July Early Access phase. The first text-to-video and image-to-video release went generally available through the BFL API and selected partners on &lt;strong&gt;August 4, 2026&lt;/strong&gt;. The production model ID &lt;code&gt;flux-3&lt;/code&gt; appeared in the gateway's Video API format on &lt;strong&gt;August 13, 2026&lt;/strong&gt;. I verified availability, field names and prices on &lt;strong&gt;September 24, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those facts move, so treat the &lt;a href="https://bfl.ai/blog/flux-3-video" rel="noopener noreferrer"&gt;BFL release announcement&lt;/a&gt; and the live model page as the source of truth instead of this post. Early coverage of the July application-based rollout is still useful for launch history, but it does not describe a callable endpoint. What follows is the operational part: create, poll, download, and the schema traps in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model does
&lt;/h2&gt;

&lt;p&gt;FLUX 3 is BFL's multimodal family covering video, audio, images, and action-related prediction. The video release handles &lt;a href="https://docs.bfl.ai/flux_3/flux3_overview" rel="noopener noreferrer"&gt;text-to-video, image-to-video, and video continuation&lt;/a&gt; behind one provider-native endpoint.&lt;/p&gt;

&lt;p&gt;The parts that matter for integration work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Up to 20 seconds at 24 fps, HD or FHD&lt;/li&gt;
&lt;li&gt;Synchronized audio, on by default&lt;/li&gt;
&lt;li&gt;Multilingual speech with lip-sync&lt;/li&gt;
&lt;li&gt;Multiple shots inside a single generation&lt;/li&gt;
&lt;li&gt;Up to ten pinned keyframes for image-to-video control&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Spec&lt;/th&gt;
&lt;th&gt;BFL native&lt;/th&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workflows&lt;/td&gt;
&lt;td&gt;T2V, I2V, video continuation&lt;/td&gt;
&lt;td&gt;T2V and I2V listed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max duration&lt;/td&gt;
&lt;td&gt;5 to 20 s T2V/I2V; 5 to 15 s V2V&lt;/td&gt;
&lt;td&gt;check live quickstart values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frame rate&lt;/td&gt;
&lt;td&gt;24 fps&lt;/td&gt;
&lt;td&gt;provider output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolution&lt;/td&gt;
&lt;td&gt;rHD native, FHD via video upsampler; no 4K/UHD listed for FLUX 3 Video&lt;/td&gt;
&lt;td&gt;720p and 1080p pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native audio&lt;/td&gt;
&lt;td&gt;yes, default on&lt;/td&gt;
&lt;td&gt;follows the active integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image control&lt;/td&gt;
&lt;td&gt;1 to 10 keyframes&lt;/td&gt;
&lt;td&gt;verify reference-image mapping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aspect ratios&lt;/td&gt;
&lt;td&gt;21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16&lt;/td&gt;
&lt;td&gt;quickstart uses explicit sizes like 1280x720&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invocation&lt;/td&gt;
&lt;td&gt;async&lt;/td&gt;
&lt;td&gt;create, poll, download&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model ID&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flux-3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One clarification that keeps circulating: the "up to 4MP" spec belongs to the FLUX.2 image models. FLUX 3 Video does not list 4K/UHD output.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-call lifecycle
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Request&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST https://api.cometapi.com/v1/videos&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;task ID + queued status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poll&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET https://api.cometapi.com/v1/videos/{task_id}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;status and progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET https://api.cometapi.com/v1/videos/{task_id}/content&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the MP4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Set the key in a backend env var. macOS/Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a five-second 720p clip with a multipart request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.cometapi.com/v1/videos &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$COMETAPI_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"model=flux-3"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"prompt=A paper boat glides across a still pond in soft morning light"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"seconds=5"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"size=1280x720"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response starts a job, nothing more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video_task_id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"queued"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Persist that ID next to your own job or user record before you poll anything. A worker restart should never cost a user a second billed generation. Then poll:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.cometapi.com/v1/videos/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$COMETAPI_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ten seconds is a sane starting interval. Terminal success states I've seen: &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;succeeded&lt;/code&gt;, &lt;code&gt;success&lt;/code&gt;. Terminal failures: &lt;code&gt;failed&lt;/code&gt;, &lt;code&gt;failure&lt;/code&gt;, &lt;code&gt;cancelled&lt;/code&gt;, &lt;code&gt;canceled&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Download, then move the file into your own bucket rather than pinning a provider URL as the permanent asset:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.cometapi.com/v1/videos/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&gt;}&lt;/span&gt;/content &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$COMETAPI_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; flux3_output.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Complete Python job runner
&lt;/h3&gt;

&lt;p&gt;This creates, persists, polls, checks failure states, validates the MP4 signature, and writes to disk.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;flux-3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A product bottle rotates slowly on wet black stone, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;soft rim lighting, macro lens, realistic reflections.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;size&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1280x720&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Create response has no task ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;unknown&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;; progress: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;canceled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;100%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ftyp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content response is not a non-empty MP4 file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;output_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;output_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; bytes)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Image-to-video and keyframes: two schemas, not one
&lt;/h2&gt;

&lt;p&gt;I2V is listed as supported through the gateway, but the current public sample only demonstrates text-to-video. Do not assume a reference-image field copied from another model's docs will be accepted unchanged. Check the live gateway reference before you ship that path.&lt;/p&gt;

&lt;p&gt;BFL's native API is explicit: I2V uses &lt;a href="https://docs.bfl.ai/flux_3/flux3_overview" rel="noopener noreferrer"&gt;mode &lt;code&gt;i2v&lt;/code&gt; plus the &lt;code&gt;keyframes&lt;/code&gt; field&lt;/a&gt;. One image pins the start frame, two pin start and end, and up to ten timed images storyboard a continuous clip.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.bfl.ai/v1/flux-3-video &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-key: &lt;/span&gt;&lt;span class="nv"&gt;$BFL_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "mode": "i2v",
    "prompt": "They sprint through the lantern-lit alley as the camera tracks behind them.",
    "keyframes": [
      [0, "data:image/png;base64,"],
      [8, "data:image/png;base64,"]
    ],
    "duration": 8
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep native and gateway parameters in separate adapters. Mixing them is the most common failure I see in review. Native fields are &lt;code&gt;mode&lt;/code&gt;, &lt;code&gt;keyframes&lt;/code&gt;, &lt;code&gt;start_video&lt;/code&gt;, &lt;code&gt;resolution&lt;/code&gt;, &lt;code&gt;draft&lt;/code&gt;; the verified gateway sample uses &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;prompt&lt;/code&gt;, &lt;code&gt;seconds&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parameter reference
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Controls&lt;/th&gt;
&lt;th&gt;Guidance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;gateway&lt;/td&gt;
&lt;td&gt;model selection&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flux-3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;prompt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;both&lt;/td&gt;
&lt;td&gt;scene, action, camera, audio&lt;/td&gt;
&lt;td&gt;describe change over time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seconds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;gateway&lt;/td&gt;
&lt;td&gt;clip length&lt;/td&gt;
&lt;td&gt;start at 5 to 8 s while tuning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;gateway&lt;/td&gt;
&lt;td&gt;dimensions&lt;/td&gt;
&lt;td&gt;1280x720 for cheap iteration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BFL native&lt;/td&gt;
&lt;td&gt;t2v / i2v / v2v / draft_enhance&lt;/td&gt;
&lt;td&gt;do not send unless mapped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BFL native&lt;/td&gt;
&lt;td&gt;5 to 20 s T2V/I2V, 5 to 15 s V2V&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;auto&lt;/code&gt; supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;resolution&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BFL native&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;hd&lt;/code&gt; or &lt;code&gt;fhd&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;FHD finishes through the upsampler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_audio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BFL native&lt;/td&gt;
&lt;td&gt;synchronized audio&lt;/td&gt;
&lt;td&gt;defaults to true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BFL native&lt;/td&gt;
&lt;td&gt;fast preview&lt;/td&gt;
&lt;td&gt;lower-cost creative iteration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Prompting: write a shot list, not a mood
&lt;/h2&gt;

&lt;p&gt;BFL's &lt;a href="https://docs.bfl.ai/guides/prompting_video_overview" rel="noopener noreferrer"&gt;video prompting guide&lt;/a&gt; asks for clear direction on subject and action, camera, scene and atmosphere, motion quality, and continuity. Audio-led scenes need dialogue, voice, sound effects, and ambience spelled out.&lt;/p&gt;

&lt;p&gt;The structure I reuse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subject + Environment + Action + Camera + Lighting
+ Dialogue/Voice + Sound Effects + Ambience + Constraints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cinematic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A lone cyclist rides through a rain-soaked neon street at midnight.
The camera begins low beside the rear wheel, then rises into a smooth tracking shot.
Reflections stretch across wet asphalt under moving cyan and magenta light.
Audio: steady rainfall, chain noise, distant traffic, no music, no dialogue.
Keep the same rider, bicycle, jacket, and weather throughout the shot.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Product:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A premium stainless-steel espresso machine stands on a dark stone counter.
Begin with a macro close-up of water droplets on the metal housing.
Orbit clockwise as the machine brews; steam catches warm side light.
Finish on a clean three-quarter hero angle with the cup in the foreground.
Audio: pump vibration, steam hiss, ceramic contact, quiet cafe ambience.
Do not change the product shape, logo placement, material, or color.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dialogue with native audio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A young chef works alone in a compact Tokyo ramen shop at night.
Start close on boiling broth, then pull back as the chef sets down a bowl.
Warm tungsten lighting, natural reflections, documentary handheld motion.
The chef quietly says in Japanese: 「お待たせしました。」
Audio: bubbling broth, soft rain outside, distant street traffic.
No subtitles and no background music.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Make a cinematic ramen shop video" leaves motion, framing, sound and continuity undefined. You cannot debug that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;BFL prices by workflow. T2V and I2V full renders run &lt;strong&gt;$0.17/s HD&lt;/strong&gt; and &lt;strong&gt;$0.29/s FHD&lt;/strong&gt;, with HD Draft Mode at &lt;strong&gt;$0.06/s&lt;/strong&gt;. Video continuation is &lt;strong&gt;$0.43/s HD&lt;/strong&gt; and &lt;strong&gt;$0.54/s FHD&lt;/strong&gt;, HD drafts at &lt;strong&gt;$0.12/s&lt;/strong&gt;. The gateway lists &lt;code&gt;flux-3&lt;/code&gt; at &lt;strong&gt;$0.136/s for 720p&lt;/strong&gt; and &lt;strong&gt;$0.232/s for 1080p&lt;/strong&gt;. Re-check live pricing before any large batch.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workflow&lt;/th&gt;
&lt;th&gt;HD/720p&lt;/th&gt;
&lt;th&gt;FHD/1080p&lt;/th&gt;
&lt;th&gt;Draft&lt;/th&gt;
&lt;th&gt;5 s full&lt;/th&gt;
&lt;th&gt;10 s full&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BFL T2V&lt;/td&gt;
&lt;td&gt;$0.17/s&lt;/td&gt;
&lt;td&gt;$0.29/s&lt;/td&gt;
&lt;td&gt;$0.06/s (HD)&lt;/td&gt;
&lt;td&gt;$0.85 / $1.45&lt;/td&gt;
&lt;td&gt;$1.70 / $2.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BFL I2V&lt;/td&gt;
&lt;td&gt;$0.17/s&lt;/td&gt;
&lt;td&gt;$0.29/s&lt;/td&gt;
&lt;td&gt;$0.06/s (HD)&lt;/td&gt;
&lt;td&gt;$0.85 / $1.45&lt;/td&gt;
&lt;td&gt;$1.70 / $2.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BFL V2V continuation&lt;/td&gt;
&lt;td&gt;$0.43/s&lt;/td&gt;
&lt;td&gt;$0.54/s&lt;/td&gt;
&lt;td&gt;$0.12/s (HD)&lt;/td&gt;
&lt;td&gt;$2.15 / $2.70&lt;/td&gt;
&lt;td&gt;$4.30 / $5.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gateway &lt;code&gt;flux-3&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;$0.136/s&lt;/td&gt;
&lt;td&gt;$0.232/s&lt;/td&gt;
&lt;td&gt;not listed&lt;/td&gt;
&lt;td&gt;$0.68 / $1.16&lt;/td&gt;
&lt;td&gt;$1.36 / $2.32&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the last two columns the first figure is HD/720p and the second is FHD/1080p.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cutting iteration cost
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prototype at 720p, then promote only a selected prompt to 1080p.&lt;/li&gt;
&lt;li&gt;Five-second clips are enough to validate composition, motion and prompt interpretation.&lt;/li&gt;
&lt;li&gt;Change one major variable per run.&lt;/li&gt;
&lt;li&gt;On the native API, use Draft Mode before a full-quality render.&lt;/li&gt;
&lt;li&gt;Store the winning prompt and reference decisions in your own metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FLUX 3 vs Wan 3.0 vs Seedance 2.5
&lt;/h2&gt;

&lt;p&gt;Pick by workflow, not by a leaderboard. This is also where a unified endpoint earns its keep: keeping &lt;code&gt;flux-3&lt;/code&gt;, Wan 3.0 and Seedance 2.5 behind one job pipeline (I route through CometAPI for exactly that) means a model swap is a config change rather than a rewrite.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;FLUX 3&lt;/th&gt;
&lt;th&gt;Wan 3.0&lt;/th&gt;
&lt;th&gt;Seedance 2.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Max clip&lt;/td&gt;
&lt;td&gt;up to 20 s T2V/I2V&lt;/td&gt;
&lt;td&gt;up to 30 s&lt;/td&gt;
&lt;td&gt;up to 30 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Synchronized audio&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T2V / I2V&lt;/td&gt;
&lt;td&gt;yes / yes&lt;/td&gt;
&lt;td&gt;yes / yes&lt;/td&gt;
&lt;td&gt;yes / yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference strategy&lt;/td&gt;
&lt;td&gt;up to 10 native keyframes&lt;/td&gt;
&lt;td&gt;broad multimodal, Omni-Reference&lt;/td&gt;
&lt;td&gt;large multimodal reference capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuation/editing&lt;/td&gt;
&lt;td&gt;native BFL v2v&lt;/td&gt;
&lt;td&gt;long-form and editing&lt;/td&gt;
&lt;td&gt;extension and editing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strength&lt;/td&gt;
&lt;td&gt;motion logic, multi-shot, synced A/V&lt;/td&gt;
&lt;td&gt;input breadth, 30 s generation&lt;/td&gt;
&lt;td&gt;long storytelling, reference-heavy control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gateway starting price&lt;/td&gt;
&lt;td&gt;$0.136/s&lt;/td&gt;
&lt;td&gt;$0.04/s&lt;/td&gt;
&lt;td&gt;$0.0824/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fits&lt;/td&gt;
&lt;td&gt;cinematic or realistic A/V shots&lt;/td&gt;
&lt;td&gt;all-in-one multimodal pipelines&lt;/td&gt;
&lt;td&gt;longer, identity-controlled storytelling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Starting prices are not apples-to-apples across resolutions, so budget from each live model page's resolution table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production notes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Persist async jobs.&lt;/strong&gt; Save the task ID at submission time. Worker retries must not re-bill work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not poll tightly.&lt;/strong&gt; Around ten seconds unless the live docs say otherwise. One-second polling adds load without improving perceived latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validate the download.&lt;/strong&gt; Check length and the MP4 &lt;code&gt;ftyp&lt;/code&gt; signature before marking an asset ready. A 200 does not prove you got a video.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separate native and gateway schemas.&lt;/strong&gt; Distinct adapters stop native-only fields from leaking into gateway calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log the full failure context.&lt;/strong&gt; HTTP status, response body, task ID, model ID, prompt version, size, duration, internal job ID. Redact the key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run a fixed evaluation set.&lt;/strong&gt; 10 to 30 prompts covering camera motion, people, products, typography, dialogue, high-motion scenes and required aspect ratios. Re-run it on every model or integration change, and repeat important prompts, because generation is stochastic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vendor numbers worth knowing
&lt;/h2&gt;

&lt;p&gt;BFL reports a text-to-video Elo of &lt;strong&gt;1135&lt;/strong&gt; in its all-vs-all human-preference evaluation, and a tie with Seedance 2.0 on image-to-video preference. Useful positioning, but vendor-run preference testing measures perceived output quality, not queue reliability, gateway latency, cost consistency, or generation-to-generation stability. Your own prompt set is the only benchmark that predicts your production.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Model ID?&lt;/strong&gt; &lt;code&gt;flux-3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoints?&lt;/strong&gt; &lt;code&gt;POST /v1/videos&lt;/code&gt;, then &lt;code&gt;GET /v1/videos/{task_id}&lt;/code&gt; and &lt;code&gt;GET /v1/videos/{task_id}/content&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synchronous?&lt;/strong&gt; No. Submit, persist, poll, download.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Max duration?&lt;/strong&gt; 5 to 20 s for T2V/I2V, 5 to 15 s for continuation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio?&lt;/strong&gt; Yes, synchronized and enabled by default in the native API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I send BFL keyframes through the gateway unchanged?&lt;/strong&gt; Do not assume it. The schemas differ. Verify the current quickstart first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost of five seconds?&lt;/strong&gt; $0.68 at 720p or $1.16 at 1080p at current gateway rates.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would ship first
&lt;/h2&gt;

&lt;p&gt;Short 720p text-to-video request, durable task ID, conservative polling, download with signature validation, then prompt templates, object storage, retry logic and a repeatable evaluation set. Add keyframes and continuation once I2V field mapping is confirmed against the live reference.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-use-flux-3-api/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-use-flux-3-api"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>MiMo-V2.5 in practice: 15B active params, native multimodal input, and when Pro is actually worth 3</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Fri, 09 Oct 2026 05:54:41 +0000</pubDate>
      <link>https://dev.to/ryancole1/mimo-v25-in-practice-15b-active-params-native-multimodal-input-and-when-pro-is-actually-worth-3x-cc3</link>
      <guid>https://dev.to/ryancole1/mimo-v25-in-practice-15b-active-params-native-multimodal-input-and-when-pro-is-actually-worth-3x-cc3</guid>
      <description>&lt;p&gt;I've been running Xiaomi's MiMo-V2.5 through coding and document-analysis workloads for a while now, and the interesting thing isn't the benchmark sheet — it's that the standard model and the Pro model are optimized for genuinely different jobs. The standard variant is multimodal-first and cheap per token; Pro is text-only, a trillion parameters, and roughly 3.1× the price at Xiaomi's published rates. Picking between them is a routing decision, not a quality decision.&lt;/p&gt;

&lt;p&gt;Here's what actually matters if you're about to wire one of these into a production path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: what 310B/15B gets you
&lt;/h2&gt;

&lt;p&gt;MiMo-V2.5 is a sparse MoE with 310B total parameters and ~15B active per token. The router picks 8 of 256 experts per token, so you get access to a much larger parameter pool than a plain 15B dense model without paying the full compute bill.&lt;/p&gt;

&lt;p&gt;That does &lt;em&gt;not&lt;/em&gt; mean self-hosting is cheap. You still need to store and serve all 310B weights, and expert routing plus interconnect bandwidth become the real constraints. Active params are a compute figure, not a memory figure.&lt;/p&gt;

&lt;p&gt;The backbone is 48 layers: 1 dense plus 47 MoE. Attention interleaves sliding-window and global layers at a 5:1 ratio — 39 SWA layers with a 128-token window, 9 global layers. Xiaomi reports nearly a 6× KV-cache reduction versus an all-global design. That's the mechanism that makes the 1M context affordable, not a bonus.&lt;/p&gt;

&lt;p&gt;On the perception side there's a 729M ViT (28 layers) for image/video and a 261M transformer (24 layers) for audio, both projected into the language backbone. Three Multi-Token Prediction modules (~329M params combined) support speculative decoding and RL efficiency. Training ran on roughly 48T tokens with context progressively extended to 1M in post-training.&lt;/p&gt;

&lt;p&gt;Weights are MIT-licensed, public beta dated April 23, 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spec sheet
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total / active params&lt;/td&gt;
&lt;td&gt;310B / 15B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layers / routed experts&lt;/td&gt;
&lt;td&gt;48 (1 dense + 47 MoE) / 256, 8 active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attention&lt;/td&gt;
&lt;td&gt;39 SWA (128-token window) + 9 global&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context / max output&lt;/td&gt;
&lt;td&gt;1M / 128K tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I/O&lt;/td&gt;
&lt;td&gt;text, image, video, audio → text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encoders&lt;/td&gt;
&lt;td&gt;729M ViT; 261M audio transformer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MTP&lt;/td&gt;
&lt;td&gt;3 modules, ~329M params&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training&lt;/td&gt;
&lt;td&gt;~48T tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API surface&lt;/td&gt;
&lt;td&gt;tools, web search, streaming, structured output, context caching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Published rate limits&lt;/td&gt;
&lt;td&gt;100 RPM / 10M TPM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rate limits are provider-level and will differ by route and account tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: tool use is the strong signal
&lt;/h2&gt;

&lt;p&gt;These are publisher-reported, so treat them as directional. Nothing here guarantees behavior on your repo or your media formats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding and agents
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MiMo Coding Bench&lt;/td&gt;
&lt;td&gt;71.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claw-Eval Text&lt;/td&gt;
&lt;td&gt;62.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;td&gt;65.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Pro&lt;/td&gt;
&lt;td&gt;56.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claw-Eval Multi-Turn&lt;/td&gt;
&lt;td&gt;63.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ResearchClawBench&lt;/td&gt;
&lt;td&gt;16.91&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 65.8 on Terminal-Bench 2.0 is the number I'd weight most for terminal-driven agents, and 56.1 on SWE-Bench Pro suggests real repository-level ability rather than autocomplete. ResearchClawBench at 16.91 is the outlier — if your workload is evidence gathering and citation, test that path separately, because this model is not obviously good at it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multimodal
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CharXiv RQ&lt;/td&gt;
&lt;td&gt;81.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMMU-Pro&lt;/td&gt;
&lt;td&gt;77.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HR-Bench 4K&lt;/td&gt;
&lt;td&gt;88.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OmniDocBench&lt;/td&gt;
&lt;td&gt;87.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claw-Eval Multimodal&lt;/td&gt;
&lt;td&gt;23.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video-MME&lt;/td&gt;
&lt;td&gt;87.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DailyOmni&lt;/td&gt;
&lt;td&gt;83.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VideoHolmes&lt;/td&gt;
&lt;td&gt;64.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Document and high-res image understanding are clearly the strength. Claw-Eval Multimodal at 23.8 versus 87.2 on OmniDocBench is the gap that matters: perceiving media and &lt;em&gt;acting&lt;/em&gt; on it through tools are different capabilities, and the second one needs end-to-end testing on your actual stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standard vs Pro
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;MiMo-V2.5&lt;/th&gt;
&lt;th&gt;MiMo-V2.5-Pro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total params&lt;/td&gt;
&lt;td&gt;310B&lt;/td&gt;
&lt;td&gt;1.02T&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active params&lt;/td&gt;
&lt;td&gt;15B&lt;/td&gt;
&lt;td&gt;42B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layers / routed experts&lt;/td&gt;
&lt;td&gt;48 / 256&lt;/td&gt;
&lt;td&gt;70 / 384&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context ceiling&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API max output&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native input&lt;/td&gt;
&lt;td&gt;text, image, video, audio&lt;/td&gt;
&lt;td&gt;text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Pro&lt;/td&gt;
&lt;td&gt;56.1&lt;/td&gt;
&lt;td&gt;57.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;td&gt;65.8&lt;/td&gt;
&lt;td&gt;68.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pro leads by 1.1 points on SWE-Bench Pro and 2.6 on Terminal-Bench 2.0 — a modest margin on the only two tests they share. Pro spends ~2.8× the active parameters to get there and drops multimodal input entirely. If media is a first-class input for you, Pro isn't a candidate at all.&lt;/p&gt;

&lt;p&gt;Both model cards list 1M context and Xiaomi's API pages list 128K max output, but usable limits vary by endpoint, account, and request format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Per MTok&lt;/th&gt;
&lt;th&gt;Standard (official)&lt;/th&gt;
&lt;th&gt;Pro (official)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input, cache miss&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.435&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;td&gt;$0.87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input, cache hit&lt;/td&gt;
&lt;td&gt;$0.0028&lt;/td&gt;
&lt;td&gt;$0.0036&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pro is ~3.1× standard on both uncached input and output. If you're routing across multiple vendors and want one key and one base URL, CometAPI lists both at 20% below the official uncached pairs ($0.112/$0.224 standard, $0.348/$0.696 Pro) — the relative gap between variants stays the same, so it doesn't change the routing math, only the absolute bill.&lt;/p&gt;

&lt;p&gt;Price per token isn't cost per completed task. Tool retries, context bloat, output length, and failed-run recovery dominate real spend. Sample your own workload before you pick a default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling it
&lt;/h2&gt;

&lt;p&gt;Standard OpenAI-compatible client, nothing exotic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mimo-v2.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize the main findings in this technical report.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the live endpoint and request schema before deploying — model IDs on third-party gateways move independently of the upstream platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I'd put it
&lt;/h2&gt;

&lt;p&gt;Good fits: multimodal agents that mix screenshots, documents, video, audio, and tool calls; long-document analysis over repos, contracts, logs, and support history; media summarization and chart interpretation; coding and terminal agents; high-volume automation where sparse activation and low token price both matter.&lt;/p&gt;

&lt;p&gt;Bad fits: anything requiring image, audio, or video &lt;em&gt;generation&lt;/em&gt; — output is text only. And a 1M context ceiling is capacity, not uniform retrieval accuracy across the window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Routing table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;th&gt;Switch when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image/video/audio is a first-class input&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Only if multimodal preprocessing is acceptable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heavy document or mixed-media volume&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Pro only if reasoning failures dominate cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Difficult repository engineering&lt;/td&gt;
&lt;td&gt;Test both&lt;/td&gt;
&lt;td&gt;Pro if completion gain beats 3.1× unit cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long autonomous terminal runs&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;Back to standard if the gain isn't measurable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-volume routine automation&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Escalate failed/high-value tasks only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Default to standard, route only hard text-first coding and long-horizon agent work to Pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deprecation clock
&lt;/h2&gt;

&lt;p&gt;Xiaomi has announced that the official &lt;code&gt;mimo-v2.5&lt;/code&gt; and &lt;code&gt;mimo-v2.5-pro&lt;/code&gt; API model names will be deprecated at &lt;strong&gt;10:00 Beijing time on October 21, 2026&lt;/strong&gt;, with no automatic replacement (&lt;a href="https://mimo.mi.com/docs/en-US/updates/deprecate" rel="noopener noreferrer"&gt;deprecation notice&lt;/a&gt;). That applies to Xiaomi's own platform — check your gateway separately. Plan the migration and confirm the live route before you ship anything load-bearing against these IDs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open source?&lt;/strong&gt; Yes, MIT — commercial use, modification, fine-tuning, redistribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Params?&lt;/strong&gt; 310B total, 15B active per token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multimodal input?&lt;/strong&gt; Standard: text, image, video, audio → text. Pro's official spec lists text input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context?&lt;/strong&gt; Up to 1M on both model cards; Xiaomi's current API pages list 128K max output for both. Verify the deployed route.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding agents?&lt;/strong&gt; Pro reports higher shared benchmark scores, but the margin is small — test on your repo and compare task completion, latency, and total cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multimodal agents?&lt;/strong&gt; Standard, without question — Pro is text-only.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/what-is-mimo-v2-5/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=what-is-mimo-v2-5"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Qwen3.8-Omni-Flash: Field Notes on a 1M-Context Omnimodal Endpoint</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Fri, 09 Oct 2026 05:22:15 +0000</pubDate>
      <link>https://dev.to/ryancole1/qwen38-omni-flash-field-notes-on-a-1m-context-omnimodal-endpoint-3b10</link>
      <guid>https://dev.to/ryancole1/qwen38-omni-flash-field-notes-on-a-1m-context-omnimodal-endpoint-3b10</guid>
      <description>&lt;p&gt;I've been wiring &lt;code&gt;qwen3.8-omni-flash&lt;/code&gt; into a couple of internal tools over the last week — mostly meeting/recording triage and long-video extraction. Short version: it's the first model I've used where I don't have to run a separate ASR pass, a separate frame sampler, and then a text model to reconcile them. You hand it audio, video, images and text in one message and get text back.&lt;/p&gt;

&lt;p&gt;Below is what I actually had to figure out: endpoints, the parts of the API that behave unexpectedly, and where this thing is worth its token cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spec sheet that actually constrains your design
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qwen3.8-omni-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;text, image, audio, video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max input (non-thinking)&lt;/td&gt;
&lt;td&gt;991,808 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max input (thinking)&lt;/td&gt;
&lt;td&gt;983,616 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max output&lt;/td&gt;
&lt;td&gt;131,072 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking&lt;/td&gt;
&lt;td&gt;on by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reasoning_effort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;low&lt;/code&gt; / &lt;code&gt;medium&lt;/code&gt; / &lt;code&gt;xhigh&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function calling&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web search&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context caching&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multichannel audio&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API surfaces&lt;/td&gt;
&lt;td&gt;Chat Completions / Responses&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note the two max-input numbers. Thinking mode eats ~8k tokens of your budget before you've sent anything, so if you're near the 1M edge on a long video, that gap matters when you decide whether to enable deep reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keys, regions, and why your base URL is weird
&lt;/h2&gt;

&lt;p&gt;Five minutes of head-scratching saved: the API key and the endpoint have to belong to the same region. Supported regions are Beijing, Singapore, Hong Kong, Tokyo, Frankfurt and Virginia. A Singapore key against a Virginia workspace domain is an auth failure, not a helpful error.&lt;/p&gt;

&lt;p&gt;New integrations should use the workspace-scoped domains rather than the legacy DashScope hostnames. The Singapore shape is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;{WorkspaceId}&lt;/code&gt; for whatever the Model Studio console shows you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# bash&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# powershell&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alibaba exposes an OpenAI-compatible surface, so the stock Python SDK works. No vendor SDK required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize the advantages of native omnimodal models.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you'd rather skip the SDK while you're poking at it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "qwen3.8-omni-flash",
    "messages": [{
      "role": "user",
      "content": "Explain multimodal agent workflows in three bullet points."
    }]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Images: typed content blocks
&lt;/h2&gt;

&lt;p&gt;Nothing surprising here — same shape as any VL endpoint. Useful for dashboards, screenshots, document QA, visual diffing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/dashboard.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Identify the main metrics and summarize any anomalies.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Audio: don't just ask for a transcript
&lt;/h2&gt;

&lt;p&gt;If you only wanted a transcript, you'd use a dedicated ASR model and pay less. Where this wins is when the audio needs &lt;em&gt;interpretation&lt;/em&gt; — meeting summarization, speech understanding, sound-event analysis, or joint audio-visual reasoning.&lt;/p&gt;

&lt;p&gt;For long recordings, ask for structure. A flat "summarize this" gives you mush on a 90-minute call. Ask for speakers, decisions, action items, open questions, and timestamps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/meeting.wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wav&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize this meeting and extract action items.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multichannel / spatial audio is opt-in. If channel separation is part of the signal you care about — say, separating two mics in a room — you need this flag, otherwise the channels get folded and spatial cues are lost.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;use_multichannel&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Video: your prompt is the entire game
&lt;/h2&gt;

&lt;p&gt;The single biggest quality lever I've found. "Describe this video" burns context on irrelevant frames and returns a vague paragraph. A structured, evidence-oriented prompt changes the output category entirely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyze this product demonstration video.

Return:
1. A chronological summary.
2. Important visual steps with timestamps.
3. Spoken instructions.
4. Product names or UI text visible on screen.
5. Any discrepancy between the narration and the demonstrated action.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;video_prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;  &lt;span class="c1"&gt;# the block above
&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/demo.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;video_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vendor's launch write-up reports that agentic long-video understanding — where the model decides which segments are worth spending compute on — cut token usage per query from 145,736 to 79,117 in their OmniVideoBench setup (a ~45.7% reduction), with OmniVideoBench moving from 63.4 to 67.8 in agentic mode. That's vendor-reported on their own harness, so treat it as "plausible direction" rather than a number you'll get back. Still, the underlying lesson holds regardless of the exact figure: narrowing the question and demanding timestamped evidence is what saves you money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set &lt;code&gt;reasoning_effort&lt;/code&gt; explicitly. Every time.
&lt;/h2&gt;

&lt;p&gt;Thinking is on by default, and &lt;code&gt;xhigh&lt;/code&gt; is documented as the default effort. That means the naive call — the one you write to test the key works — is already at maximum reasoning depth. For a high-volume extraction pipeline, that's a silent cost multiplier.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;reasoning_effort&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Where I use it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;low&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;extraction, classification, trivial summaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;routine analysis, most production paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xhigh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;hard multimodal reasoning, agents, ambiguous evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the causes of the inconsistencies in this report.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The OpenAI-compatible layer also accepts mapped values, but don't assume every OpenAI reasoning string maps to a distinct behaviour here. Read the model-specific doc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming
&lt;/h2&gt;

&lt;p&gt;Standard Chat Completions deltas. Guard against the empty-choices chunks — you'll hit them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.8-omni-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze this multimodal task and propose a workflow.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;medium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The parameters worth remembering
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;model selection&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qwen3.8-omni-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;messages&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;conversation + media&lt;/td&gt;
&lt;td&gt;typed content blocks for media&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stream&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;incremental output&lt;/td&gt;
&lt;td&gt;use for anything interactive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reasoning_effort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;reasoning depth&lt;/td&gt;
&lt;td&gt;set &lt;code&gt;low&lt;/code&gt;/&lt;code&gt;medium&lt;/code&gt;/&lt;code&gt;xhigh&lt;/code&gt; explicitly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;enable_thinking&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;thinking toggle&lt;/td&gt;
&lt;td&gt;prefer &lt;code&gt;reasoning_effort&lt;/code&gt; here; this is non-standard, verify compatibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preserve_thinking&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;retains reasoning state across turns&lt;/td&gt;
&lt;td&gt;pass via &lt;code&gt;extra_body&lt;/code&gt;; retained reasoning inflates input tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;use_multichannel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;spatial audio&lt;/td&gt;
&lt;td&gt;only when channel info matters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max_tokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;output bound&lt;/td&gt;
&lt;td&gt;always set in production&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;preserve_thinking&lt;/code&gt; is the one that bites. Carrying reasoning state forward improves coherence on multi-turn agent loops, but every retained token is an input token you're paying for on every subsequent turn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes I've actually hit
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;bad/missing key&lt;/td&gt;
&lt;td&gt;check env var; check key region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model unavailable&lt;/td&gt;
&lt;td&gt;region/provider/rollout mismatch&lt;/td&gt;
&lt;td&gt;verify availability in your region + account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Media can't be fetched&lt;/td&gt;
&lt;td&gt;URL not reachable from the service&lt;/td&gt;
&lt;td&gt;use a publicly reachable source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow responses&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;xhigh&lt;/code&gt; on a trivial task&lt;/td&gt;
&lt;td&gt;drop to &lt;code&gt;medium&lt;/code&gt; or &lt;code&gt;low&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token cost creep&lt;/td&gt;
&lt;td&gt;large media or retained history&lt;/td&gt;
&lt;td&gt;trim context; audit &lt;code&gt;preserve_thinking&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model ignores stereo placement&lt;/td&gt;
&lt;td&gt;multichannel off&lt;/td&gt;
&lt;td&gt;&lt;code&gt;use_multichannel: True&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vague video output&lt;/td&gt;
&lt;td&gt;prompt too broad&lt;/td&gt;
&lt;td&gt;demand events, timestamps, output format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runaway response length&lt;/td&gt;
&lt;td&gt;no output constraints&lt;/td&gt;
&lt;td&gt;set &lt;code&gt;max_tokens&lt;/code&gt; and a schema&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Add the usual production scaffolding on top: request timeouts, exponential-backoff retries, usage logging per request, structured-output validation, and — this one matters more than usual — do not feed arbitrary user-supplied media URLs into the model without validating scheme and host. You're handing a remote fetch to a third party.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this model earns its keep
&lt;/h2&gt;

&lt;p&gt;Use it when the &lt;em&gt;relationship&lt;/em&gt; between modalities is the thing you're asking about. Not merely because your app happens to touch several file types.&lt;/p&gt;

&lt;p&gt;Good fits: meeting intelligence, long-form video analysis, media search, multimodal research agents, training-video extraction, support-recording analysis, and any workflow where audio-visual evidence triggers a tool call.&lt;/p&gt;

&lt;p&gt;Bad fits: bulk transcription (cheaper ASR exists), single-image classification (a VL model is cheaper), anything where you already know the answer is in the text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost and latency, in practice
&lt;/h2&gt;

&lt;p&gt;The wins come from media volume and reasoning depth — not from shaving words off your system prompt. Concretely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;low&lt;/code&gt; for extraction and classification, &lt;code&gt;medium&lt;/code&gt; for routine analysis, &lt;code&gt;xhigh&lt;/code&gt; only when the task genuinely needs it.&lt;/li&gt;
&lt;li&gt;For long video, narrow the question and demand timestamped evidence rather than asking for a full description.&lt;/li&gt;
&lt;li&gt;Use context caching for repeated large contexts.&lt;/li&gt;
&lt;li&gt;Stop carrying prior reasoning and prior media forward once they stop contributing to the next turn.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ, compressed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Images?&lt;/strong&gt; Yes, alongside text, audio and video.&lt;br&gt;
&lt;strong&gt;Audio input?&lt;/strong&gt; Yes, native — transcription, meeting analysis, sound-event understanding, multimodal reasoning.&lt;br&gt;
&lt;strong&gt;Audio output?&lt;/strong&gt; No. The non-realtime &lt;code&gt;qwen3.8-omni-flash&lt;/code&gt; documented here returns text. &lt;code&gt;Qwen3.8-Omni-Flash-Realtime&lt;/code&gt; is a separate product.&lt;br&gt;
&lt;strong&gt;Context window?&lt;/strong&gt; 1M tokens.&lt;br&gt;
&lt;strong&gt;Max output?&lt;/strong&gt; 131,072 tokens per Alibaba's current docs.&lt;br&gt;
&lt;strong&gt;OpenAI SDK compatible?&lt;/strong&gt; Yes, with the right base URL.&lt;br&gt;
&lt;strong&gt;Video with sound?&lt;/strong&gt; Yes — joint audio-video understanding is the headline capability.&lt;br&gt;
&lt;strong&gt;Function calling?&lt;/strong&gt; Yes.&lt;/p&gt;
&lt;h2&gt;
  
  
  One note on gateways
&lt;/h2&gt;

&lt;p&gt;If you're already routing across providers and don't want another set of credentials and region semantics to manage, a unified endpoint like CometAPI's (&lt;code&gt;https://api.cometapi.com/v1&lt;/code&gt;, OpenAI-compatible) can collapse the integration surface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before you ship against any gateway for this model, confirm the endpoint is actually enabled on your account and that the media modalities you need are proxied — newly launched multimodal endpoints tend to roll out in stages, and a gateway that supports text today may not pass video tomorrow. Verify the model identifier, supported inputs, and pricing against the live catalog rather than a blog post, including this one.&lt;/p&gt;

&lt;p&gt;The model itself is genuinely interesting because it removes an entire preprocessing tier. The thing that determines whether it's economical in your stack is less about the model and more about whether you discipline your media volume, reasoning effort, and conversation state.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-use-qwen3-8-omni-flash-api/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-use-qwen3-8-omni-flash-api"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Claude Haiku 5.5 in Production: 1M Context, a 100K Pricing Cliff, and a Tokenizer That Bites Back</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Fri, 09 Oct 2026 05:19:06 +0000</pubDate>
      <link>https://dev.to/ryancole1/claude-haiku-55-in-production-1m-context-a-100k-pricing-cliff-and-a-tokenizer-that-bites-back-4maa</link>
      <guid>https://dev.to/ryancole1/claude-haiku-55-in-production-1m-context-a-100k-pricing-cliff-and-a-tokenizer-that-bites-back-4maa</guid>
      <description>&lt;p&gt;I moved a chunk of my high-volume extraction and triage traffic onto Claude Haiku 5.5 around launch (October 7, 2026) and it is exactly what the tier promises: 1M tokens of context, 128K of standard output, adaptive reasoning, and base rates of &lt;strong&gt;$0.10/Mtok input and $0.50/Mtok output&lt;/strong&gt; for prompts up to 100K tokens.&lt;/p&gt;

&lt;p&gt;The model ID is &lt;code&gt;claude-haiku-5-5&lt;/code&gt; on the Claude API, &lt;code&gt;anthropic.claude-haiku-5-5&lt;/code&gt; on Bedrock. It also ships on Google Cloud and Microsoft Azure.&lt;/p&gt;

&lt;p&gt;The headline numbers are not where the surprises live. Three things will actually change your bill and your latency profile: the 100K pricing cliff is per-request and there are no exemptions, the new tokenizer counts roughly 30% more tokens for identical text, and every glossy benchmark score was measured at &lt;strong&gt;max&lt;/strong&gt; effort while the product default is &lt;strong&gt;medium&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually new versus Haiku 4.5
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Effort is now a dial
&lt;/h3&gt;

&lt;p&gt;Haiku 5.5 is the first Haiku with configurable effort levels, so you can trade reasoning depth against latency and token spend inside the same model. Default is medium. For "is this email a refund request, yes/no" I run low. For ambiguous field extraction or tool-planning steps where a wrong answer costs a retry, I bump it up. Adaptive thinking means the model also decides &lt;em&gt;when&lt;/em&gt; to reason, which introduces variance in both generated tokens and p95 latency — so tune thresholds on real distributions, not on an average.&lt;/p&gt;

&lt;h3&gt;
  
  
  The tokenizer quietly eats ~30% of the headline savings
&lt;/h3&gt;

&lt;p&gt;Anthropic's docs are explicit: the same input text counts as approximately &lt;strong&gt;30% more tokens&lt;/strong&gt; than it does on Haiku 4.5. The rate cut is real — 90% off Standard input/output under 100K — but Anthropic only claims &lt;strong&gt;~75% lower average running cost&lt;/strong&gt; once request-length mix and per-task token usage are accounted for. That gap is the tokenizer plus workload shape. If your cost model still assumes Haiku 4.5 token counts, your projection is wrong in the optimistic direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long context, with the usual discipline
&lt;/h3&gt;

&lt;p&gt;1M tokens of window is genuinely useful for long documents and fat conversation histories, but the cliff below is why I still use retrieval, truncation, and caching instead of just dumping everything in. A big window is a capability, not a pricing strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 100K cliff is per request, not per excess token
&lt;/h2&gt;

&lt;p&gt;Prompt length selects the pricing band for the &lt;em&gt;whole request&lt;/em&gt;. Cross 100K and the entire call is billed at the higher band — you don't get 100K at the cheap rate plus the overflow at the expensive one.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rate category&lt;/th&gt;
&lt;th&gt;Prompt ≤ 100K&lt;/th&gt;
&lt;th&gt;Prompt &amp;gt; 100K&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5-minute cache write&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$0.625&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1-hour cache write&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache read&lt;/td&gt;
&lt;td&gt;$0.01&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch input (50% off)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch output (50% off)&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rates above are official Standard/cache/Batch USD per million tokens, checked October 8, 2026. Cached workflows are where people get this wrong most often: count the &lt;em&gt;whole&lt;/em&gt; request, including history and tool definitions, for the selected model, then reconcile input, cache-write, cache-read, and output against the band the request landed in. Pull a few representative cached requests off your invoice before you set a budget.&lt;/p&gt;

&lt;p&gt;Here's the arithmetic on a scenario I actually ran, 100,000 requests/month at 2,000 input and 500 output tokens each (200M input, 50M output, all under the cliff, no caching or retries):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;REQ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IN_TOK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUT_TOK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
&lt;span class="n"&gt;official&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;                       &lt;span class="c1"&gt;# (input $/Mtok, output $/Mtok)
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;haiku-4.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;5.00&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;haiku-5.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sonnet-5.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;10.00&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;official&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;REQ&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN_TOK&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;OUT_TOK&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/month&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;official&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;haiku-5.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;   &lt;span class="c1"&gt;# gateway Standard = official x 0.8
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;haiku-5.5*&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;REQ&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IN_TOK&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;OUT_TOK&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/month&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output: &lt;code&gt;$450&lt;/code&gt;, &lt;code&gt;$45&lt;/code&gt;, &lt;code&gt;$900&lt;/code&gt;, and &lt;code&gt;$36&lt;/code&gt; for the discounted route. That last row is where a unified multi-model endpoint earns its keep — the same key and request shape also reaches Sonnet 5.5 and Opus 5.5, so routing by complexity doesn't mean a second SDK. CometAPI lists &lt;code&gt;claude-haiku-5-5&lt;/code&gt; at $0.08 input / $0.40 output per Mtok under 100K (and $0.40 / $2.00 over), i.e. 20% off the corresponding official Standard bands. I wouldn't assume that discount stacks on top of Batch or cache pricing without checking the live page.&lt;/p&gt;

&lt;p&gt;And note the framing: $450 → $45 is a 90% &lt;em&gt;rate&lt;/em&gt; reduction on a fixed-token illustration. It is not a promise that your equivalent workload costs 90% less. Recount your own inputs before you promise anyone a number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks: read the config, not the score
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Haiku 4.5&lt;/th&gt;
&lt;th&gt;Haiku 5.5&lt;/th&gt;
&lt;th&gt;Sonnet 5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GDPval-AA v2.1 (Elo)&lt;/td&gt;
&lt;td&gt;735&lt;/td&gt;
&lt;td&gt;1,620&lt;/td&gt;
&lt;td&gt;1,840&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AA-Briefcase v1.1 (Elo)&lt;/td&gt;
&lt;td&gt;614&lt;/td&gt;
&lt;td&gt;1,578&lt;/td&gt;
&lt;td&gt;1,824&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld 2.1, offline subset, partial credit&lt;/td&gt;
&lt;td&gt;15.7%&lt;/td&gt;
&lt;td&gt;72.4%&lt;/td&gt;
&lt;td&gt;83.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humanity's Last Exam, no tools&lt;/td&gt;
&lt;td&gt;10.2%&lt;/td&gt;
&lt;td&gt;45.9%&lt;/td&gt;
&lt;td&gt;56.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Humanity's Last Exam, with tools&lt;/td&gt;
&lt;td&gt;18.7%&lt;/td&gt;
&lt;td&gt;57.4%&lt;/td&gt;
&lt;td&gt;64.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 4.0&lt;/td&gt;
&lt;td&gt;0.0%&lt;/td&gt;
&lt;td&gt;39.2%&lt;/td&gt;
&lt;td&gt;70.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chartography, no tools&lt;/td&gt;
&lt;td&gt;6.4%&lt;/td&gt;
&lt;td&gt;46.4%&lt;/td&gt;
&lt;td&gt;61.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are vendor-reported (GDPval-AA and AA-Briefcase come from independently run Artificial Analysis evals). The evaluation config matters more than the digits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scores use adaptive thinking at &lt;strong&gt;max&lt;/strong&gt; effort, default sampling, five trials unless stated. Product default is medium. A headline score is not a default-setting guarantee for your app.&lt;/li&gt;
&lt;li&gt;OSWorld 2.1 is 82 offline tasks, no internet, 1080p, 500-action cap. The 72.4% is &lt;strong&gt;partial credit&lt;/strong&gt;; strict pass rate is 37.1%.&lt;/li&gt;
&lt;li&gt;Terminal-Bench 4.0 runs Claude Code in &lt;code&gt;--bare&lt;/code&gt; mode with safeguards on. Haiku 5.5 gets max effort, no fallback, no internet egress, 10 trials per task. Sonnet 5.5 gets five trials &lt;em&gt;and&lt;/em&gt; a fallback for some flagged requests. Haiku 4.5 uses a fixed 63,999-token thinking budget.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last bullet is why 39.2% vs 70.6% isn't a clean comparison. Reproduce effort, tools, scaffold, and budget before comparing against your own harness.&lt;/p&gt;

&lt;p&gt;My read: the OSWorld jump is the real story — Haiku 5.5 became dramatically more usable for structured GUI work. But Sonnet 5.5's Terminal-Bench lead confirms the larger-model advantage in agentic coding hasn't moved. Pick by failure cost, not by leaderboard rank.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing between the three tiers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Haiku 4.5&lt;/th&gt;
&lt;th&gt;Haiku 5.5&lt;/th&gt;
&lt;th&gt;Sonnet 5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context&lt;/td&gt;
&lt;td&gt;200K&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max standard output&lt;/td&gt;
&lt;td&gt;64K&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard input / MTok&lt;/td&gt;
&lt;td&gt;$1&lt;/td&gt;
&lt;td&gt;$0.10 ≤100K; $0.50 over&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard output / MTok&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$0.50 ≤100K; $2.50 over&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;Extended thinking, fixed budget&lt;/td&gt;
&lt;td&gt;Adaptive, medium default&lt;/td&gt;
&lt;td&gt;Adaptive, high default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relative latency&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Fastest at standard speed&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding depth&lt;/td&gt;
&lt;td&gt;Bounded tasks&lt;/td&gt;
&lt;td&gt;Stronger subagents&lt;/td&gt;
&lt;td&gt;More complex coding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical use&lt;/td&gt;
&lt;td&gt;Legacy small-model deployments&lt;/td&gt;
&lt;td&gt;High-volume workflows&lt;/td&gt;
&lt;td&gt;Complex production workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three take text + image input and emit text (that's not image generation). "Fastest" refers to standard-speed modes — Opus Fast Mode is explicitly excluded from that claim. Anthropic's product tiers don't establish parameter counts or architecture details, so don't infer them.&lt;/p&gt;

&lt;p&gt;Workload routing I'd actually ship:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email classification&lt;/td&gt;
&lt;td&gt;Haiku 5.5&lt;/td&gt;
&lt;td&gt;Short, repeated, verifiable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document field extraction&lt;/td&gt;
&lt;td&gt;Haiku 5.5&lt;/td&gt;
&lt;td&gt;Cheap structured processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support triage&lt;/td&gt;
&lt;td&gt;Haiku 5.5&lt;/td&gt;
&lt;td&gt;Fast first response + escalation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding subagents&lt;/td&gt;
&lt;td&gt;Haiku 5.5&lt;/td&gt;
&lt;td&gt;Low-cost file search, contained edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complex debugging&lt;/td&gt;
&lt;td&gt;Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Meaningfully better on coding evals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-stakes multi-step reasoning&lt;/td&gt;
&lt;td&gt;Opus 5.5&lt;/td&gt;
&lt;td&gt;Upper tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mixed traffic&lt;/td&gt;
&lt;td&gt;Haiku + Sonnet&lt;/td&gt;
&lt;td&gt;Route by complexity and confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sonnet wins when stronger judgment avoids repeated failed calls, tool retries, or human corrections. On a labeled sample of your own traffic, measure accepted-task rate, correction cost, and latency; route anything that fails explicit validation or exceeds tested task scope to a stronger model; then re-tune after any prompt, tool, or effort change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration notes that will actually bite you
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;temperature        -&amp;gt; omit; if sent, must be exactly 1
top_p              -&amp;gt; omit; if sent, must be exactly 0.99
top_k              -&amp;gt; omit; any value returns HTTP 400
temperature+top_p  -&amp;gt; both present returns HTTP 400
assistant prefill  -&amp;gt; banned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update the model ID and re-validate every endpoint-specific field.&lt;/li&gt;
&lt;li&gt;Recount tokens with the new tokenizer — including stable prefixes and tool definitions, not just user text.&lt;/li&gt;
&lt;li&gt;Re-test adaptive-thinking behavior and how you parse response blocks.&lt;/li&gt;
&lt;li&gt;Cap external-tool permissions, keep audit logs, and require review before consequential actions.&lt;/li&gt;
&lt;li&gt;Watch &lt;code&gt;stop_reason&lt;/code&gt; and &lt;code&gt;usage&lt;/code&gt;. If Haiku 4.5 completed a response and Haiku 5.5 truncates it, the tokenizer is counting more for the same text &lt;em&gt;and&lt;/em&gt; adaptive thinking can eat output budget. Don't copy legacy &lt;code&gt;max_tokens&lt;/code&gt;; retune on real tasks.&lt;/li&gt;
&lt;li&gt;Report p50/p95 latency, accepted-task rate, and total billable tokens — not token price.&lt;/li&gt;
&lt;li&gt;Stage the rollout with a rollback path for anything business-critical.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One subtle one: stored thinking blocks are only valid in the account that produced them, or an account linked to it. An unrelated account sending one has it discarded before the model sees it — the request can still succeed, just without that reasoning. If you continue a tool workflow, keep the conversation blocks and stay on the originating or linked account. A gateway or account switch needs explicit testing; matching a model name doesn't guarantee the blocks survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it isn't the right tool
&lt;/h2&gt;

&lt;p&gt;Haiku 5.5 is not a universal substitute. Long-horizon reasoning and complex coding are still real differentiators for Sonnet and Opus, and the 1M window costs you real money past 100K, so use it selectively. Adaptive reasoning adds variance you have to measure rather than assume.&lt;/p&gt;

&lt;p&gt;For high-volume work with measurable acceptance criteria, this is a straightforward upgrade: cheaper entry pricing, bigger window, adaptive reasoning, and much better published agentic/computer-use evals. For ambiguous decision-making or hard debugging, paying Sonnet or Opus rates often costs &lt;em&gt;less&lt;/em&gt; in total because you stop paying for retries and human corrections. Benchmark the whole workflow, not the token.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/what-is-claude-haiku-5-5/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=what-is-claude-haiku-5-5"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Running GLM-5.3-Flash Locally: Memory Budgets, Runtime Choices, and Working Commands</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Thu, 24 Sep 2026 08:33:20 +0000</pubDate>
      <link>https://dev.to/ryancole1/running-glm-53-flash-locally-memory-budgets-runtime-choices-and-working-commands-fao</link>
      <guid>https://dev.to/ryancole1/running-glm-53-flash-locally-memory-budgets-runtime-choices-and-working-commands-fao</guid>
      <description>&lt;p&gt;The first number I would check before deploying GLM-5.3-Flash is &lt;strong&gt;306 GiB&lt;/strong&gt;: the approximate size of its native FP8 weights. Its 18B active parameters per token describe compute usage, but the full model has about 320B parameters that still need somewhere to live.&lt;/p&gt;

&lt;p&gt;The weights are available under the MIT license. Local deployment is possible; the useful question is which combination of RAM, VRAM, quantization, and runtime makes sense for your workload.&lt;/p&gt;

&lt;p&gt;My starting point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server GPUs:&lt;/strong&gt; vLLM or SGLang.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hundreds of gigabytes of RAM plus consumer GPUs:&lt;/strong&gt; KTransformers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quantized workstation experiments:&lt;/strong&gt; llama.cpp or Ollama.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 24 GB or 32 GB GPU cannot hold the model alone. Single-GPU deployment relies on system RAM, offloading, and possibly quantization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget for the checkpoint and the requests
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://recipes.vllm.ai/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;official vLLM recipe&lt;/a&gt; puts native FP8 weights at approximately 306 GiB. KTransformers recommends at least &lt;strong&gt;350 GB of available system memory&lt;/strong&gt; for its native FP8 CPU-GPU path.&lt;/p&gt;

&lt;p&gt;GGUF gives you more sizing options. These are approximate model-file sizes, not total runtime requirements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Quantization&lt;/th&gt;
&lt;th&gt;Model size&lt;/th&gt;
&lt;th&gt;How I would budget&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BF16&lt;/td&gt;
&lt;td&gt;642 GB&lt;/td&gt;
&lt;td&gt;Server-class memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q8_0&lt;/td&gt;
&lt;td&gt;341 GB&lt;/td&gt;
&lt;td&gt;Large-memory server or workstation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q6_K_XL&lt;/td&gt;
&lt;td&gt;292 GB&lt;/td&gt;
&lt;td&gt;High-memory workstation/server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q5_K_XL&lt;/td&gt;
&lt;td&gt;240 GB&lt;/td&gt;
&lt;td&gt;256 GB RAM is likely too tight after overhead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q4_K_XL&lt;/td&gt;
&lt;td&gt;200 GB&lt;/td&gt;
&lt;td&gt;Roughly 256 GB+ system-memory class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IQ4_XS&lt;/td&gt;
&lt;td&gt;157 GB&lt;/td&gt;
&lt;td&gt;More realistically a 192–256 GB-class system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q3_K_XL&lt;/td&gt;
&lt;td&gt;148 GB&lt;/td&gt;
&lt;td&gt;Large-memory workstation, with a growing quality trade-off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q2_K_XL&lt;/td&gt;
&lt;td&gt;109 GB&lt;/td&gt;
&lt;td&gt;128 GB leaves little room beyond the file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IQ2_XXS&lt;/td&gt;
&lt;td&gt;102 GB&lt;/td&gt;
&lt;td&gt;Aggressive compression&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IQ1_S&lt;/td&gt;
&lt;td&gt;93.1 GB&lt;/td&gt;
&lt;td&gt;Extreme compression; task-specific validation required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Those planning notes are not official minimum specifications. Runtime buffers, metadata, multimodal components, KV cache, and the operating system all need memory. Context length, concurrency, GPU offload, and the quantization implementation change the actual fit.&lt;/p&gt;

&lt;p&gt;For a machine with 32–64 GB of system RAM, I would choose a smaller model or hosted access. At 128 GB, the smallest GGUF builds approach the available capacity, but predictable quality and long context are difficult targets. Around 256 GB or more, Q4_K_XL becomes a more practical starting point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why 18B active parameters does not solve the memory problem
&lt;/h3&gt;

&lt;p&gt;GLM-5.3-Flash routes each token through only part of its expert capacity. Its hybrid linear and sparse attention, including IndexPool, also reduces long-context costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://autoclaw.z.ai/blog/model/glm-5.3-flash/" rel="noopener noreferrer"&gt;Z.ai reports lower attention compute and KV-cache usage than GLM-5.3&lt;/a&gt;. That helps, but cache still grows with context and concurrent requests. A deployment that works at 8K can run out of memory on a much longer conversation.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://huggingface.co/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;official model card&lt;/a&gt; lists the following:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Native multimodal Mixture-of-Experts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total / active parameters&lt;/td&gt;
&lt;td&gt;320B / 18B per token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language-model layers&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attention&lt;/td&gt;
&lt;td&gt;Hybrid linear + sparse attention with IndexPool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum context&lt;/td&gt;
&lt;td&gt;1,048,576 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training corpus&lt;/td&gt;
&lt;td&gt;30T multimodal tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inputs / output&lt;/td&gt;
&lt;td&gt;Text, images, video, files / text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weights and license&lt;/td&gt;
&lt;td&gt;Open weights, MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official model ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zai-org/GLM-5.3-Flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning effort&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;low&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;; default &lt;code&gt;max&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I would configure context around the application’s actual input size. Allocating the full supported window during initial setup makes memory debugging harder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with GGUF for workstation experiments
&lt;/h2&gt;

&lt;p&gt;For a local experiment, I would start here unless matching the native checkpoint is a requirement. Unsloth publishes GGUF builds ranging from 1-bit through BF16.&lt;/p&gt;

&lt;p&gt;llama.cpp offers CPU-GPU offloading; Ollama provides a short launch command. Both still need enough total memory for the selected build.&lt;/p&gt;

&lt;h3&gt;
  
  
  llama.cpp
&lt;/h3&gt;

&lt;p&gt;Install on macOS or Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://llama.app/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;llama.cpp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the Q4_K_XL server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;llama serve &lt;span class="nt"&gt;-hf&lt;/span&gt; unsloth/GLM-5.3-Flash-GGUF:UD-Q4_K_XL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run it directly in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;llama cli &lt;span class="nt"&gt;-hf&lt;/span&gt; unsloth/GLM-5.3-Flash-GGUF:UD-Q4_K_XL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This build is about &lt;strong&gt;200 GB&lt;/strong&gt;. Before starting the download, check the quantization tag, repository file size, and available disk space.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama
&lt;/h3&gt;

&lt;p&gt;Unsloth documents direct Hugging Face loading:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run hf.co/unsloth/GLM-5.3-Flash-GGUF:UD-Q4_K_XL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The memory budget is the same underlying problem regardless of how short the command is.&lt;/p&gt;

&lt;p&gt;If Q4 does not fit, 3-bit, 2-bit, and 1-bit builds exist. I would select the highest-quality quantization that leaves room for runtime buffers and cache, then compare it against a native or hosted reference.&lt;/p&gt;

&lt;p&gt;Aggressive quantization can affect reasoning reliability, generated code, tool-call formatting, and multimodal behavior. A model that loads has passed only the capacity check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use KTransformers when the weights belong in system RAM
&lt;/h2&gt;

&lt;p&gt;KTransformers reads the official FP8 weights directly and distributes expert inference across CPU and GPU. This is the route I would investigate for a workstation with very large RAM capacity and one or more consumer GPUs.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/kvcache-ai/ktransformers/blob/main/doc/en/kt-kernel/GLM-5.3-Flash-Tutorial.md" rel="noopener noreferrer"&gt;GLM-5.3-Flash tutorial&lt;/a&gt; documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximately 306 GiB of FP8 weights and a recommendation for 350 GB of available system memory.&lt;/li&gt;
&lt;li&gt;NVIDIA SM89 and SM120 support, including RTX 40- and 50-series GPUs.&lt;/li&gt;
&lt;li&gt;AVX-512 FP8 CPU expert kernels.&lt;/li&gt;
&lt;li&gt;Single-GPU and four-GPU configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An RTX 4090 or RTX 5090 can participate, but most model state still sits outside VRAM. CPU capability, RAM bandwidth, and memory placement matter considerably.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install and prepare the checkpoint
&lt;/h3&gt;

&lt;p&gt;Create a Python 3.11 environment and install the SGLang integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda create &lt;span class="nt"&gt;-n&lt;/span&gt; glm53flash &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.11 &lt;span class="nt"&gt;-y&lt;/span&gt;
conda activate glm53flash

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"ktransformers[sglang]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Download &lt;a href="https://huggingface.co/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;&lt;code&gt;zai-org/GLM-5.3-Flash&lt;/code&gt;&lt;/a&gt; to local storage. Allow sufficient disk space for the checkpoint and available RAM for the server configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Launch the documented single-GPU configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;MODEL_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/GLM-5.3-Flash

&lt;span class="nv"&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 python &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.launch_server &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model-path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MODEL_PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-weight-path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MODEL_PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--served-model-name&lt;/span&gt; GLM-5.3-flash &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tp-size&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--context-length&lt;/span&gt; 501025 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--mem-fraction-static&lt;/span&gt; 0.65 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--chunked-prefill-size&lt;/span&gt; 2048 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-method&lt;/span&gt; FP8 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-cpuinfer&lt;/span&gt; 64 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-threadpool-count&lt;/span&gt; 2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-num-gpu-experts&lt;/span&gt; 0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--kt-gpu-prefill-token-threshold&lt;/span&gt; 2048 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cuda-graph-bs&lt;/span&gt; 1 2 4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--limit-mm-data-per-request&lt;/span&gt; &lt;span class="s1"&gt;'{"image":8,"video":1}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--mm-process-config&lt;/span&gt; &lt;span class="s1"&gt;'{"image":{"max_pixels":1254400}}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tool-call-parser&lt;/span&gt; glm47 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--reasoning-parser&lt;/span&gt; glm45
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tutorial validates this &lt;strong&gt;501,025-token&lt;/strong&gt; configuration. The model’s 1,048,576-token limit does not mean every deployment should allocate that much context.&lt;/p&gt;

&lt;p&gt;Check discovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:30000/v1/models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The OpenAI-compatible chat endpoint is &lt;code&gt;http://localhost:30000/v1/chat/completions&lt;/code&gt;. This launch command serves the model as &lt;code&gt;GLM-5.3-flash&lt;/code&gt;, so use that identifier for chat requests.&lt;/p&gt;

&lt;p&gt;If generation is extremely slow, investigate NUMA placement, RAM bandwidth, CPU instruction support, and storage behavior during loading. With substantial expert work on the CPU, memory capacity alone does not guarantee usable interactive performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serve native weights on GPU infrastructure
&lt;/h2&gt;

&lt;p&gt;For production serving, I would start with vLLM when throughput and ecosystem compatibility dominate. SGLang is also worth testing for agent workloads, structured generation, multimodal requests, and concurrency.&lt;/p&gt;

&lt;p&gt;Both serve the native checkpoint and support strong multi-GPU scaling. Their focus on CPU offload is more limited than KTransformers or llama.cpp.&lt;/p&gt;

&lt;h3&gt;
  
  
  vLLM
&lt;/h3&gt;

&lt;p&gt;Use Linux, a supported NVIDIA stack, sufficient aggregate GPU memory, and a recent supported vLLM build or the container specified in the current recipe.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vllm

vllm serve &lt;span class="s2"&gt;"zai-org/GLM-5.3-Flash"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tensor-parallel-size&lt;/span&gt; 8 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--served-model-name&lt;/span&gt; zai-org/GLM-5.3-Flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a reference launch configuration. Eight GPUs do not automatically imply enough usable memory or support for every feature.&lt;/p&gt;

&lt;p&gt;Verify the endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8000/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "zai-org/GLM-5.3-Flash",
    "messages": [
      {"role": "user", "content": "Reply with OK"}
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://recipes.vllm.ai/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;vLLM recipe&lt;/a&gt; also covers FP8 KV cache on supported Blackwell systems, MTP speculative decoding, tool and reasoning parsers, and prefill/decode disaggregation. I would take those flags from the current recipe because support changes quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  SGLang
&lt;/h3&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;sglang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.launch_server &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model-path&lt;/span&gt; &lt;span class="s2"&gt;"zai-org/GLM-5.3-Flash"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt; 30000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:30000/v1/chat/completions"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "zai-org/GLM-5.3-Flash",
    "messages": [{"role": "user", "content": "Give me three local deployment checks."}]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The official model card includes multimodal SGLang examples. For tool calling, check the parser configuration for the current integration. Parser flags from an older GLM release are not a reliable template.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the application contract before tuning throughput
&lt;/h2&gt;

&lt;p&gt;I would validate a deployment in this order: text generation, intended context length, tool schemas, multimodal inputs, and concurrent traffic.&lt;/p&gt;

&lt;p&gt;For the vLLM endpoint above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8000/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "zai-org/GLM-5.3-Flash",
    "messages": [
      {"role": "user", "content": "Return exactly: LOCAL_OK"}
    ],
    "reasoning_effort": "low"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adjust the port and served model name for your runtime.&lt;/p&gt;

&lt;p&gt;The model defaults to &lt;code&gt;reasoning_effort: "max"&lt;/code&gt;. Keep &lt;code&gt;max&lt;/code&gt; when reproducing benchmarks. For workstation iteration, &lt;code&gt;low&lt;/code&gt; or &lt;code&gt;high&lt;/code&gt; can be more practical.&lt;/p&gt;

&lt;p&gt;My acceptance checks would include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;What to exercise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context&lt;/td&gt;
&lt;td&gt;A document or repository-sized prompt near the application’s intended limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;Argument JSON, tool selection, repeated calls, recovery from tool errors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal&lt;/td&gt;
&lt;td&gt;Actual image/video formats and resolution ranges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concurrency&lt;/td&gt;
&lt;td&gt;Latency and memory with multiple active requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quantization&lt;/td&gt;
&lt;td&gt;Identical prompts against the selected GGUF and a native or hosted reference&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Separate memory tuning from latency tuning
&lt;/h3&gt;

&lt;p&gt;To reduce memory pressure, lower configured context and concurrency first. A small concurrency target with an explicit queue can suit a workstation better than server-style parallelism.&lt;/p&gt;

&lt;p&gt;Quantization reduces weight memory. CPU offload moves substantial model state into RAM, shifting performance pressure toward the CPU and memory bandwidth.&lt;/p&gt;

&lt;p&gt;Lowering &lt;code&gt;reasoning_effort&lt;/code&gt; can shorten generated reasoning, reduce latency, and consume fewer tokens. It &lt;strong&gt;does not reduce the memory needed to load the weights&lt;/strong&gt;. Any cache savings are indirect, from generating a shorter sequence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Diagnose failures by when they happen
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;First checks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Loads, then crashes on a long prompt&lt;/td&gt;
&lt;td&gt;KV-cache headroom; reduce context and concurrency, then increase gradually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GGUF fits on disk but fails in RAM&lt;/td&gt;
&lt;td&gt;Runtime buffers, cache, operating-system headroom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single-GPU KTransformers is too slow&lt;/td&gt;
&lt;td&gt;NUMA, RAM bandwidth, CPU support, CPU expert workload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool calls contain malformed JSON&lt;/td&gt;
&lt;td&gt;Current runtime parser configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download is hundreds of gigabytes&lt;/td&gt;
&lt;td&gt;Expected file size and selected quantization tag&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I would monitor both system RAM and GPU memory while increasing workload size. Otherwise, it is easy to mistake a successful checkpoint load for a viable serving configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide whether the capability justifies the deployment
&lt;/h2&gt;

&lt;p&gt;The benchmark case for this model is mainly coding, tool-driven automation, long-context document work, and multimodal workflows.&lt;/p&gt;

&lt;p&gt;These are &lt;a href="https://autoclaw.z.ai/blog/model/glm-5.3-flash/" rel="noopener noreferrer"&gt;Z.ai’s reported scores&lt;/a&gt;, not measurements from a local quantized deployment:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;GLM-5.3-Flash&lt;/th&gt;
&lt;th&gt;GLM-5.2&lt;/th&gt;
&lt;th&gt;Difference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;td&gt;84.3&lt;/td&gt;
&lt;td&gt;81.0&lt;/td&gt;
&lt;td&gt;+3.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE v1.1&lt;/td&gt;
&lt;td&gt;63.4&lt;/td&gt;
&lt;td&gt;46.2&lt;/td&gt;
&lt;td&gt;+17.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NL2Repo&lt;/td&gt;
&lt;td&gt;56.3&lt;/td&gt;
&lt;td&gt;48.9&lt;/td&gt;
&lt;td&gt;+7.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Toolathlon Verified&lt;/td&gt;
&lt;td&gt;78.4&lt;/td&gt;
&lt;td&gt;59.9&lt;/td&gt;
&lt;td&gt;+18.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AutomationBench v1.0.6&lt;/td&gt;
&lt;td&gt;48.8&lt;/td&gt;
&lt;td&gt;26.2&lt;/td&gt;
&lt;td&gt;+22.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agents' Last Exam&lt;/td&gt;
&lt;td&gt;26.3&lt;/td&gt;
&lt;td&gt;20.4&lt;/td&gt;
&lt;td&gt;+5.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HLE with Tools&lt;/td&gt;
&lt;td&gt;55.3&lt;/td&gt;
&lt;td&gt;54.7&lt;/td&gt;
&lt;td&gt;+0.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDPval-AA v2&lt;/td&gt;
&lt;td&gt;1773&lt;/td&gt;
&lt;td&gt;1504&lt;/td&gt;
&lt;td&gt;+269 Elo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I would use those results to decide what to evaluate locally, then let workload-specific tests determine whether the hardware and operating costs are justified.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where hosted access fits
&lt;/h3&gt;

&lt;p&gt;Self-hosting gives control over data residency, offline operation, quantization, and inference settings. It also makes hardware capacity, maintenance, and scaling your responsibility.&lt;/p&gt;

&lt;p&gt;Hosted access removes the upfront hardware requirement and provider-side maintenance, but sends data to the selected service, uses provider-selected quantization, and scales within provider limits.&lt;/p&gt;

&lt;p&gt;If I needed a unified multi-model API for reference comparisons or a fallback during deployment work, CometAPI provides an OpenAI-compatible endpoint using model ID &lt;code&gt;glm-5.3-flash&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;glm-5.3-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reply with OK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local hosting can make financial sense with suitable owned hardware, consistently high utilization, or a firm requirement to keep data inside your infrastructure. For intermittent workloads, I would weigh the fixed hardware and operational burden carefully.&lt;/p&gt;

&lt;p&gt;My deployment gate would be concrete: the chosen checkpoint fits with headroom, the runtime handles the required tools and inputs, and latency stays acceptable at the intended context and concurrency. Until those checks pass, a running server is still an experiment.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-run-glm-5-3-flash-locally/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-run-glm-5-3-flash-locally"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building Short Videos with Sora 2’s Native Audio</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Tue, 22 Sep 2026 04:51:43 +0000</pubDate>
      <link>https://dev.to/ryancole1/building-short-videos-with-sora-2s-native-audio-2n92</link>
      <guid>https://dev.to/ryancole1/building-short-videos-with-sora-2s-native-audio-2n92</guid>
      <description>&lt;p&gt;Sora 2 is OpenAI’s second-generation text-to-video model, but its most useful change is not purely visual. Audio is generated as part of the video workflow: dialogue, ambience, music cues, and sound effects can be described alongside the scene and synchronized with what happens on screen.&lt;/p&gt;

&lt;p&gt;That matters because the traditional workflow is split across several tools: generate the video, record or synthesize dialogue, find sound effects, add ambience, then manually align everything in an editor. Sora 2 attempts to produce those layers together from the first render.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sora 2 generates
&lt;/h2&gt;

&lt;p&gt;Sora 2 can produce several practical audio layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Synchronized dialogue&lt;/strong&gt; aligned with character lip movement and timing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound effects&lt;/strong&gt; connected to visible events such as footsteps, impacts, doors, and object movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environmental audio&lt;/strong&gt; including rain, wind, room tone, crowds, and distant traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Music cues&lt;/strong&gt;, such as short stings or background loops. Licensing and style restrictions may still apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A basic mix&lt;/strong&gt; combining the generated elements. For detailed balancing or mastering, export stems when the workflow supports it and finish in a DAW.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important distinction is that audio is not necessarily a post-process. The model simulates the sound and image together, which can improve synchronization between speech, physical actions, and the surrounding environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The audio capabilities worth testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dialogue and lip-sync in the generation pass
&lt;/h3&gt;

&lt;p&gt;Sora 2 can generate speech that matches a generated face or animated mouth. This is different from taking a finished video and running a separate lip-sync process over it: the timing and prosody are part of the generation step.&lt;/p&gt;

&lt;p&gt;That makes short dialogue-driven content practical without recording actors. Product micro-ads, instructional clips, social cameos, and quick narrative prototypes are obvious use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sound effects that follow the scene
&lt;/h3&gt;

&lt;p&gt;The model can associate sound with visible physical events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cup clinks when it hits a table.&lt;/li&gt;
&lt;li&gt;Footsteps reflect the apparent environment.&lt;/li&gt;
&lt;li&gt;A door creaks or slams at the moment it moves.&lt;/li&gt;
&lt;li&gt;An object impact produces a corresponding sound.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those details carry a surprising amount of perceived realism. Room tone gives a location scale, while a well-timed impact or sudden thud supplies an emotional cue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audio continuity across shots
&lt;/h3&gt;

&lt;p&gt;For sequences made from multiple shots or stitched clips, Sora 2 attempts to maintain characteristics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar room reverb&lt;/li&gt;
&lt;li&gt;Consistent voice timbre for recurring characters&lt;/li&gt;
&lt;li&gt;Matching environmental noise&lt;/li&gt;
&lt;li&gt;More coherent audio across cuts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is not a replacement for a sound editor, but it can reduce the amount of manual EQ and room-tone matching needed during early iterations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessing Sora 2
&lt;/h2&gt;

&lt;p&gt;There are two main access paths:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sora app or web app&lt;/strong&gt; — OpenAI announced Sora 2 with an app for creating videos without code. Availability is staged by region, app store, and access window. Recent wider-access periods have included the US, Canada, Japan, and South Korea, with quotas and other limitations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Video API&lt;/strong&gt; — The video API exposes &lt;code&gt;sora-2&lt;/code&gt; and &lt;code&gt;sora-2-pro&lt;/code&gt;. Requests can include a prompt, duration in seconds, output size, and input references. &lt;code&gt;sora-2&lt;/code&gt; is positioned for faster iteration, while &lt;code&gt;sora-2-pro&lt;/code&gt; targets higher fidelity and more complex scenes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A unified multi-model gateway such as &lt;a href="https://www.cometapi.com/" rel="noopener noreferrer"&gt;CometAPI&lt;/a&gt; can expose the same Sora 2 API call style and endpoints, with pricing listed below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimal API request
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;v1/videos&lt;/code&gt; endpoint accepts &lt;code&gt;model=sora-2&lt;/code&gt; or &lt;code&gt;sora-2-pro&lt;/code&gt;. This example asks for dialogue, applause, and a sustained piano note:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.cometapi.com/v1/videos &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"model=sora-2"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"prompt=A calico cat playing a piano on stage. Audio: single speaker narrator says 'At last, the show begins'. Add applause and piano sustain after the final chord."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"seconds=8"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"size=1280x720"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The request creates a video job. Once processing finishes, the result is an MP4 with audio baked into it; the API returns a job ID and, when ready, a download URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Listed API pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sora-2&lt;/td&gt;
&lt;td&gt;$0.08 per second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sora-2-pro&lt;/td&gt;
&lt;td&gt;$0.24 per second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A practical prompt-to-video workflow
&lt;/h2&gt;

&lt;p&gt;I generally treat the audio plan as part of the shot plan rather than adding it after writing the visual prompt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the scene, characters, dialogue, mood, and whether the sound is diegetic or musical.&lt;/li&gt;
&lt;li&gt;Describe the audio explicitly: speakers, delivery, pacing, effects, and ambience.&lt;/li&gt;
&lt;li&gt;Start with a short render, usually 4–8 seconds for rapid iteration.&lt;/li&gt;
&lt;li&gt;Check speech timing, lip-sync, background noise, and event-based effects.&lt;/li&gt;
&lt;li&gt;Export the mixed result or stems, if available, and finish the mix externally when exact control matters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sora 2 is aimed at short cinematic clips. Longer sequences can be created through multi-shot or stitching workflows, but they typically require more iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-step audio versus a separate narration asset
&lt;/h2&gt;

&lt;p&gt;Use the video endpoint when the goal is a single prompt that produces video and audio together.&lt;/p&gt;

&lt;p&gt;A separate speech asset makes more sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The narrator must remain consistent across many videos.&lt;/li&gt;
&lt;li&gt;You need to audition different voices.&lt;/li&gt;
&lt;li&gt;Voice timbre and prosody require tighter control.&lt;/li&gt;
&lt;li&gt;The same narration will be reused in multiple edits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The speech endpoint is &lt;code&gt;/v1/audio/speech&lt;/code&gt;. You can generate an MP3, import it into Final Cut or Premiere, and replace or layer the generated audio. Where supported, the audio can also be supplied as an input reference for a remix workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.openai.com/v1/audio/speech &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gpt-speech-1",
    "voice": "alloy",
    "input": "Welcome to our product demo. Today we show fast AI video generation."
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; narration.mp3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The primary Sora 2 workflow already generates audio. Separate speech generation is for voice consistency, external reuse, or more controlled production pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Node.js example
&lt;/h2&gt;

&lt;p&gt;The official SDK can create the video job directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;videos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sora-2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
A friendly robot waters plants on a balcony at sunrise.
Audio: soft morning birds, one speaker voiceover says
"Good morning, little world." Include distant city ambience.
Style: gentle, warm.
  `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1280x720&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Poll the job and download the result after completion.&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Video job created:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK call creates the job; polling and downloading the completed result follow the video API’s job lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt structure that works better
&lt;/h2&gt;

&lt;p&gt;I get more predictable results when the prompt has a clear visual section followed by an explicit audio section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visual scene and action.

Audio:
- Number of speakers
- Voice, tone, and pacing
- Dialogue
- Sound effects and timing
- Environmental ambience
- Optional mix perspective
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A rainy evening on a narrow city alley. A woman in a red coat hurries across wet cobblestones toward a flickering neon sign.

Audio: Two speakers. Speaker A, the woman, breathes slightly and sounds hurried. Speaker B, an offscreen street vendor, calls out once. Add steady rain on a roof, a distant car, and the clatter of an empty can when she kicks it.

Dialogue:
Speaker A: "I'm late. I can't believe I missed it."
Speaker B, muffled, one line: "You better run!"

Style: cinematic, shallow depth of field, close-up when she speaks. Sync dialogue to lip movement and use naturalistic reverb.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Putting the audio instructions after the visual description helps bind sounds to the events already established in the scene. For timing-sensitive clips, include explicit timecodes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[SFX: door_close @00:01]
[SFX: impact @00:04]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also separate camera instructions from audio instructions instead of mixing everything into one sentence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remixing and targeted edits
&lt;/h2&gt;

&lt;p&gt;Sora 2 supports remix-style workflows for changes such as extending a scene or replacing its background. Audio changes should be stated in the remix request too:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Replace the music with sparse piano. Keep the dialogue identical,
but move the second line to 2.5 seconds. Preserve the room ambience.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when the visual result is close and rebuilding the entire shot would be wasteful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting audio problems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lip-sync is drifting
&lt;/h3&gt;

&lt;p&gt;Make the dialogue timing more explicit and simplify competing background noise. Strong ambience can mask speech or affect perceived timing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The voice sounds muffled or too reverberant
&lt;/h3&gt;

&lt;p&gt;Specify the acoustic target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dry voice, minimal reverb, close microphone perspective.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, for a location-based sound:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Natural room reverb, voice slightly distant from the camera.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Effects are too loud or buried
&lt;/h3&gt;

&lt;p&gt;Use relative balance instructions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Soft door close. Dialogue should be 3 dB louder than ambience.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The generation contains unwanted artifacts
&lt;/h3&gt;

&lt;p&gt;Regenerate with slightly different wording. Alternate phrasing can produce cleaner audio even when the underlying scene description remains the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three prompt patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product reveal: 7–12 seconds
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7s, studio product shot: small espresso machine on a counter.
Visual: slow 3/4 pan in.
Dialogue: "Perfect crema, every time."
Voice: confident, friendly, male, medium tempo.
SFX: steam release at 0:04, small metallic click at 0:06.
Ambient: low cafe murmur.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A short spoken hook paired with a recognizable product sound gives the clip an immediate sensory identity. A brand jingle can still be added in post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instructional clip: 10 seconds
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10s, overhead kitchen shot.
Visual: hands sprinkle salt into a bowl, then whisk.
Audio: step narration, female and calm:
"One pinch of sea salt."
SFX: salt sprinkle at the start, whisking texture under narration.
Ambient: quiet kitchen.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This combines instructional narration with diegetic sounds that reinforce each action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tension beat: 6 seconds
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;6s, alleyway at dusk.
Visual: quick low-angle shot of a bicyclist's tire skidding.
Audio: sudden metallic screech at 00:02 synced to the skid,
heartbeat-like low bass underlay, distant thunder.
No dialogue.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Short tension scenes depend on precise effects and low-frequency cues. Keeping the sound plan compact makes the timing easier to evaluate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I would not use Sora 2 alone
&lt;/h2&gt;

&lt;p&gt;Long-form narrative work with complex dialogue, many scenes, and detailed mixes still benefits from human performers and dedicated sound design.&lt;/p&gt;

&lt;p&gt;I also would not treat synthetic media as a substitute for authenticated recordings in legal proceedings, evidence workflows, or other strict compliance contexts.&lt;/p&gt;

&lt;p&gt;For ordinary short-form production, though, native audio changes the iteration loop. I can describe the action, the sound, and their relationship in one request, then spend time refining the creative result instead of manually assembling every layer from scratch.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-create-video-using-sora-2s-audio-tool/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-create-video-using-sora-2s-audio-tool"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building Short Midjourney V1 Videos with an Image-to-Video API</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Tue, 22 Sep 2026 02:00:39 +0000</pubDate>
      <link>https://dev.to/ryancole1/building-short-midjourney-v1-videos-with-an-image-to-video-api-5gme</link>
      <guid>https://dev.to/ryancole1/building-short-midjourney-v1-videos-with-an-image-to-video-api-5gme</guid>
      <description>&lt;p&gt;Midjourney’s V1 video model is designed around a straightforward workflow: start with one still image and turn it into a short animated clip. The source image can come from Midjourney or from an externally hosted URL.&lt;/p&gt;

&lt;p&gt;The default output is roughly five seconds long. Clips can be extended in four-second increments to approximately 21 seconds, and the result is delivered as an MP4. This makes V1 useful for animated stills, product loops, stylized social content, and short visual experiments rather than long-form cinematic sequences.&lt;/p&gt;

&lt;h2&gt;
  
  
  What V1 Actually Does
&lt;/h2&gt;

&lt;p&gt;Midjourney V1 is an image-to-video model. It prioritizes preserving the source image’s visual identity, including its color palette, brushwork, subject, and overall mood.&lt;/p&gt;

&lt;p&gt;The main characteristics are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base clip length of approximately five seconds.&lt;/li&gt;
&lt;li&gt;Extensions in four-second increments, up to a documented limit of roughly 21 seconds.&lt;/li&gt;
&lt;li&gt;Automatic or manual animation modes.&lt;/li&gt;
&lt;li&gt;Low- and high-motion controls through &lt;code&gt;--motion low&lt;/code&gt; and &lt;code&gt;--motion high&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configurable batch size, looping, and end frames.&lt;/li&gt;
&lt;li&gt;MP4 output.&lt;/li&gt;
&lt;li&gt;Primarily SD output at 480p, with HD output at 720p available through the appropriate model or video-type parameter.&lt;/li&gt;
&lt;li&gt;A quality and resolution tradeoff aimed at quick iteration, web content, and social media rather than full cinematic production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical implication is that the starting image matters more than it would in a text-to-video workflow. A clear subject, deliberate composition, and usable aspect ratio give the model less ambiguity to resolve.&lt;/p&gt;

&lt;p&gt;For programmatic access, I use CometAPI’s unified REST interface, which exposes the Midjourney V1 video capability through &lt;code&gt;/mj/submit/video&lt;/code&gt;. The request accepts an image URL in &lt;code&gt;prompt&lt;/code&gt;, a &lt;code&gt;videoType&lt;/code&gt; such as &lt;code&gt;vid_1.1_i2v_480&lt;/code&gt;, a generation &lt;code&gt;mode&lt;/code&gt;, and an &lt;code&gt;animateMode&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide the Parameters Before Submitting
&lt;/h2&gt;

&lt;p&gt;There are a few decisions worth making before writing the request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting image
&lt;/h3&gt;

&lt;p&gt;External images need to be available at publicly reachable URLs. Choose an image with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clear primary subject.&lt;/li&gt;
&lt;li&gt;Enough visual separation between foreground and background.&lt;/li&gt;
&lt;li&gt;A composition that works at the intended output aspect ratio.&lt;/li&gt;
&lt;li&gt;A subject whose expected movement is physically plausible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Starting aspect ratio affects the final video dimensions and whether the result maps cleanly to SD or HD output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Motion
&lt;/h3&gt;

&lt;p&gt;Use low motion for subtle camera movement, restrained subject animation, or loop-friendly clips. High motion is more appropriate when the subject needs to travel or the scene contains more visible movement.&lt;/p&gt;

&lt;p&gt;You can either let the model infer motion automatically or describe it explicitly in manual mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Duration and batch size
&lt;/h3&gt;

&lt;p&gt;The default clip is approximately five seconds. Extensions add four seconds at a time, up to roughly 21 seconds.&lt;/p&gt;

&lt;p&gt;The default batch size is four variants. For production jobs or cost-sensitive iteration, request one or two variants instead. A batch size of one is represented by &lt;code&gt;bs: 1&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resolution
&lt;/h3&gt;

&lt;p&gt;V1 is primarily oriented around 480p SD output. HD output is 720p and requires the relevant documented video type or parameter. The examples below use &lt;code&gt;vid_1.1_i2v_480&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Submit a Video Job
&lt;/h2&gt;

&lt;p&gt;The smallest useful request includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;prompt&lt;/code&gt;: an image URL, optionally followed by a motion description.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;videoType&lt;/code&gt;: for example, &lt;code&gt;vid_1.1_i2v_480&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mode&lt;/code&gt;: usually &lt;code&gt;"fast"&lt;/code&gt;, or &lt;code&gt;"relax"&lt;/code&gt; when supported by the plan.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;animateMode&lt;/code&gt;: &lt;code&gt;"automatic"&lt;/code&gt; or &lt;code&gt;"manual"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a complete request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--location&lt;/span&gt; &lt;span class="nt"&gt;--request&lt;/span&gt; POST &lt;span class="s1"&gt;'https://api.cometapi.com/mj/submit/video'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: Bearer sk-YOUR_COMETAPI_KEY'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-raw&lt;/span&gt; &lt;span class="s1"&gt;'{
    "prompt": "https://cdn.midjourney.com/example/0_0.png A peaceful seaside scene — camera slowly zooms out and a gull flies by",
    "videoType": "vid_1.1_i2v_480",
    "mode": "fast",
    "animateMode": "manual",
    "motion": "low",
    "bs": 1
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image URL and motion instruction are combined in the &lt;code&gt;prompt&lt;/code&gt; field. In this example, manual animation is paired with low motion, a single output variant, and a slow zoom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Submit and Poll from Python
&lt;/h2&gt;

&lt;p&gt;The API is asynchronous, so the basic integration pattern is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Submit the generation request.&lt;/li&gt;
&lt;li&gt;Extract the returned job identifier.&lt;/li&gt;
&lt;li&gt;Poll the status endpoint.&lt;/li&gt;
&lt;li&gt;Download the video once the job reaches &lt;code&gt;completed&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A minimal &lt;code&gt;requests&lt;/code&gt; implementation looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-YOUR_COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cdn.midjourney.com/example/0_0.png A calm city street — camera pans left, rain falling&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;videoType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vid_1.1_i2v_480&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fast&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;animateMode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;manual&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;motion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Submit job
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/mj/submit/video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;job&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;job_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;job_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Poll for completion (example polling)
&lt;/span&gt;&lt;span class="n"&gt;status_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/mj/status/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;job_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  &lt;span class="c1"&gt;# poll up to ~60 times
&lt;/span&gt;    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;st&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;download_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video ready:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;download_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a production worker, I would move the polling loop into a job system, add request timeouts and retry handling, and persist the provider job ID rather than keeping it only in process memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Motion Prompts
&lt;/h2&gt;

&lt;p&gt;Motion prompts are natural-language instructions. I get more predictable results by keeping the movement description short and separating camera movement from subject movement.&lt;/p&gt;

&lt;p&gt;Useful patterns include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;"camera dolly left while the subject walks forward"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"leaf falls from tree and drifts toward camera"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"slow zoom in, slight parallax, 2x speed"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"subtle motion, loopable, cinematic rhythm"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A more structured prompt can be written like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;start_frame_url animate: "slow spiral camera, subject bobs gently, loopable", style: "film grain, cinematic, 2 fps tempo"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The useful progression is to state the action first, then add timing and stylistic constraints. Small iterations are more productive than stacking a long list of unrelated instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automatic versus manual animation
&lt;/h3&gt;

&lt;p&gt;Automatic animation is useful when plausible motion is enough. The model infers how the scene should move and is usually the fastest way to test an image.&lt;/p&gt;

&lt;p&gt;Manual animation is better when camera direction, subject movement, or choreography needs to be repeatable. It is also the better choice when the clip must align with live-action footage or a predefined sequence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extending and Looping Clips
&lt;/h2&gt;

&lt;p&gt;A generated five-second clip can be extended by four seconds per operation, up to approximately 21 seconds. In the UI, this is exposed through an &lt;strong&gt;Extend&lt;/strong&gt; control. Programmatically, wrappers generally expose an &lt;code&gt;extend&lt;/code&gt; flag or a separate extend job referencing the original clip. The exact parameterized endpoints and controls depend on the API documentation.&lt;/p&gt;

&lt;p&gt;Extensions should be treated as additional generation work, with costs similar to an initial generation.&lt;/p&gt;

&lt;p&gt;For loops, reuse the starting frame as the ending frame or use the &lt;code&gt;--loop&lt;/code&gt; parameter. For a different ending, provide another image URL through &lt;code&gt;end&lt;/code&gt; and keep its aspect ratio compatible with the starting image. Midjourney also supports a &lt;code&gt;--end&lt;/code&gt; parameter. Manual extension can help adjust the motion prompt when continuity starts to drift.&lt;/p&gt;

&lt;p&gt;Batch size is another simple cost control. Since the default is four variants, setting &lt;code&gt;bs: 1&lt;/code&gt; is useful when the goal is a single production candidate rather than exploration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Audio After Generation
&lt;/h2&gt;

&lt;p&gt;Midjourney V1 produces silent MP4 video. Audio is not generated natively, so voice, music, and effects need to be added afterward.&lt;/p&gt;

&lt;p&gt;A practical audio pipeline usually has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate narration with a text-to-speech service such as ElevenLabs, Replica, or another voice-cloning/TTS provider.&lt;/li&gt;
&lt;li&gt;Generate or source music and sound effects using tools such as MM Audio, Magicshot, or specialized SFX generators.&lt;/li&gt;
&lt;li&gt;Mix the tracks in DaVinci Resolve, Premiere, Audacity, or a similar editor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For timing-sensitive work, I would do the final mix in a DAW or video editor. That provides better control over dialogue timing, sound effects, background levels, and synchronization than trying to assemble everything through isolated API calls.&lt;/p&gt;

&lt;p&gt;For a simple silent video plus speech track, &lt;code&gt;ffmpeg&lt;/code&gt; is enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Normalize audio length (optional), then combine:&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; video.mp4 &lt;span class="nt"&gt;-i&lt;/span&gt; speech.mp3 &lt;span class="nt"&gt;-c&lt;/span&gt;:v copy &lt;span class="nt"&gt;-c&lt;/span&gt;:a aac &lt;span class="nt"&gt;-shortest&lt;/span&gt; output_with_audio.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For dialogue, music, and effects, render one mixed audio track first, then mux that track into the MP4 using the same approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where V1 Fits
&lt;/h2&gt;

&lt;p&gt;V1 is deliberately constrained: short clips, image-driven motion, and relatively modest control over long sequences. Those constraints are also what make it useful for fast iteration.&lt;/p&gt;

&lt;p&gt;The strongest use cases are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animated illustrations.&lt;/li&gt;
&lt;li&gt;Product hero loops.&lt;/li&gt;
&lt;li&gt;Short character movements.&lt;/li&gt;
&lt;li&gt;Stylized social clips.&lt;/li&gt;
&lt;li&gt;Loopable background visuals.&lt;/li&gt;
&lt;li&gt;Motion studies from existing still images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is less suitable for long continuous scenes, complex multi-shot narratives, or workflows that require precise cinematic camera rigs. The model is expected to improve over time in sequence length, fidelity, and camera control, but the current workflow is best treated as concise motion design built from a strong still frame.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-create-a-video-in-midjourney-api/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-create-a-video-in-midjourney-api"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I’d Choose Between GPT-Image-2.5 and Nano Banana 2 for Production</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Tue, 22 Sep 2026 01:23:01 +0000</pubDate>
      <link>https://dev.to/ryancole1/how-id-choose-between-gpt-image-25-and-nano-banana-2-for-production-55pa</link>
      <guid>https://dev.to/ryancole1/how-id-choose-between-gpt-image-25-and-nano-banana-2-for-production-55pa</guid>
      <description>&lt;p&gt;I’d start with Sunburst for edits that must preserve a product or person, Flare for rapid iteration, and Nano Banana 2 for generation that needs search context, unusual canvas shapes, or predictable batch costs.&lt;/p&gt;

&lt;p&gt;That split is more useful than declaring an overall winner. The reported Arena results favor GPT-Image-2.5, especially for editing, but a preference leaderboard doesn’t measure retrieval integration, output constraints, or the cost of producing thousands of acceptable assets.&lt;/p&gt;

&lt;p&gt;This comparison uses the September 2026 release and leaderboard snapshot discussed below. The OpenAI benchmark entries are still preliminary; I’d treat them as a reason to prioritize an evaluation, rather than a substitute for one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the API contract
&lt;/h2&gt;

&lt;p&gt;GPT-Image-2.5 has two API variants. OpenAI launched both on September 8, 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flare&lt;/strong&gt; targets everyday generation, fast iteration, and volume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunburst&lt;/strong&gt; spends more generation time on precision editing and tighter creative control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nano Banana 2 is Google’s &lt;strong&gt;Gemini 3.1 Flash Image&lt;/strong&gt;, introduced on February 26, 2026. Google’s release notes place general availability on May 28, 2026, with video-to-image context support added. The older preview model ID was deprecated, although some integration URLs still contain the preview slug.&lt;/p&gt;

&lt;p&gt;Here’s the contract I’d compare before looking at sample images:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;GPT-Image-2.5 Flare&lt;/th&gt;
&lt;th&gt;GPT-Image-2.5 Sunburst&lt;/th&gt;
&lt;th&gt;Nano Banana 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API model ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-image-2.5-flare&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-image-2.5-sunburst&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.1-flash-image&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;Text, image&lt;/td&gt;
&lt;td&gt;Text, image&lt;/td&gt;
&lt;td&gt;Text, image, video context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;td&gt;Image, text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main role&lt;/td&gt;
&lt;td&gt;Fast generation and controlled edits&lt;/td&gt;
&lt;td&gt;Precision editing and premium assets&lt;/td&gt;
&lt;td&gt;Grounded multimodal generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quality settings&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, &lt;code&gt;xhigh&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;, &lt;code&gt;auto&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;Primarily resolution-driven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Common output sizes&lt;/td&gt;
&lt;td&gt;1024×1024, 1536×1024, 1024×1536&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;0.5K, 1K, 2K, 4K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum edge&lt;/td&gt;
&lt;td&gt;3840 px&lt;/td&gt;
&lt;td&gt;3840 px&lt;/td&gt;
&lt;td&gt;Up to 4K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aspect ratios&lt;/td&gt;
&lt;td&gt;Approximately 1:3 through 3:1&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;Includes 1:4, 4:1, 1:8, 8:1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transparent backgrounds&lt;/td&gt;
&lt;td&gt;PNG and WebP&lt;/td&gt;
&lt;td&gt;PNG and WebP&lt;/td&gt;
&lt;td&gt;Not a headline API capability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native search grounding&lt;/td&gt;
&lt;td&gt;Not documented at image-model level&lt;/td&gt;
&lt;td&gt;Not documented at image-model level&lt;/td&gt;
&lt;td&gt;Google Web and Image Search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking&lt;/td&gt;
&lt;td&gt;Not exposed as a core capability&lt;/td&gt;
&lt;td&gt;Not exposed as a core capability&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch API&lt;/td&gt;
&lt;td&gt;Not a headline 2.5 feature&lt;/td&gt;
&lt;td&gt;Not a headline 2.5 feature&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OpenAI’s model documentation describes &lt;a href="https://developers.openai.com/api/docs/models/gpt-image-2.5-flare" rel="noopener noreferrer"&gt;Flare&lt;/a&gt; as the faster everyday option and &lt;a href="https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst" rel="noopener noreferrer"&gt;Sunburst&lt;/a&gt; as the variant optimized for editing precision. Both expose the six quality settings above.&lt;/p&gt;

&lt;p&gt;For Google, I’d check the current &lt;a href="https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image" rel="noopener noreferrer"&gt;Gemini 3.1 Flash Image documentation&lt;/a&gt;, particularly when migrating an integration that still references the preview model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Editing is where I’d test Sunburst first
&lt;/h2&gt;

&lt;p&gt;The useful editing question is how much unrelated content changes after each revision.&lt;/p&gt;

&lt;p&gt;A product workflow might replace a background, adjust lighting, add seasonal styling, revise copy, and then change the aspect ratio. Each individual render can look good while the bottle, label, or person slowly drifts away from the reference.&lt;/p&gt;

&lt;p&gt;OpenAI’s &lt;a href="https://openai.com/index/introducing-chatgpt-images-2-5/" rel="noopener noreferrer"&gt;Images 2.5 announcement&lt;/a&gt; emphasizes preservation of reference subjects, natural lighting, richer textures, and more consistent multi-turn edits. Sunburst specifically targets the workflows where preserving those details matters more than minimum latency.&lt;/p&gt;

&lt;p&gt;That makes it my first evaluation candidate for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product photographs where packaging and geometry must survive revisions.&lt;/li&gt;
&lt;li&gt;Campaign assets with repeated changes to copy, placement, and styling.&lt;/li&gt;
&lt;li&gt;Character or subject transformations driven by reference images.&lt;/li&gt;
&lt;li&gt;Structured posters, branded layouts, and transparent design elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flare occupies the faster lane in the same family. OpenAI claims higher-quality output with &lt;strong&gt;up to 50% lower generation latency than GPT Image 2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That figure is an OpenAI generation-to-generation comparison. It says nothing conclusive about Flare’s speed relative to Nano Banana 2. I’d benchmark both with the same prompts, output dimensions, and concurrency before making a latency commitment.&lt;/p&gt;

&lt;p&gt;Google’s model also supports conversational editing and subject consistency. Its stronger differentiator is the surrounding Gemini workflow: reasoning, search, multilingual text, and multiple references.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Arena numbers actually support
&lt;/h2&gt;

&lt;p&gt;Arena aggregates blind side-by-side human preferences. The reported snapshot looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arena metric&lt;/th&gt;
&lt;th&gt;Sunburst&lt;/th&gt;
&lt;th&gt;Flare&lt;/th&gt;
&lt;th&gt;Nano Banana 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-Image score&lt;/td&gt;
&lt;td&gt;1421±13&lt;/td&gt;
&lt;td&gt;1399±13&lt;/td&gt;
&lt;td&gt;1261±5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-Image rank&lt;/td&gt;
&lt;td&gt;#1&lt;/td&gt;
&lt;td&gt;#2&lt;/td&gt;
&lt;td&gt;#9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-Image votes&lt;/td&gt;
&lt;td&gt;3,149&lt;/td&gt;
&lt;td&gt;2,856&lt;/td&gt;
&lt;td&gt;41,957&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single Image Edit score&lt;/td&gt;
&lt;td&gt;1520±9&lt;/td&gt;
&lt;td&gt;1491±9&lt;/td&gt;
&lt;td&gt;1387±4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single Image Edit rank&lt;/td&gt;
&lt;td&gt;#1&lt;/td&gt;
&lt;td&gt;#2&lt;/td&gt;
&lt;td&gt;#12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single Image Edit votes&lt;/td&gt;
&lt;td&gt;6,704&lt;/td&gt;
&lt;td&gt;5,676&lt;/td&gt;
&lt;td&gt;157,693&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sunburst leads Nano Banana 2 by &lt;strong&gt;160 points&lt;/strong&gt; for text-to-image generation and &lt;strong&gt;133 points&lt;/strong&gt; for single-image editing. Flare’s corresponding leads are &lt;strong&gt;138&lt;/strong&gt; and &lt;strong&gt;104 points&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is a strong early preference signal, and the editing result is consistent with OpenAI’s stated priorities. It makes Sunburst a sensible first test for controlled revisions.&lt;/p&gt;

&lt;p&gt;The sample sizes matter, though. Both OpenAI entries are marked &lt;strong&gt;Preliminary&lt;/strong&gt;, with only a few thousand votes. Google’s entry has 41,957 generation votes and 157,693 editing votes. The new entries have more room to move as comparisons accumulate.&lt;/p&gt;

&lt;p&gt;Arena points also aren’t percentages. A 160-point lead doesn’t translate into a fixed percentage improvement in image quality, and the ranking reflects Arena’s prompt distribution. It doesn’t establish which model handles your packaging, typography, references, or acceptance criteria best.&lt;/p&gt;

&lt;p&gt;I’d use the leaderboard to choose evaluation order, then measure performance on the application’s actual workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Nano Banana 2 changes the implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Search can be part of generation
&lt;/h3&gt;

&lt;p&gt;Google documents both Web Search and Image Search grounding for Gemini 3.1 Flash Image. Retrieved text and images can inform generation using current web information.&lt;/p&gt;

&lt;p&gt;This applies when the Google Search tool is enabled and its attribution requirements are followed. Merely selecting the model doesn’t make every output grounded.&lt;/p&gt;

&lt;p&gt;For a travel application, educational diagram, visual search interface, or information graphic, that integration can reduce the work needed to assemble context. A landmark illustration can use retrieved references; a localized graphic can combine factual context with rendered text.&lt;/p&gt;

&lt;p&gt;GPT-Image-2.5 doesn’t document equivalent native grounding at the image-model level. An application can supply its own retrieved context and reference images, which narrows the practical difference. If the application already uses Gemini, keeping retrieval and generation in that workflow may be simpler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference scale is explicitly documented
&lt;/h3&gt;

&lt;p&gt;Google highlights identity preservation for &lt;strong&gt;up to five characters&lt;/strong&gt; and fidelity for &lt;strong&gt;up to 14 objects&lt;/strong&gt; in a workflow.&lt;/p&gt;

&lt;p&gt;Those figures are useful when scoping compositions with several recurring subjects. They are documented capability claims, rather than a guarantee that every arrangement will preserve every detail.&lt;/p&gt;

&lt;p&gt;OpenAI emphasizes strong reference preservation, especially with Sunburst, but the comparison doesn’t provide equivalent character and object counts for its models. I’d separate documented reference scale from observed fidelity during testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Localization has a clear place in the feature set
&lt;/h3&gt;

&lt;p&gt;Nano Banana 2 emphasizes international text rendering and translation of text inside an existing visual. That is useful for adapting one campaign across markets.&lt;/p&gt;

&lt;p&gt;OpenAI emphasizes infographic accuracy, hierarchy, and layout. For a static advertisement or UI concept where exact spatial structure dominates, I’d try GPT-Image-2.5 first. For multilingual graphics or visuals whose copy depends on retrieved information, I’d start with Google.&lt;/p&gt;

&lt;p&gt;Both still need output verification when numerical or legal copy matters. A convincing layout can contain incorrect text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Canvas requirements can decide the model before quality does
&lt;/h2&gt;

&lt;p&gt;Nano Banana 2 supports &lt;strong&gt;0.5K, 1K, 2K, and 4K&lt;/strong&gt; output, spanning the documented 512px-to-4K range. Its extreme aspect ratios include &lt;strong&gt;1:4, 4:1, 1:8, and 8:1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That gives it a straightforward advantage for panoramic backgrounds, narrow mobile creatives, tall product displays, and campaigns needing many canvas shapes.&lt;/p&gt;

&lt;p&gt;GPT-Image-2.5 supports custom dimensions within an approximately &lt;strong&gt;1:3 to 3:1&lt;/strong&gt; aspect-ratio range. Its documented limits are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum edge: &lt;strong&gt;3840 pixels&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Maximum output area: &lt;strong&gt;8,294,400 pixels&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those constraints should stay explicit in application validation. “Supports 4K” would obscure the difference between OpenAI’s limits and Nano Banana 2’s 4096×4096 4K tier.&lt;/p&gt;

&lt;p&gt;OpenAI has a separate practical advantage: &lt;strong&gt;transparent PNG and WebP backgrounds are explicitly supported&lt;/strong&gt;. That matters for product cutouts, composited design elements, and assets that need an alpha channel.&lt;/p&gt;

&lt;p&gt;My routing decision here would be mechanical: check canvas dimensions and transparency requirements before spending time comparing creative quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Photorealism needs its own evaluation
&lt;/h2&gt;

&lt;p&gt;I wouldn’t infer a universal photorealism winner from the Arena ranking.&lt;/p&gt;

&lt;p&gt;OpenAI describes improvements to natural lighting, texture, and recognizable reference subjects. Google makes similar claims about detail, texture, lighting, and photographic quality.&lt;/p&gt;

&lt;p&gt;Some early subjective comparisons have favored Nano Banana 2 for camera feel, materials, and natural product scenes, while favoring GPT-Image-2.5 for controlled edits and text-heavy layouts. Those observations are useful leads, but they aren’t standardized cross-provider measurements.&lt;/p&gt;

&lt;p&gt;For a production evaluation, I’d include skin and hair, glossy and matte products, transparent materials, fabric, food, architecture, indoor lighting, shallow depth of field, and identity preservation from reference photos.&lt;/p&gt;

&lt;p&gt;The metric I care about is &lt;strong&gt;cost per accepted image&lt;/strong&gt;. A model that produces one exceptional sample can still be expensive if most outputs need another render or manual correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  One shared product prompt
&lt;/h3&gt;

&lt;p&gt;The supplied comparison uses this exact prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Photorealistic product photograph of a matte black water bottle standing on a pale concrete ledge. Soft morning light from the left, gentle reflections, shallow depth of field. Centered composition, Include ONLY this text (verbatim): headline "YOURS TO CREATE" in bold sans-serif across the top, subhead "Limited Edition" smaller at the bottom. No other text or logos.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;GPT-Image-2.5 Sunburst&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqwxzkfztwkljeur4l0t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqwxzkfztwkljeur4l0t.png" alt="Sunburst output for the matte black water bottle prompt" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nano Banana 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkdgtcyaej94at1fsghwj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkdgtcyaej94at1fsghwj.jpeg" alt="Nano Banana 2 output for the same water bottle prompt" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d score this prompt separately for exact copy, text placement, bottle geometry, material appearance, lighting direction, and unwanted logos. It exercises several requirements at once, so a single overall preference can hide the reason an image fails acceptance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare billing at the image level
&lt;/h2&gt;

&lt;p&gt;The pricing models encourage different budgeting approaches.&lt;/p&gt;

&lt;p&gt;GPT-Image-2.5 uses token billing, with consumption affected by quality settings. Nano Banana 2 publishes image-output costs by resolution, making that part of the budget easier to estimate.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Official billing unit&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-Image-2.5 text input&lt;/td&gt;
&lt;td&gt;$5 / 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-Image-2.5 image input&lt;/td&gt;
&lt;td&gt;$8 / 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-Image-2.5 image output&lt;/td&gt;
&lt;td&gt;$30 / 1M image tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2, 0.5K&lt;/td&gt;
&lt;td&gt;$0.045 / image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2, 1K&lt;/td&gt;
&lt;td&gt;$0.067 / image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2, 2K&lt;/td&gt;
&lt;td&gt;$0.101 / image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2, 4K&lt;/td&gt;
&lt;td&gt;$0.151 / image&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Comparing OpenAI’s &lt;strong&gt;$30&lt;/strong&gt; with Google’s &lt;strong&gt;$60 per million image tokens&lt;/strong&gt; doesn’t establish that OpenAI costs half as much. The providers tokenize images differently, and OpenAI’s quality ladder changes consumption.&lt;/p&gt;

&lt;p&gt;Google’s &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;published pricing&lt;/a&gt; also includes Batch API image-output equivalents approximately 50% below standard pricing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Approximate Batch equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.5K&lt;/td&gt;
&lt;td&gt;$0.045&lt;/td&gt;
&lt;td&gt;$0.022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1K&lt;/td&gt;
&lt;td&gt;$0.067&lt;/td&gt;
&lt;td&gt;$0.034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2K&lt;/td&gt;
&lt;td&gt;$0.101&lt;/td&gt;
&lt;td&gt;$0.050&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4K&lt;/td&gt;
&lt;td&gt;$0.151&lt;/td&gt;
&lt;td&gt;$0.076&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For asynchronous asset production, that is a meaningful feature. For interactive generation, I’d evaluate the standard path separately.&lt;/p&gt;

&lt;p&gt;OpenAI’s quality controls support another useful pattern: inexpensive drafts followed by more expensive final renders. Both variants expose &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, &lt;code&gt;xhigh&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;, and &lt;code&gt;auto&lt;/code&gt;; the selected setting belongs in both cost and latency measurements.&lt;/p&gt;

&lt;h3&gt;
  
  
  A unified API can simplify routing
&lt;/h3&gt;

&lt;p&gt;If I wanted one integration for both families, CometAPI is one option. The source’s quoted rates for both Flare and Sunburst are $4 per million text-input tokens and $24 per million output tokens, versus the corresponding official $5/$30 rates; image-input pricing requires a current provider quote.&lt;/p&gt;

&lt;p&gt;The same quoted gateway pricing for Nano Banana 2 is &lt;strong&gt;$0.0360&lt;/strong&gt;, &lt;strong&gt;$0.0536&lt;/strong&gt;, &lt;strong&gt;$0.0808&lt;/strong&gt;, and &lt;strong&gt;$0.1208&lt;/strong&gt; per image at 0.5K, 1K, 2K, and 4K respectively. Batch availability needs checking with the provider.&lt;/p&gt;

&lt;p&gt;The engineering value is a common integration through which the application can select a model per request. I’d still keep provider-specific constraints visible in the routing logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The routing policy I’d put into an application
&lt;/h2&gt;

&lt;p&gt;I’d make model selection follow the request’s constraints and the cost of rework.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Request characteristic&lt;/th&gt;
&lt;th&gt;First model I’d evaluate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Precise edits with minimal unrelated change&lt;/td&gt;
&lt;td&gt;Sunburst&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final campaign or product asset&lt;/td&gt;
&lt;td&gt;Sunburst&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rapid OpenAI variants and everyday generation&lt;/td&gt;
&lt;td&gt;Flare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transparent PNG or WebP asset&lt;/td&gt;
&lt;td&gt;GPT-Image-2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current web or visual context needed&lt;/td&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extreme vertical or horizontal canvas&lt;/td&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native resolution tiers through 4K&lt;/td&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multilingual text or translation inside a visual&lt;/td&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asynchronous volume with published Batch pricing&lt;/td&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Several recurring characters or objects&lt;/td&gt;
&lt;td&gt;Nano Banana 2 for its documented reference scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photorealistic scenes without other constraints&lt;/td&gt;
&lt;td&gt;Evaluate both on representative prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For an editing-heavy product, I’d begin with Sunburst and test whether Flare meets the same acceptance criteria at lower latency. For a Gemini application generating grounded diagrams or localized assets in many shapes, I’d begin with Nano Banana 2.&lt;/p&gt;

&lt;p&gt;Mixed workloads justify using all three. One possible flow is grounded concept generation with Google followed by a controlled Sunburst revision. Another is Flare for initial variants, Sunburst for difficult final edits, and Google for canvas shapes outside OpenAI’s range.&lt;/p&gt;

&lt;p&gt;Those are architectures I’d evaluate, not measured guarantees that switching models improves a result. Any handoff belongs in the same reference-preservation tests as a single-model editing sequence.&lt;/p&gt;

&lt;p&gt;Before committing, I’d run identical prompt sets at comparable dimensions and concurrency, record actual latency and billed cost, and judge the final assets against explicit acceptance criteria. The preliminary leaderboard makes GPT-Image-2.5 a strong starting point for quality and editing; the production requirements determine whether it earns the request.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/gpt-image-2-5-vs-nano-banana-2/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=gpt-image-2-5-vs-nano-banana-2"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Free ChatGPT for Students: What I’d Check Before Paying for Plus</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Mon, 21 Sep 2026 09:32:44 +0000</pubDate>
      <link>https://dev.to/ryancole1/free-chatgpt-for-students-what-id-check-before-paying-for-plus-a5l</link>
      <guid>https://dev.to/ryancole1/free-chatgpt-for-students-what-id-check-before-paying-for-plus-a5l</guid>
      <description>&lt;p&gt;College students can use ChatGPT for free. A student email address, however, does not automatically unlock ChatGPT Plus.&lt;/p&gt;

&lt;p&gt;For the 2026 academic year, I’d separate access into three buckets: the public Free plan, a personal Plus subscription, and a university-managed ChatGPT Edu workspace. They have different limits, billing arrangements, and data policies. The two-month student promotion from 2025 is a fourth case, but its claim window has closed.&lt;/p&gt;

&lt;p&gt;My first step would be to check the university’s software portal. Paying for a personal subscription before checking campus access can mean buying capabilities the institution already provides.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2025 student offer has expired
&lt;/h2&gt;

&lt;p&gt;OpenAI offered eligible college students in the &lt;strong&gt;United States and Canada two months of ChatGPT Plus at no cost&lt;/strong&gt;. The claim window ran from &lt;strong&gt;March 31 through May 31, 2025&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That date matters. An article describing this as an offer available “right now” in 2026 is mixing a historical promotion with current access.&lt;/p&gt;

&lt;p&gt;The promotion worked as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Students at qualifying institutions verified enrollment through &lt;strong&gt;SheerID&lt;/strong&gt; in the ChatGPT interface.&lt;/li&gt;
&lt;li&gt;The two free months started when the student claimed the offer.&lt;/li&gt;
&lt;li&gt;Existing paid Plus subscribers were also eligible, with the offer credited to their accounts.&lt;/li&gt;
&lt;li&gt;Normal subscription billing resumed after the promotional period unless the student canceled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students outside the eligible countries, or those who missed the May 31 deadline, could not claim this particular offer.&lt;/p&gt;

&lt;p&gt;There is no permanent, globally available free Plus entitlement for college students described here. Future seasonal offers are possible, but I wouldn’t budget around an unannounced promotion.&lt;/p&gt;

&lt;h3&gt;
  
  
  What those two months provided
&lt;/h3&gt;

&lt;p&gt;The offer gave students the normal Plus subscription benefits for the promotional period. It was a temporary upgrade to the paid product, with the same applicable usage limits.&lt;/p&gt;

&lt;p&gt;Those benefits included access to more capable models, priority availability during busy periods, higher messaging limits, and more generous file uploads. Expanded data analysis, image generation, multimodal interactions, and voice features also made Plus more useful for sustained academic work.&lt;/p&gt;

&lt;p&gt;Reporting around that period included research tools and the &lt;strong&gt;GPT-4.5 preview&lt;/strong&gt;. I’d treat those as historical feature references: a model available during the 2025 offer is not a promise about the 2026 model picker.&lt;/p&gt;

&lt;p&gt;For coursework, the practical gains were straightforward: longer sessions reviewing materials, more room to work with research documents, and fewer interruptions while generating practice problems or analyzing datasets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check campus access before comparing subscription prices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT Edu&lt;/strong&gt; is an institutional offering for universities. It supports students, faculty, researchers, and campus operations, with administrative and privacy controls suited to a managed workspace.&lt;/p&gt;

&lt;p&gt;The institution pays for access, so an eligible student may have no direct subscription charge.&lt;/p&gt;

&lt;p&gt;Arizona State University, the University of Oxford, and the Wharton School of the University of Pennsylvania have been cited as examples of university AI adoption. I would still check the actual campus entitlement. A university partnership alone does not establish that every student, department, or course receives identical access.&lt;/p&gt;

&lt;p&gt;The useful questions are concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is my account eligible for the university’s ChatGPT workspace?&lt;/li&gt;
&lt;li&gt;How do I activate access with university credentials?&lt;/li&gt;
&lt;li&gt;Which models and tools are enabled?&lt;/li&gt;
&lt;li&gt;What usage limits and research-data rules apply?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Edu can matter more than a personal upgrade
&lt;/h3&gt;

&lt;p&gt;For me, the most consequential Edu feature is its data policy: &lt;strong&gt;workspace data is not used to train OpenAI’s models&lt;/strong&gt;. That is especially relevant when working with thesis drafts or unpublished research.&lt;/p&gt;

&lt;p&gt;It does not, by itself, authorize uploading every research dataset. The university’s rules still determine what belongs in that workspace.&lt;/p&gt;

&lt;p&gt;Edu also offers higher usage limits and tools for working with spreadsheets, CSVs, and PDFs. Those capabilities support statistical analysis, visualization, and document summarization. Universities can create and share custom GPTs inside their workspace, such as a course tutor or grant-writing assistant.&lt;/p&gt;

&lt;p&gt;Model access has included &lt;strong&gt;GPT-4o&lt;/strong&gt;, with access to newer models depending on the offering and rollout. I would avoid interpreting “higher limits” as “unlimited”: the workspace’s actual limits are what determine whether it supports a long analysis session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the public Free plan is enough
&lt;/h2&gt;

&lt;p&gt;The Free plan remains useful for bounded tasks: explaining a compiler error, reviewing a short function, brainstorming an essay outline, or summarizing a short reading.&lt;/p&gt;

&lt;p&gt;I’d start there if my workload mostly consists of short, independent requests. The friction becomes more visible when a task needs repeated file uploads, extended reasoning, or a long uninterrupted conversation.&lt;/p&gt;

&lt;p&gt;Free access can involve dynamic message caps and reduced access to more capable models after a limit is reached. Data analysis, uploads, image generation, and advanced reasoning features can also have tighter restrictions.&lt;/p&gt;

&lt;p&gt;Specific model names need care. References to &lt;strong&gt;GPT-4o mini&lt;/strong&gt;, &lt;strong&gt;GPT-4o&lt;/strong&gt;, or &lt;strong&gt;GPT-5.2&lt;/strong&gt; do not establish a stable Free-plan entitlement for all of 2026. The available models and their limits need to be checked against the current plan and account.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compare the workload, then the price
&lt;/h3&gt;

&lt;p&gt;The personal Plus price discussed here is &lt;strong&gt;$20 per month&lt;/strong&gt;. Whether that makes sense depends on how often the Free plan interrupts useful work.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decision point&lt;/th&gt;
&lt;th&gt;Public Free plan&lt;/th&gt;
&lt;th&gt;Personal Plus subscription&lt;/th&gt;
&lt;th&gt;University Edu workspace&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who pays?&lt;/td&gt;
&lt;td&gt;No subscription charge&lt;/td&gt;
&lt;td&gt;Student or another individual payer&lt;/td&gt;
&lt;td&gt;Institution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access limits&lt;/td&gt;
&lt;td&gt;Lower, dynamic limits&lt;/td&gt;
&lt;td&gt;Higher limits, still subject to caps&lt;/td&gt;
&lt;td&gt;Higher institutional limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documents and datasets&lt;/td&gt;
&lt;td&gt;More restricted uploads and analysis&lt;/td&gt;
&lt;td&gt;More generous uploads and analysis&lt;/td&gt;
&lt;td&gt;Analysis tools within a managed workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Training policy&lt;/td&gt;
&lt;td&gt;Data may be used, depending on controls&lt;/td&gt;
&lt;td&gt;Data may be used unless opted out&lt;/td&gt;
&lt;td&gt;Workspace data is not used for training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main access requirement&lt;/td&gt;
&lt;td&gt;Public account&lt;/td&gt;
&lt;td&gt;Paid subscription&lt;/td&gt;
&lt;td&gt;University eligibility and provisioning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I wouldn’t use an old comparison table listing &lt;strong&gt;o1-preview&lt;/strong&gt;, “legacy models,” &lt;strong&gt;DALL-E 3&lt;/strong&gt;, or a blanket &lt;strong&gt;5×&lt;/strong&gt; limit increase as a current purchasing specification. Those details are tied to particular product periods, models, and tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long documents introduce a separate constraint
&lt;/h3&gt;

&lt;p&gt;The context window limits how much material a model can consider at once. A long conversation can lose useful earlier detail, which becomes noticeable when discussing something like a &lt;strong&gt;20-page dissertation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A paid plan may provide access to models with larger context windows, but subscription tier alone is not a complete specification. The selected model and product behavior matter.&lt;/p&gt;

&lt;p&gt;I’d check that separately from message limits. More messages do not automatically mean the model can consider the entire document and conversation in every response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternatives need the same eligibility check
&lt;/h2&gt;

&lt;p&gt;Google announced a student offer for &lt;strong&gt;Google One AI Premium&lt;/strong&gt;, which bundled Gemini Advanced and other tools, providing eligible U.S. college students free access through &lt;strong&gt;June 30, 2026&lt;/strong&gt;, subject to registering by the required deadline.&lt;/p&gt;

&lt;p&gt;The access end date and registration deadline are different things. Seeing “free through June 2026” does not establish that enrollment is still open.&lt;/p&gt;

&lt;p&gt;For model selection, Gemini is relevant to workflows involving images, video, and Google Search retrieval. Claude is another option for long-document reading and summarization. Neither observation establishes that the required features are free or unlimited; those depend on the applicable plan.&lt;/p&gt;

&lt;p&gt;For a student building software that needs multiple providers, CometAPI exposes models through a unified, OpenAI-style REST API, with model selection via a model string. That can reduce provider-specific integration work, but API access belongs in a separate cost comparison from a free ChatGPT account or a campus subscription.&lt;/p&gt;

&lt;p&gt;My purchase trigger would be a recurring constraint: hitting message caps during productive work, needing more document analysis, or requiring a capability unavailable through campus access. Until one of those shows up, I’d use the free account and check the university’s provisioning options first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/is-chatgpt-free-for-college-students/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=is-chatgpt-free-for-college-students"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a Resilient Multi-Model AI Stack in 2026</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Mon, 21 Sep 2026 07:12:47 +0000</pubDate>
      <link>https://dev.to/ryancole1/building-a-resilient-multi-model-ai-stack-in-2026-1in</link>
      <guid>https://dev.to/ryancole1/building-a-resilient-multi-model-ai-stack-in-2026-1in</guid>
      <description>&lt;h2&gt;
  
  
  The Short Version
&lt;/h2&gt;

&lt;p&gt;For an OpenAI-compatible migration, change the SDK endpoint to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.cometapi.com/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then replace the OpenAI key with a gateway token. The same integration exposes more than 500 frontier models, including GPT-5.5, Claude Opus 4.7, and Gemini 3.1 Pro. The advertised pricing reduction is 20% to 40% compared with official direct rates.&lt;/p&gt;

&lt;p&gt;That configuration change is small. The architectural change is more important: production AI features no longer need to depend on one provider, one region, or one model family.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Prefer a Multi-Model Architecture
&lt;/h2&gt;

&lt;p&gt;A single-provider dependency creates a predictable failure mode. If the provider develops elevated latency, throttles a tenant, or returns &lt;code&gt;429 Too Many Requests&lt;/code&gt;, every feature tied to that endpoint is affected.&lt;/p&gt;

&lt;p&gt;I have seen this happen even when an account is operating within its documented Tier 5 limits. If the application hardcodes one provider, the operational choices at 1:00 AM are limited to waiting for recovery or shipping an emergency patch.&lt;/p&gt;

&lt;p&gt;A unified gateway such as &lt;a href="https://www.cometapi.com/" rel="noopener noreferrer"&gt;CometAPI&lt;/a&gt; provides another option: move a workload to a comparable model or region without changing the application’s message format. For example, reasoning traffic can be shifted to Claude Opus 4.7 from an operational dashboard while the rest of the application continues using the same client integration.&lt;/p&gt;

&lt;p&gt;This is useful even when OpenAI remains the default. Anthropic and Google models such as Claude Opus 4.7 and Gemini 3.1 Pro can outperform GPT-4o on particular coding and multimodal reasoning workloads. Model choice should be a workload decision, not an accidental consequence of whichever SDK was installed first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Snapshot
&lt;/h2&gt;

&lt;p&gt;Bulk token purchasing and routing can materially change the economics of an AI feature. The following prices were verified in May 2026 through the gateway’s pricing information.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Official Price (Input / 1M)&lt;/th&gt;
&lt;th&gt;Gateway Price (Input / 1M)&lt;/th&gt;
&lt;th&gt;Total Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/openai/gpt-5-5-pro/" rel="noopener noreferrer"&gt;GPT-5.5 Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;td&gt;$24.00&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/openai/gpt-5-5/" rel="noopener noreferrer"&gt;GPT-5.5&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/anthropic/claude-opus-4-7/" rel="noopener noreferrer"&gt;Claude Opus 4.7&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/anthropic/claude-sonnet-4-6/" rel="noopener noreferrer"&gt;Claude Sonnet 4.6&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$2.40&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/google/gemini-3-1-pro-preview/" rel="noopener noreferrer"&gt;Gemini 3.1 Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$1.60&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/deepseek/deepseek-v4/" rel="noopener noreferrer"&gt;DeepSeek V4 Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.52&lt;/td&gt;
&lt;td&gt;$0.42&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cometapi.com/models/xai/grok-4-2/" rel="noopener noreferrer"&gt;Grok 4.20&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$1.60&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At 100 million GPT-5.5 input tokens per month, direct billing is approximately $3,000. At the listed gateway rate, the same volume costs $2,400, leaving a $600 monthly difference.&lt;/p&gt;

&lt;p&gt;That is large enough to cover a staging environment or materially reduce the operating cost of a support agent. It also gives teams room to use different models for different request classes instead of forcing every request through the most expensive option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model Selection by Workload
&lt;/h2&gt;

&lt;p&gt;The catalog covers text, image, video, and audio models. The practical mapping looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fresource.cometapi.com%2FUnified%2520Model%2520Catalog%2520Overview.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fresource.cometapi.com%2FUnified%2520Model%2520Catalog%2520Overview.webp" title="Unified Model Catalog Overview" alt="500+ AI models available via a unified API" width="799" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;GPT-5.5 Pro, Claude Opus 4.7&lt;/td&gt;
&lt;td&gt;Complex planning and autonomous agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic coding&lt;/td&gt;
&lt;td&gt;Kimi K2.6, Qwen3.6-Plus&lt;/td&gt;
&lt;td&gt;Repository-scale refactors and “Vibe Coding”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long context&lt;/td&gt;
&lt;td&gt;Grok 4.20, with 2M tokens&lt;/td&gt;
&lt;td&gt;Large logs and document analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal&lt;/td&gt;
&lt;td&gt;Gemini 3.1 Pro, GPT Image 2&lt;/td&gt;
&lt;td&gt;Video analysis and production design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast response&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;High-volume classification&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The service claims a 99.9% availability SLA and an average response time below 400ms. Its routing layer is intended to bypass high-latency nodes when a regional provider is degraded.&lt;/p&gt;

&lt;p&gt;Those figures should still be validated against your own traffic patterns. Latency distributions, streaming behavior, payload size, and model-specific limits matter more than a single average.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Migration Is a Configuration Change
&lt;/h2&gt;

&lt;p&gt;The OpenAI SDK remains the client. The endpoint and credential change; the request structure stays the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;APIError&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: Initialize using the gateway credentials
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;# Point to the unified endpoint
&lt;/span&gt;    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;# Use the gateway token from environment variables
&lt;/span&gt;    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_ai_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Step 2: Swap models without changing the request shape
&lt;/span&gt;        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
            &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;APIError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Unified handling for 401, 429, and 500 responses
&lt;/span&gt;        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unexpected connection error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Test the switch with a reasoning-heavy model
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;run_ai_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze our system&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s scalability benchmarks.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-4-7&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important operational detail is that model selection is now data. A request router can choose &lt;code&gt;gpt-5.5&lt;/code&gt;, &lt;code&gt;claude-opus-4-7&lt;/code&gt;, or another compatible model based on latency, task type, cost, or current availability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoid Building the Proxy Yourself
&lt;/h3&gt;

&lt;p&gt;One documented migration case involved a mid-sized team maintaining its own internal API proxy. One senior engineer handled SDK updates, provider billing changes, and custom failover routing. That system cost more than $8,000 per month to operate while saving only $300 in API charges.&lt;/p&gt;

&lt;p&gt;The arithmetic was negative before considering the opportunity cost. A managed gateway provides the routing and provider integration without a platform fee, which is generally a better trade when the team’s actual savings are modest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and Retention
&lt;/h2&gt;

&lt;p&gt;Using a unified endpoint introduces a governance boundary, so its data policies need to be evaluated like any other third-party dependency. The stated controls are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompts and completions are not used to train future model iterations.&lt;/li&gt;
&lt;li&gt;Logs are retained for a maximum of 3 months for debugging, then permanently deleted.&lt;/li&gt;
&lt;li&gt;The platform is SOC 2 certified and uses end-to-end data encryption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For proprietary code and regulated workloads, I would still verify the current agreement, retention configuration, regional processing behavior, and incident procedures before routing production data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial Account Credits
&lt;/h2&gt;

&lt;p&gt;The onboarding offer described for testing is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a free account with no credit card required.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add Token&lt;/strong&gt; in the dashboard to receive a &lt;code&gt;$0.5&lt;/code&gt; bonus.&lt;/li&gt;
&lt;li&gt;Make the first API call to receive an additional &lt;code&gt;$1&lt;/code&gt; credit.&lt;/li&gt;
&lt;li&gt;Deposit &lt;code&gt;$10&lt;/code&gt; for the first time and receive a &lt;code&gt;$3&lt;/code&gt; reward.&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;base_url&lt;/code&gt; and begin using the listed rates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The total onboarding balance is approximately &lt;code&gt;$1.50&lt;/code&gt; before the first deposit, which is enough to exercise several models in the Playground.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions I Would Resolve Before Production
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How long does migration take?
&lt;/h3&gt;

&lt;p&gt;Documented migration cases report approximately 8 minutes for enterprise projects because only &lt;code&gt;base_url&lt;/code&gt; and &lt;code&gt;api_key&lt;/code&gt; change. Messages, &lt;code&gt;temperature&lt;/code&gt;, and streaming logic remain the same. Teams with codebases larger than 150,000 lines have reported their unit tests passing immediately after the configuration change without refactoring.&lt;/p&gt;

&lt;p&gt;That is the compatibility claim; I would still run integration tests against every model and response mode used by the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens during an outage?
&lt;/h3&gt;

&lt;p&gt;The design uses multi-region routing. During a major provider fluctuation, requests can be redirected to another region or a comparable model family. This reduces the single-provider failure surface, although it does not eliminate the need for timeouts, retries, circuit breakers, and application-level fallback behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are the cheaper models downgraded?
&lt;/h3&gt;

&lt;p&gt;The listed model versions are intended to be identical to their official counterparts, with requests routed to the original providers such as Anthropic or OpenAI. The stated 20% to 40% reduction comes from purchasing hundreds of billions of tokens annually at wholesale rates. There are no monthly subscription fees or hidden platform costs in the described pricing model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can unused prepaid credit be refunded?
&lt;/h3&gt;

&lt;p&gt;The prepaid system supports refunds for unused balances. Starting with the approximately &lt;code&gt;$1.50&lt;/code&gt; in onboarding credits is the lowest-risk way to test the Playground and model behavior before depositing funds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are prompts used for training?
&lt;/h3&gt;

&lt;p&gt;The stated enterprise privacy policy says that neither input nor output is used to train models. Logs are retained for 3 months for debugging and then automatically purged, with no possibility of recovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are image and video models supported?
&lt;/h3&gt;

&lt;p&gt;Yes. The same API key provides access to multimodal models, including GPT Image 2 for image generation and ByteDance’s Seedance 2.0 for video generation. That makes it possible to build an application spanning text, images, and video without maintaining separate accounts for each provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it support high-concurrency workloads?
&lt;/h3&gt;

&lt;p&gt;The infrastructure is designed for production workloads with thousands of requests per second. Its stated global average latency is under 400ms, and dynamic rate limits are intended to scale with business demand. Actual throughput should be measured using the concurrency, payload sizes, and models that match your workload.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/openai-alternative-cometapi/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=openai-alternative-cometapi"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Use Midjourney on Discord in 2026</title>
      <dc:creator>Ryan Cole</dc:creator>
      <pubDate>Mon, 21 Sep 2026 05:45:21 +0000</pubDate>
      <link>https://dev.to/ryancole1/how-to-use-midjourney-on-discord-in-2026-g37</link>
      <guid>https://dev.to/ryancole1/how-to-use-midjourney-on-discord-in-2026-g37</guid>
      <description>&lt;p&gt;Midjourney remains one of the most powerful and aesthetically acclaimed AI image generators in 2026. While a polished web interface exists at midjourney.com, many creators — especially those who value community feedback, rapid iteration in public channels, and the full suite of Discord-specific commands — continue to prefer the original Discord experience.&lt;/p&gt;

&lt;p&gt;This comprehensive guide walks you through everything: setup, latest V8.1 model features, advanced prompting, parameters, best practices, troubleshooting, comparisons, and &lt;strong&gt;practical recommendations&lt;/strong&gt; for scaling your workflow efficiently via &lt;strong&gt;CometAPI&lt;/strong&gt; on Cometapi.com.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Use Midjourney on Discord in 2026: The Ultimate Beginner-to-Pro Guide for Stunning AI Art Creation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Midjourney remains one of the most powerful and aesthetically acclaimed AI image generators in 2026. While a polished web interface exists at midjourney.com, many creators — especially those who value community feedback, rapid iteration in public channels, and the full suite of Discord-specific commands — continue to prefer the original Discord experience.&lt;/p&gt;

&lt;p&gt;This comprehensive guide walks you through everything: setup, latest V8.1 model features, advanced prompting, parameters, best practices, troubleshooting, comparisons, and &lt;strong&gt;practical recommendations&lt;/strong&gt; for scaling your workflow efficiently via &lt;strong&gt;CometAPI&lt;/strong&gt; on Cometapi.com.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Midjourney on Discord Still Matters in 2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Quick Answer:&lt;/strong&gt; Midjourney on Discord offers real-time community interaction, easy upscale/variation buttons (U/V), remix capabilities, and access to the latest V8.1 model with improved sharpness, faster generation (4-5x in standard jobs), HD 2K output, and better prompt adherence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits Over Web-Only:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live feedback in newbie/general channels.&lt;/li&gt;
&lt;li&gt;Direct bot interaction with slash commands.&lt;/li&gt;
&lt;li&gt;Privacy options via your own server.&lt;/li&gt;
&lt;li&gt;Seamless image referencing and blending.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Latest News (as of May 2026):&lt;/strong&gt; V8.1 (April 30, 2026) brings enhanced aesthetics, better small-detail retention, Raw mode, and HD support across Discord and web. Video generation (image-to-5s clips, extendable to 21s) is maturing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started: Setting Up Midjourney on Discord
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create or Log Into a Discord Account
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Download the Discord app (desktop/mobile) or use the web version.&lt;/li&gt;
&lt;li&gt;Sign up with email or use an existing account.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Join the Official Midjourney Server
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Discord, click the &lt;strong&gt;+&lt;/strong&gt; icon in the server list.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Join a Server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste: &lt;code&gt;discord.gg/midjourney&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Join and verify if required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Start in &lt;strong&gt;#newbies&lt;/strong&gt; or &lt;strong&gt;#general&lt;/strong&gt; channels to observe prompts from thousands of users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Subscribe to a Plan
&lt;/h3&gt;

&lt;p&gt;Midjourney is subscription-based (no free tier for heavy use in 2026).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Monthly Price&lt;/th&gt;
&lt;th&gt;Annual Price (effective)&lt;/th&gt;
&lt;th&gt;Fast GPU Hours&lt;/th&gt;
&lt;th&gt;Relax Mode&lt;/th&gt;
&lt;th&gt;Stealth Mode&lt;/th&gt;
&lt;th&gt;Max Concurrent Jobs&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$8/mo ($96/yr)&lt;/td&gt;
&lt;td&gt;3.3 hrs (~200 images)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;3 Fast&lt;/td&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;td&gt;$24/mo ($288/yr)&lt;/td&gt;
&lt;td&gt;15 hrs&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;3 Fast/Relax&lt;/td&gt;
&lt;td&gt;Most users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;$48/mo ($576/yr)&lt;/td&gt;
&lt;td&gt;30 hrs&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;12 Fast/3 Relax&lt;/td&gt;
&lt;td&gt;Professionals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mega&lt;/td&gt;
&lt;td&gt;$120&lt;/td&gt;
&lt;td&gt;$96/mo ($1,152/yr)&lt;/td&gt;
&lt;td&gt;60 hrs&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;12 Fast/3 Relax&lt;/td&gt;
&lt;td&gt;High-volume&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Data Point:&lt;/strong&gt; Standard plan users generate ~15 hours of fast GPU time monthly, sufficient for hundreds of images depending on complexity. Relax mode offers slower but unlimited generations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Start with Standard for balanced speed and cost. Upgrade for Stealth (private images) if building commercial work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Your First Image – The /imagine Command
&lt;/h3&gt;

&lt;p&gt;In any channel with the Midjourney bot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type &lt;code&gt;/imagine&lt;/code&gt; and press Tab.&lt;/li&gt;
&lt;li&gt;Add your &lt;strong&gt;prompt&lt;/strong&gt; after &lt;code&gt;prompt:&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Press Enter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/imagine prompt: a serene mountain lake at dawn, misty fog, photorealistic, cinematic lighting --v 8.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Midjourney generates a 2x2 grid of 4 images. Use &lt;strong&gt;U1-U4&lt;/strong&gt; to upscale and &lt;strong&gt;V1-V4&lt;/strong&gt; for variations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accept Terms of Service&lt;/strong&gt; on first use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mastering Midjourney V8.1 Features on Discord (2026 Updates)
&lt;/h2&gt;

&lt;p&gt;V8.1 emphasizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster generation&lt;/strong&gt;: Standard jobs 4-5x quicker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved sharpness &amp;amp; detail&lt;/strong&gt; retention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better prompt adherence&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HD 2K support&lt;/strong&gt; (add &lt;code&gt;--hd&lt;/code&gt; or toggle in settings).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raw mode&lt;/strong&gt; for less stylized, more literal outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Version Parameter:&lt;/strong&gt; &lt;code&gt;--v 8.1&lt;/code&gt; (default in many cases, but specify for consistency).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Niji 7&lt;/strong&gt; for anime/stylized: &lt;code&gt;--niji 7&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced Prompt Engineering: From Beginner to 3000-Word Pro
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core Structure (Featured Snippet Style):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Subject&lt;/strong&gt; (main focus).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Details&lt;/strong&gt; (environment, lighting, mood).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style/Artistic References&lt;/strong&gt; (artist, medium, era).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Parameters&lt;/strong&gt; (--ar, --v, --q, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Best Practices (Supported by Data):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep it concise&lt;/strong&gt;: Short prompts often outperform long ones. Midjourney processes core concepts best.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word order matters&lt;/strong&gt;: Important elements first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use commas&lt;/strong&gt; to separate ideas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synonyms over repetition&lt;/strong&gt;: "Gigantic" &amp;gt; "big big".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weights&lt;/strong&gt;: &lt;code&gt;::2&lt;/code&gt; for emphasis (e.g., &lt;code&gt;red dragon::2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negative prompts&lt;/strong&gt;: Use &lt;code&gt;--no&lt;/code&gt; (e.g., &lt;code&gt;--no blur, text&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prompt Examples by Category
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Photorealistic Portrait:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/imagine prompt: middle-aged Asian woman, thoughtful expression, soft natural window light, detailed skin texture, 85mm lens, f/2.8, cinematic, photorealistic --ar 2:3 --v 8.1 --q 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fantasy Scene:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/imagine prompt: ancient elven city in glowing forest, bioluminescent plants, epic scale, dramatic volumetric lighting, in the style of Studio Ghibli and Alphonse Mucha --ar 16:9 --v 8.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Product Visualization:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/imagine prompt: sleek wireless earbuds on marble surface, minimalist, studio lighting, octane render, 8k --ar 1:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tips for 10x Better Results:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;lighting descriptors&lt;/strong&gt;: "golden hour, dramatic chiaroscuro, backlit".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Camera/ Lens&lt;/strong&gt;: "shot on Canon EOS R5, 50mm, shallow depth of field".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artists&lt;/strong&gt;: "in the style of Greg Rutkowski, Artgerm, WLOP".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality boosters&lt;/strong&gt;: &lt;code&gt;--q 2&lt;/code&gt; (higher quality, more GPU), &lt;code&gt;--stylize 750&lt;/code&gt; (default ~100, higher = more artistic).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Insight:&lt;/strong&gt; Users who iterate with V-buttons and Remix achieve 40-60% higher satisfaction rates in community polls (anecdotal from Discord activity).&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Prompts &amp;amp; References
&lt;/h3&gt;

&lt;p&gt;Upload an image, then use its URL in prompt: &lt;code&gt;image_url description --iw 1.5&lt;/code&gt; (image weight).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--sref&lt;/strong&gt; (style reference) and &lt;strong&gt;--cref&lt;/strong&gt; (character reference) for consistency across generations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Essential Parameters &amp;amp; Commands Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;--ar&lt;/td&gt;
&lt;td&gt;--ar 16:9&lt;/td&gt;
&lt;td&gt;Aspect ratio&lt;/td&gt;
&lt;td&gt;Cinematic (16:9), Portrait (2:3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--v&lt;/td&gt;
&lt;td&gt;--v 8.1&lt;/td&gt;
&lt;td&gt;Model version&lt;/td&gt;
&lt;td&gt;Latest features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--q&lt;/td&gt;
&lt;td&gt;--q 2&lt;/td&gt;
&lt;td&gt;Quality&lt;/td&gt;
&lt;td&gt;Sharper details (higher GPU)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--stylize&lt;/td&gt;
&lt;td&gt;--stylize 400-1000&lt;/td&gt;
&lt;td&gt;Artistic intensity&lt;/td&gt;
&lt;td&gt;Low = literal, High = creative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--chaos&lt;/td&gt;
&lt;td&gt;--chaos 50&lt;/td&gt;
&lt;td&gt;Variation&lt;/td&gt;
&lt;td&gt;More diverse grids&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--hd&lt;/td&gt;
&lt;td&gt;--hd&lt;/td&gt;
&lt;td&gt;High definition&lt;/td&gt;
&lt;td&gt;2K output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--no&lt;/td&gt;
&lt;td&gt;--no people&lt;/td&gt;
&lt;td&gt;Negative&lt;/td&gt;
&lt;td&gt;Exclude elements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--tile&lt;/td&gt;
&lt;td&gt;--tile&lt;/td&gt;
&lt;td&gt;Seamless patterns&lt;/td&gt;
&lt;td&gt;Textures, wallpapers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Other Commands:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/describe&lt;/code&gt; (upload image → prompt suggestions).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/remix&lt;/code&gt; for prompt editing.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/settings&lt;/code&gt; for defaults.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/info&lt;/code&gt; for your usage stats.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices &amp;amp; Workflow Optimization
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Your Own Server:&lt;/strong&gt; Add Midjourney Bot for private generation (less noise).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organize Outputs:&lt;/strong&gt; Use folders in Discord or export regularly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate Efficiently:&lt;/strong&gt; Use V1-V4 → Upscale → Remix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Learning:&lt;/strong&gt; Observe top prompts in popular channels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Testing:&lt;/strong&gt; Use &lt;code&gt;--repeat 4&lt;/code&gt; for variations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial Use:&lt;/strong&gt; All plans allow general commercial terms (check TOS for specifics).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Combine with external tools for post-processing (Photoshop, Topaz AI upscaler).&lt;/p&gt;

&lt;h2&gt;
  
  
  Midjourney on Discord vs. Web vs. Competitors
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Discord Strengths:&lt;/strong&gt; Community, speed of interaction, discoverability.&lt;br&gt;
&lt;strong&gt;Web Strengths:&lt;/strong&gt; Cleaner UI, easier organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vs. Competitors:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Artistic Quality&lt;/th&gt;
&lt;th&gt;Prompt Adherence&lt;/th&gt;
&lt;th&gt;Text in Images&lt;/th&gt;
&lt;th&gt;Pricing (Entry)&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Midjourney&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Fair&lt;/td&gt;
&lt;td&gt;$10/mo&lt;/td&gt;
&lt;td&gt;Fast (V8.1)&lt;/td&gt;
&lt;td&gt;Art, Concepts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flux 1.1 Pro&lt;/td&gt;
&lt;td&gt;Very Good&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;API ~$0.02/img&lt;/td&gt;
&lt;td&gt;Very Fast&lt;/td&gt;
&lt;td&gt;Photorealism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DALL-E 3&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Via ChatGPT&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Precision/Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ideogram&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Very Good&lt;/td&gt;
&lt;td&gt;Best&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Typography&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Midjourney leads in "wow factor" and stylized output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaling Beyond Discord: CometAPI Recommendations for Developers &amp;amp; Power Users
&lt;/h2&gt;

&lt;p&gt;Discord is fantastic for exploration, but for &lt;strong&gt;production workflows&lt;/strong&gt;, websites, apps, or high-volume needs, manual prompting becomes a bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enter CometAPI (Cometapi.com):&lt;/strong&gt; A reliable unofficial Midjourney API provider offering unified access to Midjourney (and 500+ other models) through clean REST endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Integrate via CometAPI?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Programmatic Access:&lt;/strong&gt; Generate images from code (Python, Node.js, etc.) without Discord.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency:&lt;/strong&gt; Pay-per-use or subscription models often cheaper than high-tier Midjourney plans for bulk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation:&lt;/strong&gt; Build apps, e-commerce mockups, marketing tools, or SaaS features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; Handles queuing, retries, and multiple models in one dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease:&lt;/strong&gt; Simple API keys, detailed docs, and Apifox testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Get Started with CometAPI Midjourney:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://www.cometapi.com" rel="noopener noreferrer"&gt;Cometapi.com&lt;/a&gt; and sign up.&lt;/li&gt;
&lt;li&gt;Generate API key in console.&lt;/li&gt;
&lt;li&gt;Call the Midjourney endpoint with your prompt (supports parameters like --ar, --v 8.1).&lt;/li&gt;
&lt;li&gt;Receive image URLs instantly or via webhook.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic product imagery for e-commerce.&lt;/li&gt;
&lt;li&gt;Automated social media content.&lt;/li&gt;
&lt;li&gt;AI art pipelines in design tools.&lt;/li&gt;
&lt;li&gt;Enterprise bulk generation with consistent styling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro Recommendation:&lt;/strong&gt; Use Discord for creative ideation and discovery, then pipe refined prompts into CometAPI for scalable production. This hybrid approach maximizes quality and efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Common Issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limits:&lt;/strong&gt; Wait or upgrade plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blurred Images:&lt;/strong&gt; Increase --q or use HD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Censorship:&lt;/strong&gt; Avoid sensitive content (strict filters).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slow Generation:&lt;/strong&gt; Switch to Relax mode or check server status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot Not Responding:&lt;/strong&gt; Ensure you're in a channel with permissions; try DM with bot.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future Outlook &amp;amp; Tips for 2026 Success
&lt;/h2&gt;

&lt;p&gt;With V8.1 and upcoming V9/ video enhancements, Midjourney continues evolving. Focus on prompt mastery, consistent character references, and ethical use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable Next Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Join Discord server today.&lt;/li&gt;
&lt;li&gt;Experiment with 10 prompts using V8.1.&lt;/li&gt;
&lt;li&gt;Sign up at Cometapi.com for API access and scale your creations.&lt;/li&gt;
&lt;li&gt;Track updates on midjourney.com/updates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining Discord's creative power with CometAPI's programmatic capabilities, you'll unlock professional-grade AI imagery workflows that save time and elevate output.&lt;/p&gt;

&lt;p&gt;Ready to create? Head to Discord or &lt;a href="https://www.cometapi.com" rel="noopener noreferrer"&gt;CometAPI&lt;/a&gt; and start generating today!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cometapi.com/how-to-use-midjourney-on-discord-in-2026/?utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_campaign=content&amp;amp;utm_content=how-to-use-midjourney-on-discord-in-2026"&gt;cometapi.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
