RecallCast: the safety layer for generative recall media

Inspiration

Product recalls are urgent, but the approved source notice is rarely the final format consumers see. Safety teams must turn it into social cards, audio announcements, videos, translations, and accessible guidance—often under significant time pressure.

Generative AI can accelerate that work, but it introduces a dangerous failure mode: the media may look polished while silently changing a model number, serial range, remedy, contact detail, or required action.

RecallCast was inspired by a simple product question:

What if safety-critical generative media had a release gate as rigorous as a software build?

Instead of asking a model whether another model’s output “looks correct,” RecallCast compiles an approved notice into a locked fact contract, independently observes the generated media, and fails closed when a critical fact drifts.

What it does

RecallCast converts an approved product-recall notice into a verified voice-and-visual media package with durable provenance.

Its core assurance engine, FactLock, protects critical facts such as:

  • Exact product and model identifiers
  • Lot or serial-number ranges
  • Hazard descriptions
  • Stop-use instructions
  • Approved remedies
  • Phone numbers and recall URLs
  • Effective or recall dates

The workflow is:

  1. Import or select an approved recall source.
  2. Extract a structured fact contract for human confirmation.
  3. Bind the contract to a deterministic validation policy.
  4. Generate visual and narrated media.
  5. Reverse-transcribe the generated audio.
  6. Independently read the final rendered pixels.
  7. Compare each modality against its required facts.
  8. Quarantine unsafe output and permit one contract-derived corrective retry.
  9. Require an accountable human to approve or reject the final package.
  10. Preserve the source, assets, manifests, validation evidence, lineage, and review decision in private Backblaze B2 storage.

RecallCast never allows a model score to override a blocking safety failure.

The proof

Our public-source demonstration uses the CPSC notice for Frigidaire Gas Ranges, Recall 26-333. RecallCast is not affiliated with CPSC or Electrolux Group, and the resulting media is clearly labeled as an unaffiliated AI draft.

The contract contains 23 exact model identifiers and the serial range VF52200000–VF54399999.

During a real Genblaze narration run, the generated voice was reverse-transcribed with an incorrect serial endpoint. The output sounded plausible, but one digit was missing.

FactLock:

  • Detected the mutation
  • Blocked the narration from release
  • Preserved the rejected run and its evidence in B2
  • Created one contract-derived corrective attempt
  • Linked the corrected attempt to its failed parent
  • Revalidated the narration character by character
  • Left the passing package at needs_review for a human decision

This is the central RecallCast proof: polished media is not considered safe until the final pixels and generated voice independently survive the contract.

How we built it

RecallCast is a full-stack multimodal assurance system.

Generative orchestration

We use Genblaze to orchestrate OpenAI media providers and persist generated assets into Backblaze B2 Cloud Storage.

Genblaze provides:

  • Provider execution
  • Structured run metadata
  • SHA-256 asset manifests
  • Manifest verification
  • Parent-child retry lineage
  • Direct B2-compatible object storage

OpenAI provides:

  • gpt-image-2 for creative background generation
  • gpt-4o-mini-tts for AI narration
  • gpt-transcribe for reverse transcription
  • Vision-based reading of the final rendered media
  • Structured extraction for imported recall notices

Critical recall text is never delegated to image generation. RecallCast uses a deterministic compositor to place contract-approved safety copy over the generated creative layer.

FactLock assurance engine

FactLock is a deterministic, per-modality policy engine written in Python.

Audio and visual assets have separate coverage requirements. It checks exact identifiers, normalized phone numbers and URLs, complete range endpoints, required safety concepts, action polarity, contract binding, policy binding, and provenance integrity.

Any missing reverse-extraction evidence also fails closed.

Policy Pack Builder

RecallCast supports bring-your-own-data workflows through a review-first Policy Pack Builder.

After a source contract is confirmed:

  • Model identifiers and range endpoints are automatically locked.
  • A reviewer confirms source-grounded hazard, action, and remedy concepts.
  • The policy is cryptographically bound to the contract.
  • Unsupported recall structures are blocked before provider spending.
  • Generation remains disabled until the reviewer explicitly activates the policy.

The current safe custom template supports English stop-use recalls. Additional recall types will use separate, explicit policy templates rather than runtime rules invented by an AI model.

