DEV Community

vvvvking
vvvvking

Posted on

We OCR'd every frame from 9 Chinese AI video models. 3 came back clean.

The assumption

Most developers I talk to assume that every Chinese AI model burns a visible AI生成 label into generated content. It's a reasonable assumption — China's labelling regulations (in force since September 2025) require it.

But "required" and "actually visible" turned out to be two different things. So we tested.

What we did

We run NovAI, an API gateway for Chinese AI models. We have 9 media generation models on the platform — 5 image, 4 video. For each one, we:

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

No simulated output. No provider-supplied samples. Everything came from our own API endpoint.

What we found

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

Video models split by provider, not by price tier:

Model Provider Price Visible label?
Seedance 2.0 ByteDance $0.067–$1.00/s ❌ No
Seedance 2.0 Fast ByteDance $0.054–$0.802/s ❌ No
CogVideoX-Flash Zhipu AI Free forever ❌ No
Hunyuan Video 1.5 Tencent $0.21/gen ✅ Yes

Three out of four video models came back clean. The pattern is provider × media type:

  • ByteDance: Labels images (Seedream), does not visibly label videos (Seedance)
  • Tencent: Labels both images and videos
  • Zhipu AI: Labels images (CogView), does not visibly label videos (CogVideoX)

Why this matters

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 all Chinese models label everything. That assumption is wrong, and it's costing developers good options.

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.

CogVideoX-Flash is free forever. 6-second clips. Also clean frames in our test.

Three honest caveats

I want to be careful here, because the internet has a way of stripping nuance:

1. "No visible label" ≠ "no labelling at all." 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.

2. This is upstream behaviour, not ours. Providers can change how they apply labels at any time. If our next scheduled check finds a change, we'll update the watermark notice page.

3. Paying never removes an image label. 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.

Why providers differ

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:

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

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.

The code

If you want to try Seedance 2.0 yourself:

import requests, time

BASE = "https://aiapi-pro.com/v1"
KEY = {"Authorization": "Bearer sk-novai-xxx"}

# Submit a Seedance 2.0 video task
task = requests.post(f"{BASE}/video/generations", headers=KEY, json={
    "model": "doubao-seedance-2.0",
    "prompt": "A drone shot over a neon city at night, cinematic",
    "duration": 5,
    "resolution": "720p",
}).json()

# Poll until done
while True:
    r = requests.get(f"{BASE}/video/generations/{task['id']}", headers=KEY).json()
    if r.get("status") not in ("queued", "processing"):
        break
    time.sleep(5)

print(r.get("content", {}).get("video_url") or r.get("content", {}).get("url"))
Enter fullscreen mode Exit fullscreen mode

Or the free option, CogVideoX-Flash — same code, just change the model name:

task = requests.post(f"{BASE}/video/generations", headers=KEY, json={
    "model": "cogvideox-flash",
    "prompt": "A paper plane gliding over a calm ocean",
}).json()
Enter fullscreen mode Exit fullscreen mode

$2 free credit on signup, no credit card. Register here if you want to test it.

The bigger picture

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.

Our approach: test every model, publish the results with the method and date, and update it on a schedule. The watermark notice page has the full 9-model table, the three caveats, and a FAQ.

Tested, not guessed. That's the standard we're holding ourselves to.


Full per-model watermark table with methodology and FAQ: aiapi-pro.com/watermark-notice. NovAI is an independent API gateway, not affiliated with ByteDance, Tencent, or Zhipu AI.

Top comments (0)