<?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: vvvvking</title>
    <description>The latest articles on DEV Community by vvvvking (@vvvvking).</description>
    <link>https://dev.to/vvvvking</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%2F4038144%2Ff8340364-3125-46f8-88f1-745344ed51d4.png</url>
      <title>DEV Community: vvvvking</title>
      <link>https://dev.to/vvvvking</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vvvvking"/>
    <language>en</language>
    <item>
      <title>Your video, not our logo: how Seedance 2.0 API providers handle watermarks</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Wed, 05 Aug 2026 15:09:31 +0000</pubDate>
      <link>https://dev.to/vvvvking/your-video-not-our-logo-how-seedance-20-api-providers-handle-watermarks-2nad</link>
      <guid>https://dev.to/vvvvking/your-video-not-our-logo-how-seedance-20-api-providers-handle-watermarks-2nad</guid>
      <description>&lt;h2&gt;
  
  
  The question nobody asks (but should)
&lt;/h2&gt;

&lt;p&gt;You're building a product on top of a Chinese video API. Ad creative, e-commerce demos, short-form content for clients. You pick a Seedance 2.0 provider based on pricing, write the integration, test with a placeholder prompt.&lt;/p&gt;

&lt;p&gt;Then you look at the output and there's a logo in the corner.&lt;/p&gt;

&lt;p&gt;Not a subtle one. Not one you can ignore. A burned-in, visible watermark that says &lt;code&gt;kie.ai&lt;/code&gt; or &lt;code&gt;AI生成&lt;/code&gt; and makes the clip unusable for any client-facing work.&lt;/p&gt;

&lt;p&gt;This happened to us — except it happened on a competitor's output, not ours. So we tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we tested
&lt;/h2&gt;

&lt;p&gt;We run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, an API gateway for Chinese AI models. We compared watermark behaviour across the major Seedance 2.0 API providers using three sources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct API testing&lt;/strong&gt; (for NovAI's own output): real call → MP4 download → frame extraction → OCR on corner crops → 4× zoom&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provider documentation analysis&lt;/strong&gt;: does the API expose a watermark parameter? What's the default?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party reports&lt;/strong&gt;: Reddit threads, comparison blogs, user complaints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We checked this on 5 August 2026. Here's what we found.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  kie.ai: your video, their logo
&lt;/h3&gt;

&lt;p&gt;kie.ai's API documentation includes a &lt;code&gt;waterMark&lt;/code&gt; parameter with example value &lt;code&gt;"kie.ai"&lt;/code&gt;. Their Veo 3 landing page explicitly describes watermark addition. They also sell a "Sora Watermark Remover" tool on their own marketplace — which is a strange thing to sell when your API might be adding the watermark in the first place.&lt;/p&gt;

&lt;p&gt;Third-party directory unifuncs.com labels kie.ai's watermark as "Yes (limited)."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: kie.ai output may carry a platform watermark on top of whatever the model layer does. For client-facing work, this is a dealbreaker.&lt;/p&gt;

&lt;h3&gt;
  
  
  evolink.ai: clean output, professional caveats
&lt;/h3&gt;

&lt;p&gt;evolink.ai is the only provider that explicitly commits to clean output in their FAQ: &lt;em&gt;"Videos generated through the EvoLink API have no watermark and can be used commercially."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Their Chinese blog goes further, acknowledging that ByteDance embeds invisible provenance metadata (C2PA-style) at the model layer — and correctly stating that this is not a "watermark" in the visual sense. This is the most honest, professional treatment of the topic we've seen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: evolink claims clean visible output. They're a smaller provider with less public trust history, but their technical explanation is accurate.&lt;/p&gt;

&lt;h3&gt;
  
  
  atlascloud.ai: clean by default
&lt;/h3&gt;

&lt;p&gt;Reddit tutorials in r/AtlasCloudAI show their API has a &lt;code&gt;watermark&lt;/code&gt; parameter with &lt;code&gt;default: false&lt;/code&gt;. No platform watermark unless you explicitly opt in.&lt;/p&gt;

&lt;h3&gt;
  
  
  NovAI: tested clean
&lt;/h3&gt;

&lt;p&gt;We tested our own Seedance 2.0 output directly on 4 August 2026. Both Standard and Fast variants returned &lt;strong&gt;no visible label&lt;/strong&gt; in video frames. Method: frame extraction → OCR → 4× visual zoom. Full per-model table with methodology: &lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;aiapi-pro.com/watermark-notice&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Image models are a different story — all five of our image models carry a visible &lt;code&gt;AI生成&lt;/code&gt; label. This is upstream ByteDance/Tencent/Zhipu behaviour that no provider can control.&lt;/p&gt;

&lt;h3&gt;
  
  
  fal.ai, replicate.com, wavespeed.ai, poyo.ai: silence
&lt;/h3&gt;

&lt;p&gt;None of these providers publicly discuss watermarks. No documentation, no FAQ, no blog post. Silence = model default behaviour, which in ByteDance's case means no visible label on video.&lt;/p&gt;

&lt;p&gt;But silence also means you're trusting without evidence. If the model layer changes behaviour (as it did with Tencent's Hunyuan Video), you won't know until you test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for your integration
&lt;/h2&gt;

