Arjun GaneshGoverned AI · Distributed systems
← All selected work
Case studyArchived

BANKERS' WRAPPED

A narrated financial recap video, generated end to end

A generated video is only worth shipping if you can say afterwards which model produced each frame of it, and prove the file has not changed since. Generative media is the easy half; provenance is the half that decides whether the output can be trusted.

Scope

Independent system · pipeline, media generation, storage, and delivery

Outcome

The pipeline ran end to end in roughly two to four minutes, dominated by generating five scene images in parallel, and shipped with a Plaid sandbox connector as a genuine no-credentials path.

01

Failure mode

Banks hold a year of a customer's transactions and hand it back as a table nobody opens. There is no moment that makes the money mean anything, so the app goes unused and the relationship goes with it.

02

Non-negotiable constraints

  • Every AI media call goes through one client, so no provider call is unaccounted for
  • A session must survive a redeploy — the database cannot be the source of truth
  • Composition must be memory-bounded enough to run on a hobby-tier host
  • The no-credentials path must be real, not a screenshot
03

Architecture decisions

01

Route every generation through one seam

Scene images, narration audio and the narrative script all leave through a single client wrapper, with a fallback provider behind the same interface. Zero direct provider calls exist outside that file, which is what makes a per-artifact provenance record possible at all.

02

Make object storage the source of truth

Fourteen files across ten artifact types — video, thumbnail, script, analytics, prompts, generation provenance, five scenes, narration, the source CSV and metadata — are written to Backblaze B2. SQLite is a read cache, so a redeploy loses nothing, and a 45-day lifecycle rule plus a per-artifact SHA-256 makes retention and integrity checkable.

03

Compose in segments rather than one pass

Each scene renders to its own segment and the segments are concat-joined with the narration, dipping to black between them. Rendering the whole timeline in one pass is simpler and needs more memory than a hobby-tier host has, so the compositor was rebuilt to stay bounded and off the event loop.

04

Evidence, not adjectives

Verified evidence
Guarantees
  • Every AI media call routes through one client — no direct provider calls
  • Backblaze B2 holds the session state, so it survives a redeploy
  • Every artifact carries a SHA-256, and every step logs model, latency and retries
05

What remains bounded

The hosted frontend and API were taken down after the hackathon; both URLs now return 404, and the project did not place. The source, the architecture records and the recorded demo remain as the evidence.

Python 3.14FastAPIGenblaze SDKGMI Cloud SeedreamNVIDIA NIMOpenAI TTSFFmpegPlaidBackblaze B2SQLiteNext.jsTypeScript
Discuss the decisions

Building a system with an audit boundary?

I’m always interested in the constraints that make an architecture worth explaining.