run58669-maker/proofframe

Human-reviewed provenance for AI-generated media — Backblaze Generative Media Hackathon

0

stars

1

commits

Python

primary language

Jul 28, 2026

updated

README

ProofFrame

ProofFrame turns AI-generated media into reviewable evidence. Each generation produces a Genblaze provenance manifest, a SHA-256 fingerprint, an append-only human decision record, and a verification bundle designed for durable storage in Backblaze B2.

Why it exists

Creative teams can generate media quickly, but they still struggle to answer:

  • Which provider, model, prompt, and parameters produced this file?
  • Has the media changed since generation?
  • Did a human approve this exact version?
  • Can a reviewer verify the evidence without trusting the app UI?

ProofFrame makes those answers portable and independently verifiable.

Run locally (no API keys)

py -V:Astral/CPython3.11.15 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[test]"
.\.venv\Scripts\python.exe -m uvicorn app.main:app --reload --port 8080

Open http://127.0.0.1:8080. Mock mode still executes a real Genblaze pipeline with its offline provider and marks every run as mock in the UI.

Real Genblaze + Backblaze B2 mode

Install both supported provider adapters:

.\.venv\Scripts\python.exe -m pip install -e ".[real,test]"

GMI Cloud configuration:

$env:PROOFFRAME_MODE = "real"
$env:PROOFFRAME_PROVIDER = "gmicloud"
$env:GMI_API_KEY = "..."
$env:B2_KEY_ID = "..."
$env:B2_APP_KEY = "..."
$env:B2_BUCKET = "..."
$env:B2_REGION = "us-east-005"
.\.venv\Scripts\python.exe -m uvicorn app.main:app --port 8080

Google Vertex AI fallback configuration:

gcloud auth application-default login
$env:PROOFFRAME_MODE = "real"
$env:PROOFFRAME_PROVIDER = "google-vertex"
$env:GOOGLE_CLOUD_PROJECT = "your-project-id"
$env:GOOGLE_CLOUD_LOCATION = "global"
$env:B2_KEY_ID = "..."
$env:B2_APP_KEY = "..."
$env:B2_BUCKET = "..."
$env:B2_REGION = "us-east-005"
.\start.bat

The Google fallback defaults to the GA Agent Platform model gemini-3.1-flash-lite-image on the global endpoint. The adapter remains a Genblaze SyncProvider, so generation provenance and the B2 sink stay inside the same pipeline. Application Default Credentials stay outside the repository, and no Google secret is written to ProofFrame data or trust bundles. Generated staging files use the system temporary directory so Genblaze's local-file allowlist can safely transfer them to B2.

In real mode, Genblaze orchestrates generation and its ObjectStorageSink persists the generated asset and canonical manifest to Backblaze B2 using a content-addressable key layout. The bucket remains private. Reviewers receive a stable ProofFrame asset route; the server streams the object from B2 with a bucket-scoped key, so neither B2 credentials nor expiring signed URLs reach the browser or trust bundle.

See docs/HOSTING.md for the production launcher and tunnel handoff.

For this machine, start_real.bat loads the ignored local B2 and GCP metadata at runtime and starts the server in real mode without embedding credentials in tracked files. Validate the local configuration without starting a server:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\start_real.ps1 -ValidateOnly

Test

.\.venv\Scripts\python.exe -m pytest

Verify a downloaded bundle independently

The verifier reads only the JSON bundle and the media file. It does not need a running ProofFrame server or a storage account:

.\.venv\Scripts\python.exe scripts\verify_bundle.py bundle.json media.png

It returns exit code 0 only when the bundle, Genblaze manifest, review chain, approval decision, and exact artifact bytes all verify.

Trust boundary

Mock output is for local development only and is visibly labeled. A bundle is considered release-ready only when the asset hash verifies and a human has approved that exact hash. Credentials are never written into the bundle.

Contributors

run58669-maker/proofframe

