Backblaze Generative Media Hackathon
Cast Iron
Your TTS provider just died. The episode still ships.
Live · OFFLINE demo, zero credentials
Genblaze · Backblaze B2 Object Lock
Python · FastAPI · SSE
Say CastIron produces a full audio episode and keeps shipping even when a text-to-speech vendor goes down mid-run. It runs with zero credentials, so I can trigger a live outage right here.
The hook
96 / 96 episodes shipped.
Across healthy runs and forced-outage runs — zero dropped. Every one hash-verified.
Say 96 out of 96 episodes shipped, including runs where we deliberately killed the primary TTS provider. Zero dropped. That number is the whole pitch.
The problem
The vendor is the single point.
It's mid-run. ElevenLabs returns a 402 . The pipeline was 60% through an episode — and now it's dead. Half-generated, nothing shipped, no record of what failed.
// mid-run, one provider dies
narration → 402 quota
pipeline → halted
episode → ✗ dropped
what shipped? → nothing
why? → no record
Say Generative pipelines are brittle in exactly one place — the vendor. One 402 mid-run and the whole episode is gone, with no audit trail of what happened.
The solution
A ladder thatcatches the fall.
Failover ladder — narration steps ElevenLabs → LMNT → Hume
Manifest inside the MP3 — provenance, hash-verified on read
Object-Locked publish — the episode can't be silently changed
api.castiron.edycu.dev/console
Say The fix is a self-healing ladder: if one provider fails, narration steps to the next rung. Provenance is sealed inside the MP3, and the final episode is written to an immutable Object-Locked bucket. This is the real producer console.
How it works — a 3-stage fan-out that heals
Genblaze runs it. B2 makes it permanent.
01 · REQUEST
POST /runs
script + chaos toggle
→
02 · GENBLAZE
Pipeline.astream
narration · music · cover (mc=3)
→
03 · SELF-HEAL
LadderTTSProvider
rung fallback on failure
→
04 · BACKBLAZE B2
ObjectStorageSink
runs/{date}/{run}/…
→
05 · IMMUTABLE
Object Lock
GOVERNANCE · publish
The failover and provenance are Genblaze code paths, not glue · OFFLINE=1 runs it all with zero keys.
Say Five real moves: request, fan out with astream, the ladder self-heals on failure, store through the B2 sink, then lock it. The sponsor SDK is the engine — the failover lives inside a custom provider on Genblaze's interface.
Live demo — flip the chaos toggle, watch it heal
api.castiron.edycu.dev/console
1
script + chaos knob
2
rung "fell back" badge
3
live SSE stage rail
4
episode published + manifest
Show Set chaos to "tts", hit Produce. The narration stage goes red on rung 0, the ladder steps down, the badge shows it fell back — and the episode still publishes with a verified manifest. Live, over server-sent events.
The hero moment
Chaos on. Zero dropped.
RUNG 0 · DOWN
ElevenLabs
forced 402 outage
↓
RUNG 1 · CAUGHT
LMNT
narration lands here
·
RUNG 2 · SPARE
Hume
still in reserve
→
RESULT
✓
episode shipped · manifest records the real provider
The manifest records the provider that actually shipped it — not the one you asked for.
Say This is the moment judges remember: I break the primary provider on purpose, and the episode still ships from the next rung — with the manifest honestly recording which provider did the work.
Why it works
Reliability is the feature.
SDK depth — a custom ladder provider on Genblaze's interface
Tamper-evident — manifest sealed in the MP3, verified on read
Immutable — Object-Locked publish, provably unchanged
$ OFFLINE=1 pytest -q
175 passed in 6.4s
coverage 100%
episodes 96/96 ✓
dropped 0
Say The failure everyone hand-waves — vendor death — is the exact thing this ships through, on the real SDK, with provenance you can verify. That's the moat.
Shipped, live, reproducible
Proven with one command .
96/96
episodes shipped hash-verified — 0 dropped
p95 134ms
failover latency (p50 ≈ 120ms)
175
tests, green offline end-to-end
100%
line coverage · app + engine
castiron.edycu.dev · api.castiron.edycu.dev/console · github.com/edycutjong/castiron
Say Everything here is verifiable right now — landing, real API console, CI/CD, full coverage, and the benchmark numbers reproduce with one command.
The ask
Break it yourself.
Open the console, flip the chaos toggle to knock out a provider, and watch the episode ship anyway — no signup, no keys.
scan → api.castiron.edycu.dev/console
Sponsored by
Close Don't take the numbers on faith — try to break it. Flip the chaos toggle and watch the episode ship anyway. The console is already waiting.