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.

A trim can change the bytes of a file, and a watermark or manifest can depend on those bytes. C2PA 2.3 includes a soft_binding_assertion, and its spec page defines an invisible watermark as imperceptible information that can identify the asset or reference a manifest. What a given trim leaves intact is something to test on your own files, not assume.
Two trim modes on Sume
The Sume video trim docs describe precision. The default exact is a frame-accurate re-encode with libx264 and yuv420p. keyframe is a stream copy where the cut may start a GOP early, so you re-base against actual_start_seconds. Both return a new MP4 artifact; the source is untouched.
| Mode | Method | Output |
|---|---|---|
| exact (default) | Re-encode, libx264, yuv420p | New MP4, frame-accurate |
| keyframe | Stream copy | New MP4, may start a GOP early |
What the docs do not say
Neither the trim page nor the C2PA pages I read says whether a given watermark survives either mode. A stream copy keeps the compressed frames, a re-encode makes new ones. That is general video behavior, not a claim from a vendor page, so treat it as a hypothesis to test.
A test you can run
Take one clip with the marker you care about. Trim it once with exact and once with keyframe. Run your detector or manifest reader on both outputs and on the source, and write down the result per mode.
Each trim is $0.02 per job, so the test costs four cents. The result tells you which mode to use before a launch.
- Keep the source artifact; trim never changes it.
- Check
actual_start_secondson keyframe outputs. - Record the mode you used with the job id.
Sources
Related posts
More in Developers
- 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 queued Sume jobs on SIGTERM during a deploy
On shutdown, cancel jobs you no longer need before they start and leave started ones alone. A 21-line Node handler using POST /v1/jobs/{id}/cancel.
- Check a video request against /v1/videos/models before you submit
Duration, resolution, size and seed errors cost a round trip. A short Python validator reads the model catalog and refuses a bad request locally first.
- Check a transparent GPT Image 2.5 PNG for real alpha in Python
A transparent GPT Image 2.5 result can still look opaque. Ask for background transparent as PNG, then check the alpha channel in Python: a 20-line script.
Written by Sume