C2PA regions of interest: mark only the AI segment of a video
The C2PA implementation guide covers regions of interest for audio and video segments, and the 2.3 spec allows time ranges. What that enables for mixed footage.

Yes, C2PA can point at a part of a video instead of the whole file. The implementation guide lists Regions of Interest for audio and video segments as one of its five areas, and the 2.3 specification page says regions can use RFC 3339 time ranges. That suits a cut with real footage plus a few generated shots.
Why it matters for mixed cuts
Most real edits are not all-AI. A product demo may be camera footage with two generated B-roll shots. A single label for the whole file overstates or understates. A region lets a claim apply to the seconds where it is true.
| Item | Source says |
|---|---|
| Applies to | Audio and video segments |
| Time format | RFC 3339 time ranges (2.3 spec) |
| Listed in | C2PA implementation guide, five areas |
Keep the timeline you need
To mark a region later you need to know where each generated shot sits. Sume Timeline 1.0 takes video[] slots with a declared start and duration, and the docs say declared starts are authoritative. Keep that timeline JSON, and you can list which seconds were generated.
Timeline 1.0 is $0.10 per ceil(output minute). A 95-second render bills 2 minutes, so $0.20. See Timeline 1.0.
Caveat
The Sume docs do not say Sume writes a manifest or regions. This is a record-keeping method on your side, and any signer you use must support the fields.
Sources
Related posts
More in Developers
- C2PA soft binding and watermarks: what a trim or re-encode does
The C2PA 2.3 spec defines soft binding for invisible watermarks. Sume's trim has exact re-encode and keyframe copy modes; here is what to verify after each.
- Can polling Sume job status hit the rate limit? Read budget math
Reads and writes have separate Sume budgets. Worked numbers for polling every accepted job per plan, plus a delay function that reads ratelimit headers.
- Cancel an image job: it only works before generation starts
POST /v1/jobs/{id}/cancel succeeds only while a Sume job has not started generating. Here is the 409 you get otherwise, and what is billed after a cancel.
- Cancel a completed job: 409 job_not_cancelable vs already started
Sume returns 409 job_not_cancelable when you cancel a finished job, and job_generation_already_started mid-run. How to tell them apart and handle each.
Written by Sume