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, customreplicate_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
- Replicate on Genblaze 0.3 — early
genblaze-replicatepins conflicted with our core line (genblaze#244). We shipped a local adapter; maintainers later confirmedgenblaze-replicate>=0.3.4fixes it. - Private B2 in the browser — virtual-host URLs failed in
<video>/<audio>. Path-style AWS Signature Version 4 presigns fixed playback (genblaze#246). - Compose return shapes — not every composition path exposes
embedded_manifest_hash; we defensively read it (genblaze#245). - Ephemeral Railway disk — Library wiped on redeploy until we mirrored
studio.dbto B2 (persistence: sqlite+b2). - 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
- Open the live app and load Explainer Video.
- Run the pipeline and watch WebSocket node states + cost.
- Open Library → View media for the B2 composite.
- Optional: during a run, select narration and Inject fault to show fallback (
tts-1→tts-1-hd). - Optional: Product Ad Compare and pick a winner mid-run.
Links
Built With
- b2
- backblaze
- boto3
- css
- fastapi
- flow
- genblaze
- imagen
- next.js
- openai
- pydantic
- python
- react
- sqlalchemy
- sqlite
- tailwind
- typescript
- uvicorn
- websockets
Log in or sign up for Devpost to join the conversation.