&lt;p&gt;The pattern across providers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Visible watermark?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 video via API&lt;/td&gt;
&lt;td&gt;❌ No (most providers)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 video via kie.ai&lt;/td&gt;
&lt;td&gt;⚠️ Possible (platform parameter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 video via evolink&lt;/td&gt;
&lt;td&gt;❌ No (explicitly claimed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 video via NovAI&lt;/td&gt;
&lt;td&gt;❌ No (tested)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance via Dreamina/CapCut (consumer)&lt;/td&gt;
&lt;td&gt;✅ Yes (user complaints on Reddit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All image models (any provider)&lt;/td&gt;
&lt;td&gt;✅ Yes (upstream, not removable)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The "web version has watermark, API version is clean" distinction is real and important. If you've seen watermark complaints about Seedance on Reddit, those are about the consumer Dreamina/CapCut products — not the API. The API channels pass through clean output.&lt;/p&gt;

&lt;p&gt;But kie.ai is the exception that proves the rule: they're adding a platform watermark on top of the model's clean output.&lt;/p&gt;

&lt;h2&gt;
  
  
  The invisible layer everyone shares
&lt;/h2&gt;

&lt;p&gt;All providers face the same constraint: ByteDance embeds invisible provenance metadata at the model layer. This is not a visible watermark — it's metadata for traceability and compliance. No API provider can remove it, because it's embedded before the output leaves ByteDance's infrastructure.&lt;/p&gt;

&lt;p&gt;Providers who say "no watermark" mean no visible label. Providers who say "no watermark &lt;em&gt;and&lt;/em&gt; no invisible watermark" are either wrong or misleading.&lt;/p&gt;

&lt;p&gt;evolink.ai handles this best: they promise clean visible output while acknowledging the invisible layer exists. That's the honest position.&lt;/p&gt;

&lt;h2&gt;
  
  
  Payment is the other watermark
&lt;/h2&gt;

&lt;p&gt;There's a second barrier that gets less attention: payment methods.&lt;/p&gt;

&lt;p&gt;Most Seedance 2.0 providers accept credit cards only. If you're in Southeast Asia, Latin America, the Middle East, or Africa, you may not have a Visa or Mastercard that works for international API payments.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Payment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NovAI&lt;/td&gt;
&lt;td&gt;PayPal, USDT, debit card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fal.ai&lt;/td&gt;
&lt;td&gt;Credit card (Stripe)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;replicate.com&lt;/td&gt;
&lt;td&gt;Credit card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;Credit card, USDC, Alipay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Others&lt;/td&gt;
&lt;td&gt;Credit card (or unconfirmed)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;NovAI is the only provider we've verified that accepts PayPal and USDT. This isn't a feature comparison — it's an access barrier. If PayPal is your payment method and you need Seedance 2.0, NovAI may be your only option.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test before you commit.&lt;/strong&gt; Every provider has a free tier or free credits. Generate 5 clips, download them, OCR the corners yourself. 10 minutes of work saves you weeks of integration pain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the API docs for a &lt;code&gt;watermark&lt;/code&gt; parameter.&lt;/strong&gt; If the provider exposes one, check the default value. &lt;code&gt;default: false&lt;/code&gt; is fine. &lt;code&gt;default: "provider-name"&lt;/code&gt; is a red flag.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you need PayPal/USDT&lt;/strong&gt;, your options are limited. NovAI is the only confirmed provider. OpenRouter has USDC and Alipay but not PayPal yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't trust silence.&lt;/strong&gt; If a provider doesn't discuss watermarks publicly, their output is probably clean (model default) but you have no guarantee. Test it yourself.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Dr 2 free credit on NovAI, no credit card required. Test Seedance 2.0 output quality and watermark behaviour yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aiapi-pro.com/media" rel="noopener noreferrer"&gt;Media hub with playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;Watermark test report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aiapi-pro.com/blog/seedance-2.0-api-providers-compared" rel="noopener noreferrer"&gt;Full provider comparison&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Watermark behaviour verified 4–5 August 2026. May change without notice. NovAI is an independent API gateway, not affiliated with ByteDance, kie.ai, evolink.ai, or any other provider listed. Full methodology and caveats on our watermark notice page.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>testing</category>
      <category>showdev</category>
    </item>
    <item>
      <title>We OCR'd every frame from 9 Chinese AI video models. 3 came back clean.</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Tue, 04 Aug 2026 18:00:49 +0000</pubDate>
      <link>https://dev.to/vvvvking/we-ocrd-every-frame-from-9-chinese-ai-video-models-3-came-back-clean-j5l</link>
      <guid>https://dev.to/vvvvking/we-ocrd-every-frame-from-9-chinese-ai-video-models-3-came-back-clean-j5l</guid>
      <description>&lt;h2&gt;
  
  
  The assumption
&lt;/h2&gt;

&lt;p&gt;Most developers I talk to assume that every Chinese AI model burns a visible &lt;code&gt;AI生成&lt;/code&gt; label into generated content. It's a reasonable assumption — China's &lt;a href="https://www.cac.gov.cn/" rel="noopener noreferrer"&gt;labelling regulations&lt;/a&gt; (in force since September 2025) require it.&lt;/p&gt;

&lt;p&gt;But "required" and "actually visible" turned out to be two different things. So we tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we did
&lt;/h2&gt;

&lt;p&gt;We run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, an API gateway for Chinese AI models. We have 9 media generation models on the platform — 5 image, 4 video. For each one, we:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Made a real API call (same prompt for all: "A serene mountain landscape at golden hour, cinematic, high detail")&lt;/li&gt;
&lt;li&gt;Downloaded the output&lt;/li&gt;
&lt;li&gt;For video: extracted first, middle, and last frames with ffmpeg&lt;/li&gt;
&lt;li&gt;Cropped the bottom-right corner (where labels typically appear)&lt;/li&gt;
&lt;li&gt;Ran OCR on the crop&lt;/li&gt;
&lt;li&gt;Zoomed 3–4× and re-inspected visually&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No simulated output. No provider-supplied samples. Everything came from our own API endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we found
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Every image model has a visible label.&lt;/strong&gt; All 5 of them. Paid or free, ByteDance/Tencent/Zhipu — doesn't matter. There's a &lt;code&gt;AI生成&lt;/code&gt; (or &lt;code&gt;图片由AI生成&lt;/code&gt;) stamp in the lower right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video models split by provider, not by price tier:&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;Model&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Visible label?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0&lt;/td&gt;
&lt;td&gt;ByteDance&lt;/td&gt;
&lt;td&gt;$0.067–$1.00/s&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 Fast&lt;/td&gt;
&lt;td&gt;ByteDance&lt;/td&gt;
&lt;td&gt;$0.054–$0.802/s&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CogVideoX-Flash&lt;/td&gt;
&lt;td&gt;Zhipu AI&lt;/td&gt;
&lt;td&gt;Free forever&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hunyuan Video 1.5&lt;/td&gt;
&lt;td&gt;Tencent&lt;/td&gt;
&lt;td&gt;$0.21/gen&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three out of four video models came back clean. The pattern is &lt;strong&gt;provider × media type&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ByteDance&lt;/strong&gt;: Labels images (Seedream), does not visibly label videos (Seedance)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tencent&lt;/strong&gt;: Labels both images and videos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zhipu AI&lt;/strong&gt;: Labels images (CogView), does not visibly label videos (CogVideoX)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;If you're building a product on top of a Chinese video API — ad creative, e-commerce demos, short-form content — a burned-in corner label is a dealbreaker for client-facing output. Until now, the common assumption was that &lt;em&gt;all&lt;/em&gt; Chinese models label everything. That assumption is wrong, and it's costing developers good options.&lt;/p&gt;

&lt;p&gt;Seedance 2.0 at 720p costs ~$0.82 for a 5-second clip on our platform. It's a genuinely good model — cinematic motion, decent prompt adherence, 5-second duration. And in our tests, the frames are clean.&lt;/p&gt;

&lt;p&gt;CogVideoX-Flash is free forever. 6-second clips. Also clean frames in our test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three honest caveats
&lt;/h2&gt;

&lt;p&gt;I want to be careful here, because the internet has a way of stripping nuance:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. "No visible label" ≠ "no labelling at all."&lt;/strong&gt; Providers may still embed invisible metadata watermarks. CogVideoX's cover image, for example, is served through Zhipu's watermark pipeline even though nothing is visible in the video frames. We only report what we can see and OCR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. This is upstream behaviour, not ours.&lt;/strong&gt; Providers can change how they apply labels at any time. If our next scheduled check finds a change, we'll update the &lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;watermark notice page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Paying never removes an image label.&lt;/strong&gt; All 5 image models carry the label regardless of whether they're paid or free. The pattern is provider × media type, not free vs paid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why providers differ
&lt;/h2&gt;

&lt;p&gt;China's labelling rules require providers to attach labels to AI-generated content, but they don't specify the exact method. Each provider implements compliance differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ByteDance&lt;/strong&gt;: Likely relies on metadata for video (no visible mark), but stamps images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tencent&lt;/strong&gt;: Stamps everything — images and videos both get a corner mark&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zhipu AI&lt;/strong&gt;: Stamps images, leaves video frames clean (though the cover image goes through their watermark service)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means the "safest" bet for visible-label-free video is currently ByteDance or Zhipu AI video models. But — caveat #2 — upstream behaviour can change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;

&lt;p&gt;If you want to try Seedance 2.0 yourself:&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;requests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&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://aiapi-pro.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;KEY&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer sk-novai-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Submit a Seedance 2.0 video task
&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;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;/video/generations&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;KEY&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A drone shot over a neon city at night, cinematic&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;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&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;720p&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;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Poll until done
&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;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;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&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/video/generations/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;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;id&lt;/span&gt;&lt;span class="sh"&gt;'&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="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;KEY&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;r&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;not&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;queued&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;processing&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;5&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;r&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;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="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="ow"&gt;or&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;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;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="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;url&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;Or the free option, CogVideoX-Flash — same code, just change the model name:&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;task&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;/video/generations&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;KEY&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cogvideox-flash&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A paper plane gliding over a calm ocean&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;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;$2 free credit on signup, no credit card. &lt;a href="https://aiapi-pro.com/register" rel="noopener noreferrer"&gt;Register here&lt;/a&gt; if you want to test it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;Most API gateways and relay services won't tell you which models have watermarks. They'll either say "no watermark" (often false) or say nothing at all. We think that's bad for everyone — developers waste time integrating models that don't work for their use case, and gateways lose trust when the output doesn't match the claim.&lt;/p&gt;

&lt;p&gt;Our approach: test every model, publish the results with the method and date, and update it on a schedule. The &lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;watermark notice page&lt;/a&gt; has the full 9-model table, the three caveats, and a FAQ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tested, not guessed.&lt;/strong&gt; That's the standard we're holding ourselves to.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full per-model watermark table with methodology and FAQ: &lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;aiapi-pro.com/watermark-notice&lt;/a&gt;. NovAI is an independent API gateway, not affiliated with ByteDance, Tencent, or Zhipu AI.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Alibaba's Qwen3.8-Max: What 2.4 Trillion Parameters Actually Means for Developers</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Mon, 03 Aug 2026 06:05:46 +0000</pubDate>
      <link>https://dev.to/vvvvking/alibabas-qwen38-max-what-24-trillion-parameters-actually-means-for-developers-b86</link>
      <guid>https://dev.to/vvvvking/alibabas-qwen38-max-what-24-trillion-parameters-actually-means-for-developers-b86</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, an API gateway serving Qwen3.8-Max and 40+ other models. This is an analysis piece, not a product pitch — the technical observations below come from Alibaba's announcement and independent reviewers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The parameter race is back (but it's different this time)
&lt;/h2&gt;

&lt;p&gt;Remember 2024, when everyone was rushing to ship 400B models and the discourse was "parameters don't matter anymore, it's all about data quality"? That was true — for dense models. Then DeepSeek proved that MoE (mixture-of-experts) changes the math: you can have 671B total parameters but only activate 37B per token, getting dense-model quality at a fraction of the compute cost.&lt;/p&gt;

&lt;p&gt;Now Alibaba has taken this to its logical extreme. &lt;strong&gt;Qwen3.8-Max-Preview&lt;/strong&gt;, released 19 July at WAIC Shanghai, packs &lt;strong&gt;2.4 trillion total parameters&lt;/strong&gt; into a sparse MoE architecture. That's nearly 4x DeepSeek V3's total parameter count, and it puts Qwen in the same league as Kimi K3's 2.8T — the two largest models available via API today.&lt;/p&gt;

&lt;p&gt;But here's what's actually interesting: it's not just bigger. It's the first Qwen model that's &lt;strong&gt;natively multimodal&lt;/strong&gt; at this scale, and it's the first trillion-parameter model from a Chinese lab that independent reviewers say genuinely competes with Fable 5 and GPT-5.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's genuinely new (not just "more parameters")
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Native multimodality at 2.4T
&lt;/h3&gt;

&lt;p&gt;Previous Qwen flagships (Qwen3-Max, Qwen3.7-Max) were text-only. Qwen3.8-Max processes &lt;strong&gt;text, images, video, and documents&lt;/strong&gt; natively — no separate vision adapter, no "vision model" bolted on. This matters because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don't need to route different input types to different models&lt;/li&gt;
&lt;li&gt;The model can reason across modalities (e.g., "read this PDF, look at this screenshot, and tell me if the UI matches the spec")&lt;/li&gt;
&lt;li&gt;Document processing (PDF, HTML, Markdown) works without pre-processing to plain text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the real differentiator vs. Kimi K3, which is text + image only.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The self-verification behavior
&lt;/h3&gt;

&lt;p&gt;An independent reviewer, &lt;a href="https://thomas-wiegold.com/blog/qwen-3-8-max-review/" rel="noopener noreferrer"&gt;Thomas Wiegold&lt;/a&gt;, ran Qwen3.8-Max through 4 coding benchmarks. His most interesting observation wasn't about quality — it was about &lt;strong&gt;process&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It checked buttons, menus, animations and aspect ratios with Playwright like it was getting paid per test run."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model doesn't just generate code and stop. It generates, then &lt;strong&gt;tests its own output&lt;/strong&gt; using browser automation, then iterates. This is agentic behavior baked into the model's default response pattern. It's slow — a website build took 30+ minutes — but the output quality was described as "the best I've ever gotten from this prompt."&lt;/p&gt;

&lt;p&gt;This is a meaningful shift. We're moving from "models that generate code" to "models that generate, test, debug, and iterate." The parameter count isn't what enables this — it's the training methodology. But 2.4T parameters give the model enough capacity to hold both generation and evaluation capabilities simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. OpenAI + Anthropic protocol support
&lt;/h3&gt;

&lt;p&gt;This sounds boring, but it's actually a big deal. Qwen3.8-Max's API speaks &lt;strong&gt;both&lt;/strong&gt; OpenAI and Anthropic protocols natively. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; users can swap in Qwen3.8-Max by changing one config line (OpenAI protocol)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; users can do the same (Anthropic protocol)&lt;/li&gt;
&lt;li&gt;No wrapper, no adapter, no translation layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most Chinese models only speak OpenAI format. Supporting Anthropic protocol natively means Qwen3.8-Max can serve as a drop-in replacement for Claude in tools that only support the Anthropic API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's marketing (be honest)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  "Second only to Fable 5"
&lt;/h3&gt;

&lt;p&gt;Alibaba's claim. No benchmark table has been published. No model card exists. The only independent evaluation found (Trilogy AI's StackPerf) scored Qwen3.8-Max at 80 vs. Kimi K3's 83 — on a single task, single run. Take it as a data point, not a verdict.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 2.4T number itself
&lt;/h3&gt;

&lt;p&gt;Total parameters ≠ active parameters. In a sparse MoE model, only a fraction of parameters are activated per token. Alibaba hasn't disclosed the active parameter count. The model could be activating 50B, 100B, or 200B per token — and that's what determines actual inference cost and latency, not the total.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Open weights coming soon"
&lt;/h3&gt;

&lt;p&gt;Promised, with no date and no license. The previous Qwen3-Max was open-weighted; Qwen3.7-Max was not. Treat this as likely but uncertain. If open weights land, the small Qwen3.8 models (distilled from the flagship) will be the real story for local AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means for developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For API consumers
&lt;/h3&gt;

&lt;p&gt;Qwen3.8-Max is available through OpenAI-compatible gateways. If you're already using the OpenAI SDK:&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="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_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://aiapi-pro.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;# any OpenAI-compatible gateway
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;resp&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-max&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;Your prompt here&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;That's it. Streaming, function calling, and multimodal input all work with standard OpenAI SDK patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  For the model landscape
&lt;/h3&gt;

&lt;p&gt;The frontier is now genuinely crowded. Here's the honest state of play as of July 2026:&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;Claim to fame&lt;/th&gt;
&lt;th&gt;Weakness&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5&lt;/td&gt;
&lt;td&gt;Best overall quality&lt;/td&gt;
&lt;td&gt;Expensive, locked behind subscriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5&lt;/td&gt;
&lt;td&gt;Best speed/quality balance&lt;/td&gt;
&lt;td&gt;Closed, expensive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;2.8T params, 1M context&lt;/td&gt;
&lt;td&gt;Text + image only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.8-Max&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.4T, multimodal, cheap preview&lt;/td&gt;
&lt;td&gt;Slow, preview-only, CCP guardrails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grok 4.5&lt;/td&gt;
&lt;td&gt;Fast, cheap, good coder&lt;/td&gt;
&lt;td&gt;Smaller context, X-aligned guardrails&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The real differentiators in 2026 aren't quality — the top 5 models are all "great" and "close." The differentiators are &lt;strong&gt;price, speed, availability, and guardrails.&lt;/strong&gt; Qwen3.8-Max wins on price (preview at 1/10th standard rate) and loses on speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  For local AI
&lt;/h3&gt;

&lt;p&gt;Qwen is the open-weight family powering a huge chunk of local agent setups. If the promised open weights land, and if Qwen3.8's improvements trickle down to 7B–72B sizes, that's the real story. A 72B Qwen3.8 model with distilled multimodal capability, running on a consumer GPU, would be a game-changer for privacy-sensitive use cases (medical, legal, enterprise).&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest take
&lt;/h2&gt;

&lt;p&gt;Qwen3.8-Max is a genuinely impressive model that's being shipped as a preview with a lot of unanswered questions. The 2.4T parameter count is a headline, not a spec — what matters is the native multimodality, the self-verification behavior, and the protocol compatibility.&lt;/p&gt;

&lt;p&gt;If you're choosing a model for &lt;strong&gt;rapid iteration&lt;/strong&gt;, pick something faster (Grok 4.5, DeepSeek V4 Flash, Qwen-Plus). If you're choosing a model for &lt;strong&gt;thorough one-shot tasks&lt;/strong&gt; — a full website build, a complex codebase audit, a deep research analysis — Qwen3.8-Max belongs in the top tier, and at preview pricing, it's the cheapest option there.&lt;/p&gt;

&lt;p&gt;Try it with $2 free credit (no credit card) at &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, or through Alibaba's own Token Plan. Run your own prompts and judge for yourself — that's what the preview is for.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full API guide with Python, Node, and curl examples: &lt;a href="https://aiapi-pro.com/blog/qwen38-max-api-guide" rel="noopener noreferrer"&gt;Qwen3.8-Max API Guide&lt;/a&gt;. NovAI is an independent API gateway, not affiliated with Alibaba Cloud.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
    </item>
    <item>
      <title>Qwen3.8-Max: Calling Alibaba's 2.4T Flagship Through an OpenAI-Compatible API</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Mon, 03 Aug 2026 05:47:26 +0000</pubDate>
      <link>https://dev.to/vvvvking/qwen38-max-calling-alibabas-24t-flagship-through-an-openai-compatible-api-kop</link>
      <guid>https://dev.to/vvvvking/qwen38-max-calling-alibabas-24t-flagship-through-an-openai-compatible-api-kop</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, an API gateway that serves Qwen3.8-Max alongside 40+ other models. Specs below are from Alibaba's announcement; you can verify pricing yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alibaba's Qwen team released &lt;strong&gt;Qwen3.8-Max-Preview&lt;/strong&gt; on 19 July 2026 at WAIC Shanghai: a &lt;strong&gt;2.4-trillion-parameter sparse-MoE&lt;/strong&gt; model, natively multimodal (text + images + video + documents), with a 128K context window (extendable to 1M). Alibaba called it "second only to Fable 5" â€” and early independent testing puts it in the top tier for coding and reasoning.&lt;/p&gt;

&lt;p&gt;It's now available through an OpenAI-compatible endpoint. If you already use the OpenAI SDK, it's a two-line change.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&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_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://aiapi-pro.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;span class="n"&gt;resp&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-max&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;Explain sparse MoE routing in 3 bullet points.&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;resp&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;Streaming works exactly as you'd expect:&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="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;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-max&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;Write a haiku about trillion-parameter models.&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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="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;
  
  
  Multimodal: images and documents
&lt;/h2&gt;

&lt;p&gt;Qwen3.8-Max is natively multimodal â€” vision is built in, not bolted on. Send an image with the standard &lt;code&gt;image_url&lt;/code&gt; content type:&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;resp&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-max&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;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;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s in this screenshot? List all UI elements.&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;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/ui.png&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also accepts PDF, HTML, and Markdown directly â€” no pre-processing to plain text needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Qwen3.8-Max matters
&lt;/h2&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;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total parameters&lt;/td&gt;
&lt;td&gt;2.4T (sparse MoE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modality&lt;/td&gt;
&lt;td&gt;Text, images, video, documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;128K standard (1M extended)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API protocol&lt;/td&gt;
&lt;td&gt;OpenAI + Anthropic compatible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open weights&lt;/td&gt;
&lt;td&gt;Promised "soon" (no date yet)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An independent reviewer (&lt;a href="https://thomas-wiegold.com/blog/qwen-3-8-max-review/" rel="noopener noreferrer"&gt;Thomas Wiegold&lt;/a&gt;) ran it through 4 coding tests â€” including a full Go poker simulation that only Fable 5 and Grok 4.5 had previously one-shotted. Qwen3.8-Max became the third model to do it. His takeaway: "very good and very slow" â€” the model spends extensive time on self-verification, which trades speed for thoroughness.&lt;/p&gt;

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

&lt;p&gt;Alibaba's official rate for Qwen3.8-Max is &lt;strong&gt;Â¥12 / Â¥36 per million tokens&lt;/strong&gt; (input / output) â€” roughly &lt;strong&gt;$1.67 / $5.00&lt;/strong&gt;. During the preview period, Alibaba offers it at &lt;strong&gt;1/10th of standard rate&lt;/strong&gt; (Â¥1.2 / Â¥3.6, ~$0.17 / $0.50), with overnight rates as low as &lt;strong&gt;1/50th&lt;/strong&gt; (22:00â€“08:00 UTC+8).&lt;/p&gt;

&lt;p&gt;NovAI passes these preview savings through. Check live per-token pricing: &lt;a href="https://aiapi-pro.com/pricing" rel="noopener noreferrer"&gt;https://aiapi-pro.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New keys come with &lt;strong&gt;$2 free credit, no credit card&lt;/strong&gt;, so you can test Qwen3.8-Max against your own prompts before spending anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Copy-paste examples in Python, Node, and curl (chat, streaming, vision, long context) are on GitHub:&lt;/p&gt;

&lt;p&gt;ðŸ‘‰ &lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;https://github.com/vvvvking/novai-examples&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full guide with curl + Node snippets and FAQ: &lt;a href="https://aiapi-pro.com/blog/qwen38-max-api-guide" rel="noopener noreferrer"&gt;Qwen3.8-Max API Guide&lt;/a&gt;. NovAI is an independent API gateway and is not affiliated with Alibaba Cloud.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Ran 8 AI APIs Through the Same 50 Prompts — Here's the Real Cost Breakdown</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Sun, 02 Aug 2026 14:03:26 +0000</pubDate>
      <link>https://dev.to/vvvvking/i-ran-8-ai-apis-through-the-same-50-prompts-heres-the-real-cost-breakdown-1b6k</link>
      <guid>https://dev.to/vvvvking/i-ran-8-ai-apis-through-the-same-50-prompts-heres-the-real-cost-breakdown-1b6k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I'm 于侃 (Yu Kan), the developer behind &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, an API gateway for Chinese AI models. Every number in this article was measured by running the test script below. I tested DeepSeek's official API separately to verify the gateway adds zero overhead. The test prompts and full results are open-sourced — links at the bottom.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everyone publishing API pricing comparisons is either cherry-picking prompts or quoting the official pricing page without testing. I got tired of it, so I ran the same 50 real-world prompts through 8 different AI APIs and tracked every single token and every cent.&lt;/p&gt;

&lt;p&gt;Here's what I actually found — including a few results that surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Cost (50 prompts)&lt;/th&gt;
&lt;th&gt;Quality (1-5)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;NovAI / Qwen-Plus&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.011&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;NovAI / DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.019&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;DeepSeek (official) V4 Flash&lt;/td&gt;
&lt;td&gt;$0.019&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Google Gemini 3.1 Flash&lt;/td&gt;
&lt;td&gt;$0.027&lt;/td&gt;
&lt;td&gt;3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;NovAI / Doubao Seed 2.0 Lite&lt;/td&gt;
&lt;td&gt;$0.034&lt;/td&gt;
&lt;td&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;OpenAI GPT-5&lt;/td&gt;
&lt;td&gt;$0.142&lt;/td&gt;
&lt;td&gt;4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;OpenAI GPT-4o&lt;/td&gt;
&lt;td&gt;$0.198&lt;/td&gt;
&lt;td&gt;4.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Anthropic Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$0.287&lt;/td&gt;
&lt;td&gt;4.7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The cheapest option was 26× cheaper than the most expensive one.&lt;/strong&gt; The quality gap between #1 and #8 was 0.8 points on a 5-point scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tested
&lt;/h2&gt;

&lt;p&gt;I used 50 prompts across 5 categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10 coding tasks&lt;/strong&gt; (debug Python, write SQL, explain Rust errors)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 reasoning tasks&lt;/strong&gt; (math word problems, logic puzzles)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 writing tasks&lt;/strong&gt; (blog intros, email drafts, documentation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 multilingual tasks&lt;/strong&gt; (English↔Chinese↔Japanese translation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 long-context tasks&lt;/strong&gt; (summarize 8K-token documents)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each prompt, I measured:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Input tokens&lt;/strong&gt; (exact count from API response)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output tokens&lt;/strong&gt; (exact count)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wall-clock latency&lt;/strong&gt; (time to first token + total time)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality&lt;/strong&gt; (manual review on a 1-5 scale)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; (calculated from official pricing, not marketing claims)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The 8 APIs I tested
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Pricing verified July 2026 from official pricing pages. Prices change — always check the source.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Model used&lt;/th&gt;
&lt;th&gt;Input $/1M&lt;/th&gt;
&lt;th&gt;Output $/1M&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-5&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;200K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Gemini 3.1 Flash&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.60&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek (official)&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NovAI&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NovAI&lt;/td&gt;
&lt;td&gt;Qwen-Plus&lt;/td&gt;
&lt;td&gt;$0.08&lt;/td&gt;
&lt;td&gt;$0.32&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NovAI&lt;/td&gt;
&lt;td&gt;Doubao Seed 2.0 Lite&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$0.80&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I tested both DeepSeek's official API and DeepSeek via NovAI to check whether the gateway adds overhead (spoiler: it doesn't — identical token counts, &amp;lt;50ms latency difference).&lt;/p&gt;

&lt;h2&gt;
  
  
  The results: total cost for all 50 prompts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Total cost (50 prompts)&lt;/th&gt;
&lt;th&gt;Avg quality (1-5)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;NovAI / Qwen-Plus&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.011&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;NovAI / DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;$0.019&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;DeepSeek (official) V4 Flash&lt;/td&gt;
&lt;td&gt;$0.019&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Google Gemini 3.1 Flash&lt;/td&gt;
&lt;td&gt;$0.027&lt;/td&gt;
&lt;td&gt;3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;NovAI / Doubao Seed 2.0 Lite&lt;/td&gt;
&lt;td&gt;$0.034&lt;/td&gt;
&lt;td&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;OpenAI GPT-5&lt;/td&gt;
&lt;td&gt;$0.142&lt;/td&gt;
&lt;td&gt;4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;OpenAI GPT-4o&lt;/td&gt;
&lt;td&gt;$0.198&lt;/td&gt;
&lt;td&gt;4.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Anthropic Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$0.287&lt;/td&gt;
&lt;td&gt;4.7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The cheapest option was 26× cheaper than the most expensive one.&lt;/strong&gt; And the quality difference between #1 (Qwen-Plus at $0.011) and #8 (Claude at $0.287) was 0.8 points on a 5-point scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Qwen-Plus is absurdly cheap and genuinely good.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At $0.08/1M input and $0.32/1M output, Qwen-Plus was the cheapest model I tested — and it scored 3.9/5 on quality, beating Gemini 3.1 Flash (3.8/5) which costs 2.4× more. For coding tasks specifically, it scored 4.2/5, matching DeepSeek V4 Flash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. DeepSeek via NovAI is identical to DeepSeek's official API.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was skeptical that a gateway would add latency or modify token counts. I tested the exact same prompts through both. Result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Token counts: identical (0% difference)&lt;/li&gt;
&lt;li&gt;Latency: NovAI averaged 42ms slower (640ms vs 598ms for first token) — negligible&lt;/li&gt;
&lt;li&gt;Cost: identical (same per-token pricing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gateway adds zero overhead. This matters because NovAI gives you access to 40+ Chinese models through one API key, while DeepSeek's official API only gives you DeepSeek.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The "quality gap" is smaller than pricing pages suggest.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look at pricing tables and you'd think there's a massive quality difference between GPT-5 ($1.25/$10) and DeepSeek V4 Flash ($0.14/$0.28). In practice, for the 50 prompts I tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5 scored 4.6/5&lt;/li&gt;
&lt;li&gt;DeepSeek V4 Flash scored 4.1/5&lt;/li&gt;
&lt;li&gt;The gap is 0.5 points — noticeable but not "10× better"&lt;/li&gt;
&lt;li&gt;The price gap is &lt;strong&gt;10× on input, 36× on output&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For 90% of production workloads (chatbots, content generation, code completion, document processing), the 0.5-point quality difference is invisible to end users. The 10-36× price difference is very visible to your CFO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Claude is the best, but only marginally — and at a huge premium.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Sonnet 4.6 scored 4.7/5 — the highest quality. But it cost $0.287 for 50 prompts vs $0.019 for DeepSeek V4 Flash (which scored 4.1/5). That's &lt;strong&gt;15× more expensive for 0.6 points of quality&lt;/strong&gt;. Claude makes sense for legal documents and medical summaries. For everything else, it's overkill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where each API actually wins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use OpenAI GPT-5 when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need the absolute best reasoning quality&lt;/li&gt;
&lt;li&gt;You're building a customer-facing product where quality is the differentiator&lt;/li&gt;
&lt;li&gt;Your margins can absorb $1.25/$10 per million tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use DeepSeek V4 Flash when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need GPT-4-level quality at 1/10th the price&lt;/li&gt;
&lt;li&gt;You're doing coding tasks, reasoning, or general chat&lt;/li&gt;
&lt;li&gt;You want the best price-to-quality ratio in 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Qwen-Plus when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cost is the #1 priority&lt;/li&gt;
&lt;li&gt;You're doing multilingual work (especially Chinese/English)&lt;/li&gt;
&lt;li&gt;You can tolerate slightly lower quality on complex reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Claude Sonnet 4.6 when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quality is non-negotiable (legal, medical, compliance)&lt;/li&gt;
&lt;li&gt;You're processing long documents (200K context)&lt;/li&gt;
&lt;li&gt;Budget is not a constraint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The code I used to test
&lt;/h2&gt;

&lt;p&gt;Here's the Python script I used. It's simple, reproducible, and you can run it yourself.&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;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="c1"&gt;# Test with NovAI (works identically with any OpenAI-compatible API)
&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://aiapi-pro.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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nvai-your-key-here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;prompts&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;Write a Python function to merge two sorted linked lists&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;Explain the difference between mutex and semaphore&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;Translate to Chinese: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;The quick brown fox jumps over the lazy dog&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;# ... 47 more prompts (full list in the GitHub repo)
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&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;prompt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&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;time&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-v4-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 qwen-plus, doubao-seed-2.0-lite
&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="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;latency&lt;/span&gt; &lt;span class="o"&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;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;

    &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&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="n"&gt;prompt&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_tokens&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt_tokens&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_tokens&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completion_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latency_ms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latency&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&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="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;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Calculate cost
&lt;/span&gt;&lt;span class="n"&gt;INPUT_PRICE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.14&lt;/span&gt;  &lt;span class="c1"&gt;# $/1M tokens for deepseek-v4-flash
&lt;/span&gt;&lt;span class="n"&gt;OUTPUT_PRICE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.28&lt;/span&gt;

&lt;span class="n"&gt;total_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_tokens&lt;/span&gt;&lt;span class="sh"&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;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;total_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output_tokens&lt;/span&gt;&lt;span class="sh"&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;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;total_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;INPUT_PRICE&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;total_output&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;OUTPUT_PRICE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&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;Total cost for &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;prompts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; prompts: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total_cost&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&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="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;Avg latency: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;sum&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;latency_ms&lt;/span&gt;&lt;span class="sh"&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;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&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;results&lt;/span&gt;&lt;span class="p"&gt;)&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;ms&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;You can swap the &lt;code&gt;base_url&lt;/code&gt; and &lt;code&gt;api_key&lt;/code&gt; to test any provider. The OpenAI Python SDK works with any OpenAI-compatible API — that's the beauty of the standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to reproduce this yourself
&lt;/h2&gt;

&lt;p&gt;If you want to verify these numbers (and you should — don't trust random blog posts), here's how:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get API keys from each provider.&lt;/strong&gt; OpenAI, Anthropic, Google, DeepSeek all offer free credits. For NovAI, you can register at &lt;a href="https://aiapi-pro.com/register" rel="noopener noreferrer"&gt;aiapi-pro.com/register&lt;/a&gt; and get free credits — no credit card needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run the same 50 prompts.&lt;/strong&gt; I've open-sourced my test prompts and script at &lt;a href="https://github.com/vvvvking/ai-api-cost-comparison" rel="noopener noreferrer"&gt;github.com/vvvvking/ai-api-cost-comparison&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calculate costs using official pricing pages.&lt;/strong&gt; Don't use my numbers — use the official pricing pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI: &lt;a href="https://developers.openai.com/api/docs/pricing" rel="noopener noreferrer"&gt;developers.openai.com/api/docs/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DeepSeek: &lt;a href="https://api-docs.deepseek.com/quick_start/pricing" rel="noopener noreferrer"&gt;api-docs.deepseek.com/quick_start/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NovAI: &lt;a href="https://aiapi-pro.com/blog/chinese-ai-api-pricing-2026" rel="noopener noreferrer"&gt;aiapi-pro.com/blog/chinese-ai-api-pricing-2026&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest caveats
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;50 prompts is a small sample.&lt;/strong&gt; Your workload will differ. Run the test on your own prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality scoring is subjective.&lt;/strong&gt; I scored manually. You might disagree with my 4.1 vs 4.6 ratings. The point is the &lt;em&gt;relative&lt;/em&gt; difference, not the absolute numbers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I didn't test image/video generation.&lt;/strong&gt; This is text-only. Image and video generation has completely different economics — and Chinese models have a mandatory &lt;code&gt;AI生成&lt;/code&gt; watermark that you should know about before using them. (Disclosure: I work on NovAI, which is a gateway for these models. The watermark is a legal requirement in China and cannot be removed. See &lt;a href="https://aiapi-pro.com/watermark-notice" rel="noopener noreferrer"&gt;aiapi-pro.com/watermark-notice&lt;/a&gt;.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Latency varies by region.&lt;/strong&gt; I tested from Southeast Asia. If you're in the US or Europe, add 50-150ms to all latency numbers. DeepSeek and NovAI have servers in Asia, so they're naturally faster for Asian users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I work on NovAI.&lt;/strong&gt; I've been transparent about this throughout the article. But the numbers are real and reproducible — I tested DeepSeek's official API separately and got identical results. The gateway overhead is negligible. Run the test yourself if you're skeptical.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;If you're paying OpenAI prices for production workloads where GPT-4-level quality is sufficient, you're burning money. The math is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5&lt;/strong&gt;: $1.25/$10 per million tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt;: $0.14/$0.28 per million tokens&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Same quality tier for 10-36× less money&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a typical SaaS app doing 1M input + 500K output tokens per day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5: $6.25/day = &lt;strong&gt;$2,281/year&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;DeepSeek V4 Flash: $0.28/day = &lt;strong&gt;$102/year&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's $2,179/year in savings, for a model that scores 4.1/5 vs 4.6/5 on quality. For most apps, users won't notice the difference. Your CFO will notice the $2,179.&lt;/p&gt;

&lt;p&gt;The code to switch is one line:&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;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://aiapi-pro.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;# was: https://api.openai.com/v1
&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;nvai-your-key-here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;           &lt;span class="c1"&gt;# was: sk-your-openai-key
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test it yourself. The free credits are enough to run 50 prompts and verify every number in this article.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I'm 于侃 (Yu Kan), the developer behind NovAI (aiapi-pro.com). I wrote this article because I was frustrated by the lack of honest, reproducible API cost comparisons. Every number in this article was measured by running the test script above. The test prompts and full results are open-sourced at &lt;a href="https://github.com/vvvvking/ai-api-cost-comparison" rel="noopener noreferrer"&gt;github.com/vvvvking/ai-api-cost-comparison&lt;/a&gt;. If you find an error, open an issue.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>A genuinely free AI video + image generation API (no credit card) — with working Python code</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Thu, 30 Jul 2026 02:47:55 +0000</pubDate>
      <link>https://dev.to/vvvvking/a-genuinely-free-ai-video-image-generation-api-no-credit-card-with-working-python-code-24n5</link>
      <guid>https://dev.to/vvvvking/a-genuinely-free-ai-video-image-generation-api-no-credit-card-with-working-python-code-24n5</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I operate &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, the gateway described below. All prices are what our billing actually charges as of July 2026. This post was written with AI assistance and reviewed by me.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most "free" video generation APIs are trial credits: you get $5–10, burn through it in a dozen clips, then hit a paywall that wants a credit card. While building our gateway I found that Zhipu's flash-tier models (&lt;code&gt;cogvideox-flash&lt;/code&gt; for video, &lt;code&gt;cogview-3-flash&lt;/code&gt; for images) are genuinely free upstream — but the free tier is only exposed on the China-domestic platform. Zhipu's international site (z.ai) only sells the paid models.&lt;/p&gt;

&lt;p&gt;We route to the domestic endpoint, so both models are billed at &lt;strong&gt;$0&lt;/strong&gt; through our OpenAI-compatible API. Email signup, no card. Here's the working code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free image generation ($0/image)
&lt;/h2&gt;

&lt;p&gt;It's a drop-in for the OpenAI SDK — just change &lt;code&gt;base_url&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="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_NOVAI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              &lt;span class="c1"&gt;# free key: https://aiapi-pro.com
&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://aiapi-pro.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;span class="n"&gt;img&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;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&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;cogview-3-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;# $0 / image
&lt;/span&gt;    &lt;span class="n"&gt;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;isometric illustration of a tiny server room, pastel colors&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;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&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;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Free video generation ($0/generation)
&lt;/h2&gt;

&lt;p&gt;Video is asynchronous: submit a job, poll until it's done.&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;requests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&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://aiapi-pro.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;H&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer YOUR_NOVAI_KEY&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;job&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;/video/generations&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;H&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cogvideox-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;# $0 / generation
&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;a paper plane gliding over a neon city at night&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;json&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;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;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&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/video/generations/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;job&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="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;H&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cogvideox-flash&lt;/span&gt;&lt;span class="sh"&gt;"&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;r&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;succeeded&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:&lt;/span&gt;&lt;span class="sh"&gt;"&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="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;video_url&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="k"&gt;if&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;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;failed&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="n"&gt;r&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;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node.js and curl versions are in the &lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;novai-examples repo&lt;/a&gt; (MIT).&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part: what "flash tier" means
&lt;/h2&gt;

&lt;p&gt;These are &lt;strong&gt;not&lt;/strong&gt; frontier models. Being specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cogview-3-flash&lt;/code&gt;: solid for illustrations, thumbnails, placeholders. Noticeably below Seedream 5.0 / DALL·E-class output on photorealism and text rendering.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cogvideox-flash&lt;/code&gt;: short clips, lower fidelity than Seedance/Kling/Sora-class models. Good for prototyping a video pipeline, not for client deliverables.&lt;/li&gt;
&lt;li&gt;Free-tier requests are queued at lower priority, so generation can be slower at peak times.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where they shine: &lt;strong&gt;CI pipelines, hackathons, prototyping an async video flow, or any product where image cost must be exactly $0.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When you outgrow the free tier
&lt;/h2&gt;

&lt;p&gt;Same API key and endpoint also serve paid Chinese models — for reference (our billing, July 2026):&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;Type&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;cogview-3-flash&lt;/td&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cogvideox-flash&lt;/td&gt;
&lt;td&gt;video&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hy-image-lite&lt;/td&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;$0.014/image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;doubao-seedream-5.0&lt;/td&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;$0.027/image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;doubao-seedance-2.0&lt;/td&gt;
&lt;td&gt;video&lt;/td&gt;
&lt;td&gt;$0.329/s @1080p&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hy-video-1.5&lt;/td&gt;
&lt;td&gt;video&lt;/td&gt;
&lt;td&gt;$0.21/generation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For comparison, fal.ai's published price for Seedance 2.0 at 1080p is roughly $0.68/s as of July 2026 (their pricing may change — check both before committing volume).&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free key (no card): &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;https://aiapi-pro.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Examples repo: &lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;https://github.com/vvvvking/novai-examples&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deep dive: &lt;a href="https://aiapi-pro.com/blog/free-ai-video-generation-api-2026" rel="noopener noreferrer"&gt;free video API guide&lt;/a&gt; · &lt;a href="https://aiapi-pro.com/blog/ai-video-generation-api-pricing-2026" rel="noopener noreferrer"&gt;pricing comparison&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about the routing setup or limits — happy to answer in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 Free AI Models Through One OpenAI-Compatible API (Chat, Vision, Image Gen, Video Gen)</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Sun, 26 Jul 2026 16:39:21 +0000</pubDate>
      <link>https://dev.to/vvvvking/5-free-ai-models-through-one-openai-compatible-api-chat-vision-image-gen-video-gen-2a73</link>
      <guid>https://dev.to/vvvvking/5-free-ai-models-through-one-openai-compatible-api-chat-vision-image-gen-video-gen-2a73</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt; (aiapi-pro.com), the gateway described below. This is a first-party announcement, not an independent review.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We just made &lt;strong&gt;5 models completely free&lt;/strong&gt; on our OpenAI-compatible API — covering chat, vision reasoning, image generation and video generation. Here's what they are and how to call each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 free models
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model ID&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Endpoint&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;&lt;code&gt;glm-4.7-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chat LLM&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;glm-4.1v-thinking-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vision + reasoning&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;glm-4.6v-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vision&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cogview-3-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Image generation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/images/generations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cogvideox-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Video generation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/video/generations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All five are Zhipu (Z.ai) GLM-family "flash" variants. Zhipu offers them free upstream and we pass that through with zero markup. The trade-off is capability (flash models are smaller than flagships), not hidden fees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free chat: glm-4.7-flash
&lt;/h2&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;sk-novai-xxx&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://aiapi-pro.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;resp&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-4.7-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 this in one sentence: ...&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;resp&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;
  
  
  Free vision reasoning: glm-4.1v-thinking-flash
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&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-4.1v-thinking-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/chart.png&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;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;What trend does this chart show?&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "thinking" variant reasons step-by-step over images — charts, documents, screenshots. For plain image description, &lt;code&gt;glm-4.6v-flash&lt;/code&gt; uses the same request format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free image generation: cogview-3-flash
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;img&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;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&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;cogview-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;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;minimalist logo of a paper plane, flat design&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;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&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;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Free video generation: cogvideox-flash
&lt;/h2&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;requests&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aiapi-pro.com/v1/video/generations&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer sk-novai-xxx&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cogvideox-flash&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;a paper plane flying over a city at sunset&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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Video generation is asynchronous — you get a task ID and poll for the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are flash models actually good for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping&lt;/strong&gt; — build and demo an AI feature before spending anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI / integration tests&lt;/strong&gt; — run pipeline tests against a real API at $0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light production work&lt;/strong&gt; — summaries, tagging, alt-text, thumbnails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning&lt;/strong&gt; — try vision, image gen and video gen APIs without a budget&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you outgrow them, the same API key works for the paid catalog (DeepSeek, Qwen, Kimi, Doubao Seedance video, Seedream image, etc.).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Do I need a Chinese phone number?&lt;/strong&gt; No — email signup; paid models (if you ever need them) accept PayPal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a catch?&lt;/strong&gt; No hidden fees. Flash models are just smaller than flagship models.&lt;/p&gt;

&lt;p&gt;Questions about the free tier? Happy to answer in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>ByteDance Seedance 2.0 video generation through an OpenAI-compatible API (Python)</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Sun, 26 Jul 2026 15:09:55 +0000</pubDate>
      <link>https://dev.to/vvvvking/bytedance-seedance-20-video-generation-through-an-openai-compatible-api-python-lm8</link>
      <guid>https://dev.to/vvvvking/bytedance-seedance-20-video-generation-through-an-openai-compatible-api-python-lm8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, the API gateway used in the examples below. Everything shown works with a free $2 trial credit (no card required), and the same submit→poll pattern applies to any async video API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 is ByteDance's video generation model. Unlike chat completions, video generation is &lt;strong&gt;asynchronous&lt;/strong&gt;: you submit a job, get a task ID, then poll until the video is ready. Here's the whole flow in ~30 lines of Python:&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="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="n"&gt;requests&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://aiapi-pro.com/v1&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;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;NOVAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&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="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="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# 1) Submit the generation job
&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;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;/video/generations&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;json&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;a paper plane flying over a neon city at night, cinematic&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;resolution&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;720p&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;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&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;json&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="n"&gt;job&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="c1"&gt;# 2) Poll until ready
&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;90&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="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&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/video/generations/&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;params&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0&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;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;r&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;succeeded&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 URL:&lt;/span&gt;&lt;span class="sh"&gt;"&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="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="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;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;model&lt;/code&gt; to &lt;code&gt;doubao-seedance-2.0-fast&lt;/code&gt; when iteration speed matters more than fidelity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why async is the right shape for video
&lt;/h2&gt;

&lt;p&gt;A 5-second 720p clip takes roughly 1–3 minutes to render. Holding an HTTP connection open that long is fragile (proxies time out, serverless functions hit limits). The submit→poll pattern means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your submit call returns in milliseconds&lt;/li&gt;
&lt;li&gt;Polling is idempotent and retry-safe&lt;/li&gt;
&lt;li&gt;You can fan out N jobs in parallel and poll them concurrently
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Fan-out: submit several prompts at once, poll them together
&lt;/span&gt;&lt;span class="n"&gt;prompts&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;a lighthouse in a storm, drone shot&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;ink-wash koi swimming through clouds&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;timelapse of a city intersection at dusk&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;task_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&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;/video/generations&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;json&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0-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;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&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;720p&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;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&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="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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prompts&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  One endpoint, text + image + video
&lt;/h2&gt;

&lt;p&gt;The same &lt;code&gt;base_url&lt;/code&gt; and key also cover chat (DeepSeek, Qwen, GLM, Kimi) and image generation (Seedream 5.0), so a single integration handles a full multimodal pipeline — e.g. LLM writes the storyboard → Seedream renders keyframes → Seedance animates them. The public model list is at &lt;code&gt;GET /v1/models&lt;/code&gt; if you want to see everything available (43 models at time of writing).&lt;/p&gt;

&lt;h2&gt;
  
  
  Runnable examples
&lt;/h2&gt;

&lt;p&gt;Full scripts (submit, poll, download, plus image and chat variants):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;vvvvking/novai-examples&lt;/a&gt; — &lt;code&gt;python/video.py&lt;/code&gt; is the file to start from&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://aiapi-pro.com/docs" rel="noopener noreferrer"&gt;aiapi-pro.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pricing is per generation and listed on the &lt;a href="https://aiapi-pro.com/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; — I won't quote numbers here since they change; the $2 signup credit is enough to run several test clips.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cross-posted from the &lt;a href="https://aiapi-pro.com/blog/native-audio-ai-video-seedance-2026" rel="noopener noreferrer"&gt;NovAI blog&lt;/a&gt;. NovAI is not affiliated with ByteDance; Seedance is a trademark of its respective owner.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Kimi K3 API: Moonshot's 2.8T, 1M-Context Model via an OpenAI-Compatible Endpoint</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Thu, 23 Jul 2026 11:31:01 +0000</pubDate>
      <link>https://dev.to/vvvvking/kimi-k3-api-moonshots-28t-1m-context-model-via-an-openai-compatible-endpoint-36bn</link>
      <guid>https://dev.to/vvvvking/kimi-k3-api-moonshots-28t-1m-context-model-via-an-openai-compatible-endpoint-36bn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I run &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt;, one of the API gateways that serves Kimi K3. Everything below (specs, pricing, code) is verifiable — specs are from Moonshot's announcement, and you can check pricing yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Moonshot AI released &lt;strong&gt;Kimi K3&lt;/strong&gt; on 2026-07-16: a &lt;strong&gt;2.8-trillion-parameter MoE&lt;/strong&gt;, &lt;strong&gt;natively multimodal&lt;/strong&gt; (text + vision), with a &lt;strong&gt;1M-token context window&lt;/strong&gt;, and open weights announced for July 27. It's the most interesting Chinese model drop of the summer — here's how to actually call it over an API today.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you already use the OpenAI SDK, it's a two-line change:&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="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_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://aiapi-pro.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;# one gateway serving K3
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;resp&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;kimi-k3&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;Explain mixture-of-experts routing in 3 bullet points.&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;resp&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;Streaming works exactly as you'd expect:&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="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;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;kimi-k3&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;Write a haiku about long context.&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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="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;p&gt;And because K3 is natively multimodal, vision input uses the standard &lt;code&gt;image_url&lt;/code&gt; content type:&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;resp&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;kimi-k3&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;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;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s in this chart?&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;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/chart.png&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why K3 matters
&lt;/h2&gt;

&lt;p&gt;Per Moonshot's announcement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2.8T total parameters (MoE)&lt;/strong&gt; — the largest open-weights model announced to date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1M-token context&lt;/strong&gt; — a full codebase or a stack of PDFs in one prompt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native multimodality&lt;/strong&gt; — vision is built in, not bolted on&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open weights&lt;/strong&gt; — self-hostable once weights drop (announced July 27)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing (honest numbers)
&lt;/h2&gt;

&lt;p&gt;On NovAI, K3 is &lt;strong&gt;$2.90 / $14.50 per million tokens (input / output)&lt;/strong&gt; for the 1M-context tier. For comparison, OpenRouter lists K3 at roughly &lt;strong&gt;$3.00 / $15.00&lt;/strong&gt; — so we're about 3% cheaper. That's parity, not a price war; the point of a gateway is one API surface across every major Chinese lab (DeepSeek, Qwen, GLM, Kimi, MiniMax, Doubao, Hunyuan) plus image and video generation.&lt;/p&gt;

&lt;p&gt;Check current numbers yourself: &lt;a href="https://aiapi-pro.com/pricing" rel="noopener noreferrer"&gt;https://aiapi-pro.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Runnable examples
&lt;/h2&gt;

&lt;p&gt;Copy-paste examples in Python, Node, and curl (chat, streaming, vision, long context) are on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;https://github.com/vvvvking/novai-examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New keys come with &lt;strong&gt;$2 free credit, no credit card&lt;/strong&gt;, so you can sanity-check K3 against your own prompts before spending anything.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full guide with curl + Node snippets and FAQ: &lt;a href="https://aiapi-pro.com/blog/kimi-k3-api-guide" rel="noopener noreferrer"&gt;Kimi K3 API guide&lt;/a&gt;. NovAI is an independent API gateway and is not affiliated with Moonshot AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>webdev</category>
    </item>
    <item>
      <title>One OpenAI-compatible API for DeepSeek, Qwen, and Chinese image/video models</title>
      <dc:creator>vvvvking</dc:creator>
      <pubDate>Mon, 20 Jul 2026 12:23:20 +0000</pubDate>
      <link>https://dev.to/vvvvking/one-openai-compatible-api-for-deepseek-qwen-and-chinese-imagevideo-models-5e73</link>
      <guid>https://dev.to/vvvvking/one-openai-compatible-api-for-deepseek-qwen-and-chinese-imagevideo-models-5e73</guid>
      <description>&lt;p&gt;If you build with LLMs, you already have OpenAI-compatible code lying around. The nice thing about that format is you can point the same code at almost any provider by swapping &lt;code&gt;base_url&lt;/code&gt;. What most guides skip is that the &lt;strong&gt;Chinese frontier models&lt;/strong&gt; — DeepSeek, Qwen, Kimi, GLM, Doubao, MiniMax, Hunyuan — and their &lt;strong&gt;image and video&lt;/strong&gt; siblings can be reached the exact same way.&lt;/p&gt;

&lt;p&gt;This is a short, practical walkthrough of calling text, image, and video models from &lt;strong&gt;one&lt;/strong&gt; OpenAI-compatible endpoint, with copy-paste code you can run in a minute. I'll use &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;NovAI&lt;/a&gt; as the gateway (disclosure: it's the service I work on), but the patterns apply to any OpenAI-compatible endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why one endpoint matters
&lt;/h2&gt;

&lt;p&gt;If you want DeepSeek for reasoning, Qwen for multilingual, Seedream for images, and Seedance for short video, the naive path is four SDKs, four auth schemes, four billing dashboards. A single OpenAI-compatible gateway collapses that to one &lt;code&gt;base_url&lt;/code&gt; + one key. Fewer moving parts, and your existing OpenAI code keeps working.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Chat — drop-in OpenAI SDK
&lt;/h2&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_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://aiapi-pro.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;span class="n"&gt;resp&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-v4-pro&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;Explain mixture-of-experts in one paragraph.&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;resp&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;Streaming is the standard &lt;code&gt;stream=True&lt;/code&gt; iterator — nothing special. Swap &lt;code&gt;model&lt;/code&gt; for &lt;code&gt;qwen3.7-max&lt;/code&gt;, &lt;code&gt;glm-5.2&lt;/code&gt;, &lt;code&gt;kimi-k2.6&lt;/code&gt;, &lt;code&gt;minimax-m3&lt;/code&gt;, &lt;code&gt;doubao-seed-2.0-pro&lt;/code&gt;, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Image — Doubao Seedream 5.0
&lt;/h2&gt;

&lt;p&gt;Image generation follows the OpenAI &lt;code&gt;images.generate&lt;/code&gt; shape:&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;img&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;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&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;doubao-seedream-5.0&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 -pro
&lt;/span&gt;    &lt;span class="n"&gt;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;a red panda coding on a laptop, studio ghibli style, warm light&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2048x2048&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&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;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&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;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seedream likes large sizes — go with &lt;code&gt;2048x2048&lt;/code&gt; rather than the classic &lt;code&gt;1024x1024&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Video — Doubao Seedance 2.0 (async)
&lt;/h2&gt;

&lt;p&gt;Video is the one place the flow differs: generation takes time, so you &lt;strong&gt;submit a job and poll&lt;/strong&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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&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://aiapi-pro.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;H&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer YOUR_KEY&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;job&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;/video/generations&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;H&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0&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 -fast
&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;a paper plane flying over a neon city at night, cinematic&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;resolution&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;720p&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;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&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;task_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="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="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;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;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&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/video/generations/&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;H&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2.0&lt;/span&gt;&lt;span class="sh"&gt;"&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;r&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;succeeded&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:&lt;/span&gt;&lt;span class="sh"&gt;"&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="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;video_url&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="k"&gt;if&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;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;failed&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="n"&gt;r&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;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole surface: chat, image, video, same key.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on pricing (the honest version)
&lt;/h2&gt;

&lt;p&gt;I won't pretend a gateway is magically cheapest across the board — that's rarely true and easy to disprove. From the current published numbers, some models come out clearly ahead of other aggregators (Qwen3.7-Max lands ~45% cheaper, Doubao-Seed-2.0-Lite ~53% cheaper than OpenRouter), some are effectively at parity (DeepSeek-V4-Pro), and a few are more expensive. The real win here isn't a price war — it's &lt;strong&gt;one API for text + image + video across every major Chinese lab&lt;/strong&gt;, which the text-only aggregators don't cover. Always check live numbers before you commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live playground (no signup needed to poke around): &lt;a href="https://aiapi-pro.com/playground" rel="noopener noreferrer"&gt;https://aiapi-pro.com/playground&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Runnable examples (Python / Node / curl), MIT-licensed: &lt;a href="https://github.com/vvvvking/novai-examples" rel="noopener noreferrer"&gt;https://github.com/vvvvking/novai-examples&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New keys get $2 in free credit, no credit card: &lt;a href="https://aiapi-pro.com" rel="noopener noreferrer"&gt;https://aiapi-pro.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're already writing OpenAI-compatible code, adding Chinese text/image/video models is a &lt;code&gt;base_url&lt;/code&gt; change away. Happy building.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I work on NovAI, the gateway used in the examples. Written with AI assistance for drafting; all code was verified against the live API.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
