AI Content Detection

Inbound-asset provenance detector. Counterpart to the outbound b.contentCredentials seal path: the operator extracts whatever provenance metadata their format-specific muxer surfaces (C2PA-COSE envelope from JPEG XMP / PNG iTXt / MP4 boxes, CAC implicit-label JSON from the embedded metadata block, IPTC digitalSourceType when an IPTC PhotoMetadata reader is wired), feeds them to report({...}), and renders the normalized result in their user-facing UI. California AB-853 §22757.21 requires the disclosure; the framework owns the validation + trust-list anchor layer, the application owns the rendering.

Trust-list anchored: the operator declares which signer subjects are acceptable. Default trust list is empty — the framework does not ship a curated CA list. Operators that want a one-line ramp point at the public C2PA Trust List per https://opensource.contentauthenticity.org/docs/trust-list.

Posture vocabulary: strict (refuse on signature invalid, refuse on signer not on trust list), balanced (refuse on cryptographic tamper, audit-only on missing provenance), permissive (audit-only across the board). Default balanced.

IPTC digitalSourceType PhotoMetadata reading is forward-watch — the framework ships no XMP / EXIF parser yet, so operators that want IPTC detection pre-parse with their tool of choice and pass the field via opts.ipmd. AB-853 names C2PA as "widely adopted". A built-in IPTC PhotoMetadata reader is deferred pending a vendoring decision for an XMP/EXIF parser; the opts.ipmd escape hatch covers the gap until then.

b.ai.aiContentDetect.report(opts) #

stable0.10.8ca-ab-853ca-sb-942eu-ai-act-art-50cac-genai-labelnist-ai-600-1iso-42001iso-23894nist-ai-rmf
{
  c2paEnvelope:       object,         // { manifest, signature } from operator's C2PA extractor
  c2paPublicKeyPem:   string,         // PEM for verify (operator-pinned signer key)
  cacImplicitLabel:   Buffer|string|object, // GB 45438-2025 implicit metadata block
  ipmd:               object,         // IPTC PhotoMetadata digitalSourceType field (operator-pre-parsed)
  trustList:          string[],       // acceptable signer subject identifiers
  profile:            "strict"|"balanced"|"permissive",
  posture:            string,         // pins profile per posture vocabulary
}

Build a normalized provenanceReport from the provenance artifacts an operator's muxer extracted from an inbound asset. At least one of c2paEnvelope, cacImplicitLabel, or ipmd must be supplied; absence of all three returns kind: "none" with verified: false.

var report = b.ai.aiContentDetect.report({
  c2paEnvelope: env, c2paPublicKeyPem: pem,
  trustList: ["CN=Acme AI, O=Acme, C=US"],
  posture: "ca-ab-853",
});
report.kind;     // → "c2pa"
report.verified; // → true if signature OK and signer on trustList

b.ai.aiContentDetect.compliancePosture(posture) #

stable0.10.8

Return the effective profile name (strict / balanced / permissive) for a compliance posture, or null for unknown posture names. Operators introspect the cascade before wiring default-on paths.

b.ai.aiContentDetect.compliancePosture("ca-ab-853"); // → "strict"

Last updated 2026-08-08T16:39:49.652Z by seeder.