Backblaze B2 evidence graph

B2 is not used as a simple asset folder. It is the durable evidence and lineage layer for:

  • Original source notices
  • Extraction drafts
  • Human-confirmed contracts
  • Active policy packs
  • Genblaze assets and manifests
  • Rejected narration attempts
  • Corrective child attempts
  • Observed transcripts
  • Final-pixel readings
  • FactLock validation reports
  • Human approve/reject records
  • Current package heads

Assets remain private and are exposed to the application using short-lived signed URLs.

Application stack

The API is built with FastAPI, Pydantic, and Python. The responsive product interface uses Next.js, React, and TypeScript. Media composition uses Pillow, and the project is tested with Pytest and Playwright.

Challenges we ran into

Verifying the final media instead of the intended prompt

The intended narration script and visual overlay are not proof of what a consumer actually receives. We had to independently inspect the generated MP3 and final PNG rather than validating internal application text.

Identifiers are fragile in generated speech

Text-to-speech and transcription can insert, omit, or reinterpret characters in serial numbers. The real serial mutation became an important design lesson: identifiers require exact, character-aware validation and cannot rely on semantic similarity.

Accessibility versus complete identifier coverage

The public case contains 23 exact models. Reading all 23 aloud would make the consumer alert unnecessarily long. We created a two-asset media kit:

  • An action-first consumer alert
  • An exact-model eligibility companion

The policy validates them as complementary assets without weakening identifier coverage.

Keeping generation flexible while safety copy stays immutable

We wanted visually compelling generative media without allowing the image model to invent safety text. The solution was to separate the creative background from a deterministic contract-driven compositor.

Designing bounded agentic behavior

RecallCast uses a bounded agentic loop:

generate → observe → validate → quarantine → correct once → validate → human decision

The AI can help create and observe media, but it cannot change the release policy, approve its own output, or continue retrying indefinitely.

Accomplishments that we're proud of

  • Catching a genuine serial-number mutation from a generated narration run
  • Preserving rejected and corrected Genblaze attempts with parent-child lineage
  • Validating voice and visual evidence independently
  • Building a durable human approve/reject release gate
  • Treating B2 as an evidence graph rather than only file storage
  • Creating an action-first consumer alert with a complete eligibility companion
  • Building a source-grounded Policy Pack Builder for custom recall data
  • Maintaining a strict separation between AI creativity and deterministic safety controls
  • Delivering responsive desktop and mobile review workflows
  • Passing 42 API tests, five browser workflows, TypeScript validation, and a production Next.js build

What we learned

The hardest problem in generative safety communication is not generation—it is proving that the generated result still means exactly what the approved source means.

We learned that:

  • Semantic similarity is insufficient for critical identifiers.
  • Intended copy cannot substitute for evidence from final media.
  • Different modalities need different validation requirements.
  • Corrective retries need durable lineage to the failed attempt.
  • Human review is strongest when the reviewer sees the canonical fact, observed evidence, failure reason, and asset provenance together.
  • Object storage can become a practical audit and orchestration layer when contracts, manifests, attempts, and decisions use a deliberate hierarchy.

What's next for RecallCast

RecallCast can grow from product recalls into a broader release-assurance platform for regulated and safety-critical generative media.

Next steps include:

  • Additional explicit recall policy templates
  • Multilingual policy packs with native-language validation
  • Accessible video composition and synchronized captions
  • Source-change dependency graphs that automatically mark affected assets stale
  • Enterprise identity, reviewer roles, and separation of duties
  • Multi-team approval workflows and notifications
  • Integrations with recall-management and content-distribution systems
  • Consumer comprehension testing in addition to factual fidelity
  • Policy families for emergency alerts, equipment safety, medication instructions, and regulated disclosures

Our long-term vision is to make generative communication faster without asking organizations to trade away accountability, factual integrity, or public trust.

Built With

  • backblaze-b2
  • docker
  • fastapi
  • genblaze
  • gpt-4o-mini-tts
  • gpt-5.6-sol
  • gpt-image-2
  • gpt-transcribe
  • next.js
  • openai
  • pillow
  • playwright
  • pydantic
  • pytest
  • python
  • react
  • render
  • s3
  • sha-256
  • typescript
Share this project:

Updates