Signet
Tagline
The provenance and compliance layer for AI media: every asset your team generates, proven and made legally disclosable, on storage that can't be forged. It lives on Backblaze B2.
Inspiration
On August 2, 2026, the EU AI Act (Article 50) and California's SB 942 both take effect. Businesses must now disclose AI-generated content and be able to prove how it was made. Yet there's no system of record for the AI media a company creates itself: images, video, and voice are generated across a dozen tools and land in shared drives, unlabeled and unattributable. Adobe only tracks its own outputs; deepfake detectors just guess. We built the neutral, cross-tool record that the new laws quietly assume already exists.
What it does
Signet turns every AI generation into a tamper-evident, legally disclosable record through four steps. Generate media through a multi-provider Genblaze pipeline (with automatic fallback when a model fails). Seal it: Signet fingerprints the exact bytes (SHA-256), writes a full provenance manifest, signs it with a detached Ed25519 signature, and stores it under Backblaze B2 Object Lock so it can never be altered or deleted. Prove it: re-fingerprinting instantly detects tampering (change one pixel and the seal breaks), and because the record is signed and WORM-locked, anyone can independently verify it. Comply: Signet maps each record to the specific obligations of the EU AI Act and CA SB 942 and generates an audit-ready certificate.
Two surfaces make it real-world usable. A Chrome extension seals media at the source: right-click any AI image on any site and it's captured, signed, and stored before it can be altered. And a public, no-login Verify page runs two independent checks on any image you drop in: a perceptual-hash match against the sealed registry (which survives screenshots and re-encoding), plus a direct read of any embedded C2PA Content Credential, so a credentialed image resolves even if Signet never sealed it.
How we use Backblaze B2
B2 isn't storage bolted on; it's the trust substrate the whole product depends on. Every signed manifest and its detached-signature sidecar are written under Object Lock in COMPLIANCE (WORM) mode, so the exact signed version cannot be overwritten or deleted by anyone, including the account owner, until retention expires. We store objects with content-addressable keys (SHA-256 to path), and serve all media through a backend /storage proxy so the bucket stays fully private with no presigned-URL sprawl. Signet also maintains an RFC 6962 Merkle transparency log whose signed checkpoints are persisted to B2, giving inclusion proofs over the whole ledger.
Critically, we validated this against a real B2 bucket, not a mock, and in doing so found and fixed a real bug: our WORM guarantee originally only held in local emulation, because B2 Object Lock is version-scoped (a plain overwrite adds a new version rather than being refused). We corrected the logic to read true lock state and to demonstrate immutability by attempting to delete the locked version, which B2 refuses with AccessDenied. The immutability claim is now verifiably true on live infrastructure.
How we use Genblaze
Genblaze is our generation and provenance engine. We use its Pipeline/Step API to orchestrate multi-provider, multi-modal workflows (e.g., image to video chains), running real GMI Cloud models end-to-end. When a provider times out or rate-limits mid-run, Signet performs a live fallback to a backup model and records the failure honestly in the provenance trail, so the manifest reflects what actually happened rather than an idealized path. We then bridge each Genblaze provenance manifest into a signed C2PA Content Credential embedded in the media file, so the proof travels with the asset anywhere it goes.
Providers and models used
- GMI Cloud: Seedream (image), FLUX.2 (image), Kling (video), MiniMax TTS and MiniMax Music (audio).
- Source labels auto-detected by the extension when sealing at the source: OpenAI / DALL·E, OpenAI Sora, Midjourney, Adobe Firefly, Runway, Leonardo, Krea, Ideogram, Stability.
How we built it
- Backend: Python + FastAPI, with an MCP server mounted via FastMCP so agents can seal and verify programmatically.
- Generation: Genblaze SDK to GMI Cloud providers, with fallback orchestration.
- Provenance and trust:
c2pa-pythonfor Content Credentials, Ed25519 detached-JWS manifest signatures, an RFC 6962 Merkle transparency log, and PDQ perceptual hashing for re-encode-resilient recovery. - Storage: boto3 to Backblaze B2 (S3-compatible) with Object Lock.
- Frontend: a dependency-free vanilla SPA with a hand-written WebGL backdrop; a Chrome MV3 extension for seal-at-source; a Typer CLI for scripting.
- Production readiness: 34 automated tests with GitHub Actions CI, and a gated (password-protected) one-click Render deployment.
What's next
- Swap the C2PA self-signed test certificate for a trust-listed production certificate, so credentials show as trusted in public verifiers.
- SOC2-style audit exports: batch compliance reports and transparency-log proofs for legal and audit teams.
- More generation providers and modalities, and a hosted multi-tenant offering.
Log in or sign up for Devpost to join the conversation.