DEV Community

Cover image for How to remove the "AI-generated" label from your TikTok videos (CapCut fix)
Sebastian Balog
Sebastian Balog

Posted on

How to remove the "AI-generated" label from your TikTok videos (CapCut fix)

Quick fix: TikTok reads AI metadata inside the MP4, not your footage. Delete the labelled post, strip the metadata from your original export with one ffmpeg command (below, no re-encoding) or with MetaClean, and repost the clean copy with the AI-generated content switch off.

Here's why it happens, how to see it in your own files, and how to prove the fix didn't touch quality.

Why your real video got labelled

You film something yourself, add one AI effect in CapCut, export, post, and TikTok puts "AI-generated" on it. The footage is yours. The label disagrees.

Like Instagram's "AI info", TikTok's automatic label is mostly a metadata decision. TikTok has said it reads Content Credentials (C2PA) to label AI content automatically, and editing apps write AI markers into the files they export after an AI feature is used. So the useful question isn't "what does the video look like?" but "what does the MP4 say about itself?"

Where the label comes from

TikTok adds "AI-generated" in two ways:

  1. You switch it on in the post settings ("AI-generated content").
  2. Automatically, when the uploaded file carries AI metadata.

The second one is the surprise. Typical sources:

App or feature What you did What ends up in the file
CapCut AI features AI effects, enhancements, generated elements AI metadata in the export
Premiere Pro Generative Extend Stretched a clip by a few frames C2PA Content Credentials
AI video generators B-roll, backgrounds, intros C2PA Content Credentials
AI upscalers / enhancers Sharpen, stabilise, upscale C2PA or IPTC, depending on the app

One AI touch is enough for the whole video, because the note describes the file, not the frame.

Look inside the MP4

An MP4 is a tree of boxes (atoms). Regular metadata lives in moov/udta and meta; a C2PA manifest is stored as its own JUMBF payload in a top-level uuid box, next to the audio and video data rather than inside it. That's why the usual "Properties → Details" view doesn't show it.

Dump everything ExifTool can see, grouped by where it lives:

exiftool -a -G1 -s clip.mp4
Enter fullscreen mode Exit fullscreen mode

Look for the encoder and creation tool (Encoder, Software, HandlerVendorID), any XMP block, and anything mentioning AI, AIGC or C2PA:

exiftool -a -G1 -s clip.mp4 | grep -iE 'c2pa|jumd|aigc|digitalsource|encoder|software'
Enter fullscreen mode Exit fullscreen mode

For the signed manifest itself, the official c2patool reads MP4 and MOV directly:

c2patool clip.mp4
# prints the manifest: claim generator, actions, digitalSourceType...
# or "No claim found" if there is none
Enter fullscreen mode Exit fullscreen mode

And while you're in there, check the stuff you probably didn't mean to share: phones write a recording location and the device model into the udta atoms.

exiftool -GPSCoordinates -Model -Make -CreationDate clip.mp4
Enter fullscreen mode Exit fullscreen mode

Removing it without re-encoding

Re-exporting the video to "shake off" metadata costs quality and often writes the same markers again. The clean way is a remux: copy the existing video and audio streams into a new container and leave the metadata boxes behind.

ffmpeg -i clip.mp4 -map 0 -c copy -map_metadata -1 -movflags +faststart clean.mp4
Enter fullscreen mode Exit fullscreen mode
  • -c copy means no decoding and no re-encoding: same frames, same bitrate.
  • -map_metadata -1 drops the global metadata (including the location and device atoms).
  • The C2PA uuid box isn't carried over by the remux.
  • +faststart moves the index to the front, which upload pipelines like.

Then prove it, because a clean-looking command isn't proof:

c2patool clean.mp4                    # should say: No claim found
exiftool -a -G1 -s clean.mp4 | grep -iE 'c2pa|jumd|aigc|gps'   # should print nothing

# and the streams are bit-for-bit identical:
ffmpeg -loglevel error -i clip.mp4  -map 0 -c copy -f streamhash -hash sha256 -
ffmpeg -loglevel error -i clean.mp4 -map 0 -c copy -f streamhash -hash sha256 -
Enter fullscreen mode Exit fullscreen mode

If the two streamhash outputs match, the picture and sound are exactly what you exported.

Then repost: delete the labelled post (copy the caption and note the sound first), upload clean.mp4, and leave the AI-generated content switch off.

If you export from CapCut every day

Doing this per clip gets old fast. I built MetaClean for that: a Mac and Windows app that shows every piece of metadata in a video (or photo) in plain words, removes the AI markers, or location and device details too, and saves a verified clean_ copy next to the original, using the same stream-copy approach as above. Its Watch Folders mode sits on your CapCut export folder (subfolders included) and only pops up when a new export actually carries AI metadata: one click and the clean copy is ready to post. Everything runs locally; nothing is uploaded. 3-day free trial, then $5 once.

Disclosure: I'm the developer of MetaClean.

TL;DR

  • TikTok's automatic "AI-generated" label is read from the file's metadata, including C2PA Content Credentials.
  • See it: c2patool clip.mp4 and exiftool -a -G1 -s clip.mp4.
  • Remove it without touching quality: ffmpeg -i clip.mp4 -map 0 -c copy -map_metadata -1 clean.mp4, then verify with c2patool and streamhash.
  • Full TikTok walkthrough: How to remove the AI-generated label on TikTok.

Top comments (0)