Human-reviewed provenance for AI-generated media — Backblaze Generative Media Hackathon

0

stars

1

commits

Python

primary language

Jul 28, 2026

updated

README

ProofFrame

ProofFrame turns AI-generated media into reviewable evidence. Each generation produces a Genblaze provenance manifest, a SHA-256 fingerprint, an append-only human decision record, and a verification bundle designed for durable storage in Backblaze B2.

Why it exists

Creative teams can generate media quickly, but they still struggle to answer:

  • Which provider, model, prompt, and parameters produced this file?
  • Has the media changed since generation?
  • Did a human approve this exact version?
  • Can a reviewer verify the evidence without trusting the app UI?

ProofFrame makes those answers portable and independently verifiable.

Run locally (no API keys)

py -V:Astral/CPython3.11.15 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[test]"
.\.venv\Scripts\python.exe -m uvicorn app.main:app --reload --port 8080

Open http://127.0.0.1:8080. Mock mode still executes a real Genblaze pipeline with its offline provider and marks every run as mock in the UI.

Real Genblaze + Backblaze B2 mode

Install both supported provider adapters:

.\.venv\Scripts\python.exe -m pip install -e ".[real,test]"

GMI Cloud configuration:

$env:PROOFFRAME_MODE = "real"
$env:PROOFFRAME_PROVIDER = "gmicloud"
$env:GMI_API_KEY = "..."
$env:B2_KEY_ID = "..."
$env:B2_APP_KEY = "..."
$env:B2_BUCKET = "..."
$env:B2_REGION = "us-east-005"
.\.venv\Scripts\python.exe -m uvicorn app.main:app --port 8080

Google Vertex AI fallback configuration:

gcloud auth application-default login
$env:PROOFFRAME_MODE = "real"
$env:PROOFFRAME_PROVIDER = "google-vertex"
$env:GOOGLE_CLOUD_PROJECT = "your-project-id"
$env:GOOGLE_CLOUD_LOCATION = "global"
$env:B2_KEY_ID = "..."
$env:B2_APP_KEY = "..."
$env:B2_BUCKET = "..."
$env:B2_REGION = "us-east-005"
.\start.bat

The Google fallback defaults to the GA Agent Platform model gemini-3.1-flash-lite-image on the global endpoint. The adapter remains a Genblaze SyncProvider, so generation provenance and the B2 sink stay inside the same pipeline. Application Default Credentials stay outside the repository, and no Google secret is written to ProofFrame data or trust bundles. Generated staging files use the system temporary directory so Genblaze's local-file allowlist can safely transfer them to B2.

In real mode, Genblaze orchestrates generation and its ObjectStorageSink persists the generated asset and canonical manifest to Backblaze B2 using a content-addressable key layout. The bucket remains private. Reviewers receive a stable ProofFrame asset route; the server streams the object from B2 with a bucket-scoped key, so neither B2 credentials nor expiring signed URLs reach the browser or trust bundle.

See docs/HOSTING.md for the production launcher and tunnel handoff.

For this machine, start_real.bat loads the ignored local B2 and GCP metadata at runtime and starts the server in real mode without embedding credentials in tracked files. Validate the local configuration without starting a server:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\start_real.ps1 -ValidateOnly

Test

.\.venv\Scripts\python.exe -m pytest

Verify a downloaded bundle independently

The verifier reads only the JSON bundle and the media file. It does not need a running ProofFrame server or a storage account:

.\.venv\Scripts\python.exe scripts\verify_bundle.py bundle.json media.png

It returns exit code 0 only when the bundle, Genblaze manifest, review chain, approval decision, and exact artifact bytes all verify.

Trust boundary

Mock output is for local development only and is visibly labeled. A bundle is considered release-ready only when the asset hash verifies and a human has approved that exact hash. Credentials are never written into the bundle.

Contributors

Languages

Python

80.3%

PowerShell

8.4%

JavaScript

5.2%

HTML

4.9%

Batchfile

1.3%