The board / Operating

Storyboarder

Live · September 2024 Shot list to storyboard storyboard.ei.au

Shot list in, storyboard frames out, paid for by the frame.

Rails

  • not allowedReadsReads nothing but the shot list it is given.
  • not allowedWritesWrites nothing outside itself. The PDF is yours.
  • aloneMoneySells prepaid credits and spends them, one frame at a time.
  • alonePublicOpen to anyone with a shot list.
  • aloneUnattendedGenerates, meters and settles with nobody watching.
  • a person, on exceptionsDecidesA person writes the list. Nobody checks the frames.

Problem

Pre-production needs frames fast, and most of them get thrown away. Paying an illustrator for the bin makes no sense, and prompting a model shot by shot is slow.

A public tool that spends real money on every request also needs a ledger that cannot be argued with.

System

A person pastes a shot list or uploads a CSV. The prompt builder applies a style and a reference image, quotas and a spend cap and BotID stand in front of the models on Replicate, every generation is held and settled in the ledger. By default the user gets frames and a PDF. If the hold is refused, nothing generates and nothing is charged.

Decisions

  1. Prepaid credits through Stripe, 100 credits for A$10, instead of a subscription.
  2. Every generation takes an atomic hold on credits at one chokepoint and settles after. The ledger caught one IP address consuming 98% of spend; the chokepoint ended it.
  3. Per-IP quotas, a global spend cap, BotID and App Check in front of every call to a model.
  4. Models on Replicate: Flux Schnell, Pro and Kontext, Imagen 4 Fast, Nano Banana 2. Gemini vision was removed. Firebase hosting retired for Vercel in September 2026.

Stack

Next.js, Clerk, Postgres (Neon), Stripe, Replicate, Flux, Imagen 4, BotID