Zoetrope Render turns a written prompt into an image, on chain, in about eight seconds. Connect a wallet, spend a credit, keep the file. The video drum is already built — it is loaded and waiting behind the slit.
Each step has to finish before the next one starts, which is the only reason they are numbered.
Connect any wallet on Robinhood Chain. No email, no password, no signup form. Your address is the account.
Write the prompt, pick a model and an aspect ratio. The credit cost shows before you spend anything.
The job enters the render queue and returns a file. Median time is around eight seconds on the fast models.
Every render is stored against your address. Download it, share a public link, or delete it permanently.
One render route, several engines behind it. Swapping engines does not change how you call it.
Video generation is finished code, not a roadmap item. The render route accepts it, the queue handles it, the gallery displays it. One flag keeps it shut.
It opens at token launch. Nothing about the interface changes that day — a tab that has been sitting there greyed out simply starts responding.
A credit is the unit you spend on a render. Every connected address gets 2 free credits per calendar month, reset on the first. Unused credits do not carry over.
Cost is charged when the job is accepted, not when it completes. A failed render is refunded automatically within one minute — you are never charged for output you did not receive.
| Route | Cost | Returns |
|---|---|---|
| turbo | 1 credit | 1024px image, ~4s |
| standard | 2 credits | 1536px image, ~8s |
| fidelity | 4 credits | 2048px image, ~18s |
| motion | locked | 5s clip, 1080p |
One route handles every model. Send a prompt, get a job id back immediately — rendering is asynchronous, so the response returns before the file exists.
Poll GET /api/render/:id or register a webhook. The type field accepts video, but returns 423 while the drum is locked.
Everything except prompt has a sensible default. Send only what you want to change.
| Field | Accepts | Notes |
|---|---|---|
| prompt | string, 1–1200 chars | Required. Longer prompts are not truncated silently — over the limit returns 400. |
| model | turbo · standard · fidelity | Defaults to standard. |
| ratio | 1:1 · 16:9 · 9:16 · 4:3 · 3:2 | Defaults to 1:1. |
| type | image · video | Defaults to image. Video returns 423 until launch. |
| seed | integer | Reuse a seed to get a near-identical render from the same prompt. |
| visibility | private · public | Public renders appear at /r/:id. Defaults to private. |
A job moves forward only. It never returns to an earlier state, so you can stop polling the moment you see a terminal one.
| State | Meaning |
|---|---|
| queued | Accepted and paid for. Waiting on capacity. |
| rendering | Sent to the engine. Typically 4–18 seconds depending on model. |
| ready | Terminal. The file URL is populated and stored against your address. |
| failed | Terminal. The error field says what went wrong in plain language. |
| refunded | Terminal. Credits returned. Follows every failed job automatically. |
Limits exist to keep the free tier free. They are per address, and they are checked on the server — hiding a button is not a limit.
| Limit | Value |
|---|---|
| concurrent jobs | 2 per address |
| requests | 20 per minute per address |
| prompt length | 1200 characters |
| storage | Renders kept 90 days on the free tier |
| new address | First render available immediately — no waiting period, no minimum balance |
Hitting a limit returns 429 with the seconds remaining. It is not an error you need to handle specially — wait and send it again.