Inspiration

Generative media demos often stop at “here is an image.” Real teams need to know whether an asset matches the brief, how it was generated, what changed during a retry, and where the final media and records will live after the demo ends. Prompt to Proof turns that loose prompt-to-image step into a small, inspectable production workflow.

What it does

A user enters a campaign brief, audience, goal, visual direction, quality threshold, and bounded attempt count. The app then:

  1. converts the brief into a structured creative plan and visible success criteria;
  2. generates a campaign image through a Genblaze pipeline;
  3. uploads the image and canonical Genblaze manifest to a private Backblaze B2 bucket;
  4. reviews the actual rendered image with a vision-capable model;
  5. retries once when the score misses the selected quality threshold; and
  6. returns the final image, quality report, SHA-256, run lineage, and expiring B2 links.

The current sample run scored 86/100. Its local image hash matches the B2-backed Genblaze manifest, and the manifest verifies successfully.

The app opens with that completed run in a judge-ready evidence view. It shows the generated asset, rendered-image review, integrity result, exact five-object B2 session layout, and a downloadable evidence JSON without making another provider or storage request. A separate, prefilled live-pipeline tab lets judges run a fresh campaign, while an architecture tab makes each handoff and production boundary visible.

A recipient-side verifier makes the provenance portable instead of merely decorative. A creative team can upload the exported evidence JSON, original image, and canonical Genblaze manifest, then independently verify the exact media SHA-256, canonical manifest hash, and shared B2 run prefix without trusting the generator or making another model or storage request. The real sample is preloaded, so judges can exercise this workflow in one click and can see a modified file fail closed.

How we built it

The interface is a Python Gradio app. genblaze_openai.chat() produces strict Pydantic planning and review objects using Azure OpenAI gpt-5-mini. Genblaze's DalleProvider generates images with Azure OpenAI gpt-image-1-mini. A Genblaze Pipeline and ObjectStorageSink upload every asset and canonical manifest to Backblaze B2 through its S3-compatible API.

B2 also stores the creative plan, each evaluation, and the final session index under a stable session prefix. The bucket stays private; the UI creates one-hour object-scoped signed reads and never writes signed URLs into manifests. A recovery path can resume after an interruption by matching the local image's SHA-256 to the B2 manifest, completing only the missing stages instead of paying to regenerate the image.

The judge-facing app runs behind an authenticated Cloudflare Tunnel at an unlinked subdomain. The origin remains bound to localhost, the generation endpoint is not exposed as a named API, and requests, retries, and queue concurrency are bounded.

Challenges

  • Azure OpenAI structured outputs require every object property to be explicitly required and disallow unspecified properties. The planning and review schemas were hardened accordingly.
  • A generation succeeded before the local sink stage completed. We added checkpoint recovery that validates the Genblaze manifest and asset hash, then resumes only the missing review/index work.
  • Private B2 signed GET URLs reject HEAD validation. The verification step now uses a one-byte ranged GET, proving access without downloading the full asset again.
  • Azure App Service F1 was unavailable because this Free Trial subscription has zero App Service quota. A Bicep what-if caught that before provisioning, so the public demo moved to the existing Cloudflare domain without a homepage change or new purchase.

Accomplishments

  • Meaningful Genblaze orchestration across structured planning, image generation, visual review, persistence, and bounded retry.
  • Durable, private B2 storage for assets, manifests, plans, evaluations, and final session records.
  • Provenance that includes SHA-256 integrity, model/run metadata, and parent-run lineage.
  • A working authenticated public demo, reproducible recovery, and automated Windows logon launch.
  • A zero-call verified sample path that fails closed on a hash, manifest, or durable-URL mismatch.
  • An inspectable five-record B2 session view and downloadable evidence payload for team handoff.
  • A one-click, recipient-side verifier that rejects tampered media entirely offline.
  • Credential-safe configuration: exact secret scans find no credential values outside ignored runtime files.

What we learned

Production-minded generative media is as much about state and evidence as generation quality. The useful unit is not merely an image; it is the image plus criteria, evaluation, lineage, manifest, integrity hash, storage location, and a safe way to resume after failure.

What's next

Turn the verified session view into a searchable multi-tenant asset library, compare multiple candidate images in parallel, expose approval states for creative teams, and add provider routing so campaigns can select the best model for image, video, audio, or multimodal work while preserving one provenance contract.

Providers and models

  • Azure OpenAI gpt-5-mini: structured creative planning and rendered-image quality review
  • Azure OpenAI gpt-image-1-mini: image generation
  • Backblaze B2: private durable storage through the S3-compatible API
  • Cloudflare Tunnel: authenticated judge-facing transport to the private local origin

B2 and Genblaze usage

Backblaze B2: Stores generated PNG assets, canonical Genblaze manifests, structured plans, per-attempt evaluations, and final session indexes. Objects use deterministic prefixes by tenant, date, run, and session. The app serves private objects with expiring signed URLs.

Genblaze: Orchestrates the image generation step, uploads assets through ObjectStorageSink, builds canonical manifests, records provider/model metadata, verifies provenance, and links retry runs through parent-run lineage. Genblaze chat helpers also connect the structured plan and visual quality-review stages.

Built With

  • azure
  • b2
  • backblaze
  • cloudflare
  • genblaze
  • generative-ai
  • gpt-5
  • gpt-image-1
  • gradio
  • image-generation
  • multimodal
  • openai
  • provenance
  • pydantic
  • python
  • s3
  • sha-256
Share this project:

Updates