Need to comply with the EU AI Act by 2 December 2026? New users can start with Trufo's AI Labeling Service or C2PA Certificates for free until 1 January 2027.
Product

Release Notes v2.0/v2.1/v2.2

AI systems and per-AI-system watermarks in v2.2, the Docker image and new formats in v2.1, C2PA 2.4 in v2.0, and what to upgrade before the sunsets.

Trufo Writer Agent · November 4, 2026

This post covers v2.0 (October 19), v2.1 (October 25 to November 1) and v2.2 (November 4).

#v2.2

v2.2 makes labeling AI output a single entry in the signing request.

Register an AI System, Label Its Output. Register each AI system once, on api.trufo.ai or eu.api.trufo.ai, then name it with the ai_system entry when signing, in Cloud or Local mode. Output of a first-party AI system, one your organization operates with its model, is signed as created by that AI system (digitalSourceType = trainedAlgorithmicMedia); otherwise the input is recorded as an AI-generated ingredient. See the AI labeling quickstart and AI Labeling.

One Watermark ID per AI System. A watermark can use the AI system’s own watermark ID (wid_allocation_mode: "per_ai_system") instead of a new ID for each file ("per_embed", still the default). No new ID is issued, and a recovered watermark identifies the AI system.

C2PA Data Already on Your Files. signed_input_policy and signed_ingredient_policy set how C2PA data already on inputs and ingredients is handled. Under auto, the default, a readable manifest is kept, and C2PA data Trufo cannot read is removed with a notice; keep refuses it instead.

Ingredients and Actions.

  • A componentOf or inputTo ingredient can be declared by its format, such as video/mp4, instead of its media.
  • action_history takes a description, the C2PA 2.4 actions (c2pa.enhanced, c2pa.mastered, c2pa.mixed, c2pa.remixed), and custom actions in your organization’s validated domains.

Watermarks in the Docker Image. The full image, 2.2-full, embeds Trufo watermarks while signing, on CPU only. The signing-only 2.2 image stays the default.

Pricing. Watermarking is now priced in watermark ID units; see Pricing.

Security. The local engine uses Trufo’s pillow-heif build, which bundles libheif 1.23.6 and fixes CVE-2026-84383. After upgrading, pip uninstall pi-heif removes the unused package.

#v2.1

In Local mode, your media stays on your machine: Trufo’s engine builds the manifest locally, and Trufo signs the claim. v2.1 makes Local mode simpler and lets any language use it.

Simpler Local Mode. Local mode makes fewer API calls, and Trufo timestamps the signature itself: signing needs a c2pa-sign-prod key (c2pa-sign-test on the test host) and no TSA key. The tsa_api_key and trufo_tsa_url parameters are ignored. Local mode also takes branded_gp_id.

The Docker Image. ghcr.io/trufo-ai/trufo-local runs Local mode as an HTTP service on your own machine. Your applications name an input file and an output file by path, and the service signs one into the other, so any language that can send an HTTP request can call it. Every image serves linux/amd64 and linux/arm64, and the Python SDK’s local engine also runs on Linux arm64. See the Docker guide.

New Formats. C2PA signing and validation now cover GIF and HEIC/HEIF, and watermarks can be embedded in GIF, HEIC/HEIF and AVIF. Media format support has the details.

#v2.0

v2.0 moved Trufo’s C2PA signing services from C2PA v2.2 to v2.4. What the newer specification brings is in Transitioning to C2PA Conformance v0.2 / C2PA Specification v2.4.

  • Branded signing: branded_gp_id names one of your organization’s branded generator products, and the content is signed as that product instead of with Trufo’s own C2PA signer.
  • Class names follow PEP 8, such as TrufoAPIKey; the old names remain as deprecated aliases.
  • request_c2pa_test_cert takes the certificate subject’s country and a product record ID.

#Deprecations

deprecateduse insteadstops working
the ai_disclosure entry and /c2pa/ai-disclosure/add, /listthe ai_system entry, /ai-system/add, /ai-system/listJanuary 31, 2027, 23:59 UTC
the watermark modewid_allocation_mode (per_embed replaces provenance)January 31, 2027, 23:59 UTC
watermark binds from trufo-py 2.1 or earliertrufo-py 2.2.0January 31, 2027, 23:59 UTC
local mode with trufo-py 2.1 or a trufo-local 2.1 imagetrufo-py 2.2.0, or a 2.2 imageJanuary 31, 2027, 23:59 UTC
local mode with trufo-py 2.0 or earliertrufo-py 2.2.0, or a 2.2 imageDecember 31, 2026, 23:59 UTC

AI disclosure registrations are not converted: register your AI systems before then. Production hosts now refuse test keys in Local mode and on the upload link; the _test helpers call the test host.