Inspiration

Generative media usually means juggling separate tabs for script, image, video, TTS, and storage. We wanted one canvas where you can compose a real multi-provider pipeline, run it live, and see durable outputs land on Backblaze B2 with cost and provenance attached. Genblaze + B2 made that feel like a product, not a pile of scripts.

What it does

Pipeline Studio is a visual generative-media pipeline builder:

  • Editable React Flow canvas (LLM, Image, Video, Audio, Compare, Merge)
  • Four live templates: Explainer Video, Product Ad, Dub / Localize, Podcast to Clips
  • Live execution through Genblaze adapters + a custom Replicate boundary, with FFmpeg compose
  • Realtime WebSocket UI: node timers, session cost, chaos injection, fallback banners
  • Library, lineage, and recorded replay backed by SQLite mirrored to B2
  • Playable MP4 / audio via path-style AWS4 presigned URLs from a private B2 bucket

How we built it

  • Frontend: Next.js, React Flow, Tailwind. Studio canvas, Library, Replay, Lineage.
  • Backend: FastAPI + type-based live DAG executor (live_graph.py) so any edited graph can run, not only stock template IDs.
  • Providers: genblaze-google, genblaze-openai, custom replicate_provider.py (submit → poll → B2), local FFmpeg merge.
  • Storage: Genblaze B2 sink, manifests, optional CAS/dedup, Object Lock mirror bucket for finals.
  • Hosted: Frontend on Vercel, API on Railway (Docker + FFmpeg), persistence sqlite+b2.

Challenges

  1. Replicate on Genblaze 0.3 — early genblaze-replicate pins conflicted with our core line (genblaze#244). We shipped a local adapter; maintainers later confirmed genblaze-replicate>=0.3.4 fixes it.
  2. Private B2 in the browser — virtual-host URLs failed in <video> / <audio>. Path-style AWS Signature Version 4 presigns fixed playback (genblaze#246).
  3. Compose return shapes — not every composition path exposes embedded_manifest_hash; we defensively read it (genblaze#245).
  4. Ephemeral Railway disk — Library wiped on redeploy until we mirrored studio.db to B2 (persistence: sqlite+b2).
  5. Credits and latency — Replicate video often takes 2–5 minutes; Explainer needed a funded Replicate account to finish live composites.

What we learned

Genblaze is strongest when you treat B2 as the system of record (assets + manifests), keep adapters honest about version pins, and design the UI around long-running nodes instead of pretending every call is instant. Filing concrete SDK issues (#244, #245, #246, plus follow-ups #254 / #255) made the integration path clearer for everyone.

Try this demo path

  1. Open the live app and load Explainer Video.
  2. Run the pipeline and watch WebSocket node states + cost.
  3. Open Library → View media for the B2 composite.
  4. Optional: during a run, select narration and Inject fault to show fallback (tts-1 → tts-1-hd).
  5. Optional: Product Ad Compare and pick a winner mid-run.

Links

Built With

Share this project:

Updates