Burned-in captions and YouTube AI disclosure: captions are exempt

YouTube's disclosure page names caption creation among edits that need no altered-content label. What that covers when Sume burns captions into a Short.

4 min readSume
All posts

If a Short is real footage and the only edit is captions, the disclosure question is short. YouTube's page on altered or synthetic content lists "caption creation" next to beauty filters, color adjustment, and special effects filters as edits that do not need disclosure.

What Sume does to the frame

The video captions API takes a public HTTPS video URL and returns a captioned video. It burns text on top of the frame. With cues, you author the text and timings yourself and no speech-to-text runs. Without cues, script_text, or words, speech-to-text finds the words, but only when the clip has audible speech. A silent clip fails with caption_no_speech.

Limit of the exemption

The exemption is for the caption step. It does not cover what is underneath. If the footage under the captions is a realistic scene that did not happen, or makes a real person appear to say something they did not, the page lists those separately as needing disclosure.

read 2026-10-05
EditOn YouTube's list of no-disclosure edits
Burned-in captionsYes (caption creation)
Color adjustmentYes
Special effects filtersYes
Footage that alters a real event or placeNo, disclose

Request

A minimal caption job with authored text. Set SUME_API_KEY first.

import json, os, urllib.request

body = {
    "video_url": "https://media.sume.com/artifacts/example/clean.mp4",
    "style": "black-outline",
    "cues": [{"text": "Three steps, no filler", "start": 0.0, "end": 2.5}],
}
req = urllib.request.Request(
    "https://api.sume.com/v1/video-captions",
    data=json.dumps(body).encode(),
    headers={
        "Authorization": "Bearer " + os.environ["SUME_API_KEY"],
        "Content-Type": "application/json",
        "Idempotency-Key": "caption-cues-001",
    },
    method="POST",
)
print(urllib.request.urlopen(req).read().decode())

Sources

Related posts

More in Developers

All Developers posts

Written by Sume