Skip to main content

Trufo

Open-source library to simplify interactions with the Trufo Provenance Service (TPS).

The Trufo Provenance Platform is under active development, with new provenance features and product workflows being added regularly. If you are building against the platform and have questions about the right integration path, please contact support@trufo.ai. We are happy to help.

Install

pip install trufo

Sign a File

With a c2pa-sign-test API key from app.trufo.ai (see the Auth Quickstart):

from pathlib import Path

from trufo import sign_c2pa_test
from trufo.util.credentials import TrufoApiKey, load_api_key

api_key = load_api_key(TrufoApiKey.C2PA_SIGN_TEST)

signed_bytes = sign_c2pa_test(api_key, Path("input.jpg").read_bytes())
Path("signed.jpg").write_bytes(signed_bytes)

That is a complete C2PA signature — Trufo assembles and signs the manifest, so you need no certificate of your own. Swap in sign_c2pa() with a c2pa-sign-prod key for production-trusted output. See the Signing Quickstart.

What You Can Do

  • Sign C2PA manifests — hosted, or distributed so media never leaves your machine
  • Label AI-generated content with C2PA AI disclosures
  • Stamp organization identity and metadata via CAWG
  • Embed and recover watermarks that survive manifest stripping, with Trufo signing or your own
  • Manage your content records — look up, list, and switch off the marks you keep resolvable (content records)
  • Declare source assets, or redact from provenance history (ingredients)
  • Enrol your own C2PA certificates for a generator product (CSRs)

Optional Local Engine

When using the standard C2PA Signing API, the raw digital media content is sent to the Trufo server for processing. In cases where data privacy is important or where the content file is large, a distributed API is available where media processing — including watermark embedding — is local (and signing is remote, on Trufo servers). Two local-engine tiers are available:

# distributed C2PA signing only — lightweight, no watermark engine
pip install "trufo[local-sign-only]"

# distributed signing + local watermark embedding — adds trufo-pawprint
# and its ML dependencies (torch; a substantially heavier install)
pip install "trufo[local-full]"

Pick local-sign-only unless you need watermarking in distributed signing: the watermark engine's dependencies are heavy (PyTorch), and a local-sign-only installation signs normally — but a watermark request without the engine always fails with an install hint (see the Watermarking Quickstart). The legacy provenance extra is an alias of local-sign-only.

Note: the local-engine installation currently requires Linux on x86_64 (glibc 2.28+) with CPython 3.12 — the trufo-provenance native wheel is published only as cp312-manylinux_2_28_x86_64. The base trufo package is pure Python and runs on any platform with Python 3.10+.

Private Package Index

New releases of trufo-provenance and trufo-pawprint are distributed through Trufo's private package index at packages.trufo.ai rather than public PyPI. Installing the local-sign-only (or local-full) extra requires an sdk-download API key, created at app.trufo.ai/settings/org under API Keys (requires an active C2PA Signing or Watermark API plan).

Store the key in ~/.netrc rather than in the index URL. pip sends it as an HTTP basic-auth credential either way, but a URL-embedded key also lands in your shell history, the process list, and pip and CI logs:

cat >> ~/.netrc <<'EOF'
machine packages.trufo.ai
  login __token__
  password <your-sdk-download-key>
EOF
chmod 600 ~/.netrc

The literal __token__ goes in the login field and the key in the password field — the same convention PyPI uses. Keep that order: a Trufo API key contains a colon, which is also the separator in an HTTP basic-auth credential, so putting the key in the login field makes it ambiguous to parse.

Then point pip at the index — no credential in the URL — and install normally:

export PIP_EXTRA_INDEX_URL="https://packages.trufo.ai/simple/"
pip install "trufo[local-sign-only]"   # or "trufo[local-full]"

In CI, write the ~/.netrc from your secret store as a build step instead of committing it or exporting the key into the environment.

The trufo package itself resolves from public PyPI; only the engine packages come from the private index. Treat the key like any other credential: keep it out of committed lockfiles and logs, and revoke it from the dashboard if it is exposed.

Workflow Examples (Quickstart)

There are a number of documents to get you started quickly with specific use cases:

# Use case Quickstart
0 Setup — install and credentials 0_setup.md
1 Certificates (your own signer) 1_certs.md
2 C2PA signing 2_c2pa_signing.md
3 AI labeling 3_ai_labeling.md
4 Organization stamping (CAWG) 4_cawg_publish.md
5 Ingredients & redaction 5_ingredients.md
6 Watermarking & recovery 6_watermarking.md

Most integrations need only 0 and 2; quickstart 1 is for teams that operate their own C2PA generator product and sign with their own certificates.

Reference Documentation

The full reference documentation is spread across the following files:

Document Covers
docs/api/api_trufo.md Accounts, organizations, MFA, API keys and scopes, Organization Validation, errors, regions
docs/api/api_c2pa.md C2PA signing (hosted, S3, distributed), actions and assertions, standalone binding, watermark recovery, content records, assertion records
docs/api/media_format_support.md C2PA and watermark format support, codecs, image and track restrictions
docs/api/api_certs.md Certificate enrollment (EST), OCSP, timestamping, and the Registration Authority
docs/cli.md CLI credential management

Metadata

Release files for trufo 1.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for trufo 1.5.3
File Size Uploaded
trufo-1.5.3.tar.gz 48.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trufo 1.5.3
File Interpreter ABI Platform
trufo-1.5.3-py3-none-any.whl Python 3 none any Details

Total release size: 109.8 kB

Release files / trufo-1.5.3.tar.gz

Download URL trufo-1.5.3.tar.gz
Size 48.4 kB
Tags Source
SHA-256 checksum
How to use checksums
719912c284c50422699ca4c4514579a47f6e1f4f0ddfd130a790d1e08a89bd54
BLAKE2b-256 checksum
How to use checksums
f2ec82000e4dfdea33e25f00cc212a4e6167d41ddb5b9562097b15879b527d46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / trufo-1.5.3-py3-none-any.whl

Download URL trufo-1.5.3-py3-none-any.whl
Size 61.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
58df51163a7c946dc2b9ecfd79d4ddcc5102fd92e6339232bb2a110bef6f00ed
BLAKE2b-256 checksum
How to use checksums
0a5ca6c87bd8a47f77b2f3c1fc18446fbea74d4cd27883124a5c655675fbc4cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release history Release notifications | RSS feed

1.5.4

2 release files

This release

1.5.3 This release

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page