A creative studio for anyone launching onchain : agents, builders, and creators. It generates branded hero images from simple text, distills any brand into ready-to-use design tokens, performs precise


A creative studio for the agent economy. Promo videos, hero images, brand kits, precise image edits and mint-ready packaging — for agents, brands and people. Five services, one call each, paid per call over x402 and settled on X Layer. No subscription, no API key, no wallet handover.
🌐 Site + full API docs — https://agent-reel-production.up.railway.app
🛒 Listing — OKX.AI agent #6731 (Art creation)
🎬 90-second demo — watch it (every frame in it was produced, paid for and packaged by the services below)
There are dozens of genuinely useful agents listed on OKX.AI that don't look the part yet. Their builders did 90% of the work; the missing 10% is a visual identity. Utility gets you listed — branding gets you picked.
Agent Reel closes that gap in one call, and it does it from what the buyer already published, so nothing about them is invented.
Service | Endpoint | Price | What comes back |
|---|---|---|---|
Promo Reel |
| 0.5 USDT | A 15s 1280×720 MP4, styled in the subject's own colours |
Hero Image Studio |
| 0.1 USDT | A 1200×675 PNG header with title + strapline in real type |
Brand Kit Builder |
| 0.1 USDT | Palette, display+mono type pairing, mark concept, motion timing |
Image Restyler |
| 0.1 USDT | Attention-aware reframe, ≤2× Lanczos enlarge, flat-bg — deterministic only |
Mint Package Forge |
| 0.1 USDT | ERC-721 metadata + CIDv1 ids + sha256, both files hosted |
Free routes: GET /v1/health, GET /v1/reel/:id.mp4, GET /v1/assets/:id/:file.
# 1. POST with no payment → 402 + a PAYMENT-REQUIRED challenge (base64 JSON)
curl -i -X POST https://agent-reel-production.up.railway.app/v1/reel \
-H 'content-type: application/json' -d '{"query":"5776"}'
# 2. Sign the challenge (any x402 client; OKX's CLI shown)
onchainos payment pay --payload '<base64 from the header>'
# 3. Replay the same request with the signed header
curl -X POST https://agent-reel-production.up.railway.app/v1/reel \
-H 'content-type: application/json' \
-H 'PAYMENT-SIGNATURE: <authorization_header>' \
-d '{"query":"5776"}'The reel takes ~60s to render, so the paid response returns immediately with reel_pending: true and a URL you poll — the buyer never holds a connection open waiting on Chromium.
Both exact and aggr_deferred schemes are advertised. Settlement asset is USD₮0 (0x779ded0c9e1022225f8e0630b35a9b54be713736) on eip155:196.
An agent id — {"query":"5776"}. The service fetches that agent's live OKX.AI listing, extracts the palette from their own avatar, and compresses their own description into one line. Nothing is embellished.
A brief — for anyone with no listing at all:
{
"name": "X Layer",
"description": "OKX's ZK-powered Ethereum L2, home to the onchain agent economy.",
"image_url": "https://…/logo.png",
"highlights": ["ZK-powered Ethereum L2", "Gas paid in OKB"],
"cta": "okx.com/xlayer"
}Bring a monochrome logo and the reel stays monochrome — the palette follows you, not us.
These limits are the product. They're why the output can be trusted.
No invented claims. A reel only says what the listing already says.
No invented pixels. Outpainting was removed: filling new canvas means inventing detail that was never in your image. Every op is one we can name, and the response lists exactly what was done.
No pretending a brief is a listing. A custom-brief reel never claims its subject is a listed agent.
No pinning, no minting. Forge prepares the package; your keys do the rest.
No charge for work we couldn't do. Payment settles after success — an unknown agent, an unreachable image or a malformed body returns 4xx and takes nothing.
Never a blank deliverable. If every image model is unavailable, the hero falls back to a procedural gradient banner rendered in code from the palette.
src/
server.ts Hono app: 5 x402-gated POSTs, free collection routes, the site
payments/x402.ts x402 seller middleware (OKX facilitator), 402 challenge builder,
settlement → records the tx on the reel job
reel/
agent.ts fetches an agent's live listing (public page, no key) + caches it
palette.ts extracts a brand palette from an avatar: hue buckets weighted by
saturation, then lifted to a perceptual-luminance floor
tagline.ts compresses the listing's own words into one line
render.ts Remotion render: memoised bundle, serialised queue (Chromium is
memory-hungry and shares the box with paid API traffic)
jobs.ts reel_jobs ledger; settlement writes the paying tx onto the row
index.ts planReel (agent) / planCustomReel (brief) → produceReel
studio/
asset.ts hero images: art direction → image-model chain → procedural
fallback → composited type
brandkit.ts design tokens (palette from avatar, curated type pairings)
restyle.ts deterministic sharp ops only
forge.ts ERC-721 metadata + CIDv1/raw/sha2-256 packaging
shared.ts guarded inbound image fetch (https-only, no private hosts,
size/time caps, must decode) + volume-backed output store
lib/llm.ts the text brain: Venice chat API, model-fallback chain, JSON
repair, single-string path for short creative lines
pipeline/budget.ts hard per-call COGS cap, checked before each external spend
reel-studio/ Remotion compositions — the 15s reel and the 90s demo film
site/ the website (docs, demo video, work samples)
scripts/render-demo.ts renders the 90s demo; beats are timed from the real voiceover
npm install
cp .env.example .env # add VENICE_API_KEY, OKX creds, PAYOUT_ADDRESS
npm run dev # PAYMENTS_ENFORCED=false serves unpaid, for local workEach module also runs standalone, so a failure isolates fast:
npm run reel -- 5776 # plan + render a reel
npm run asset -- "6731" # hero image from an agent id
npm run asset -- "a defi yield aggregator" "Yield" "compounding, automated"
npm run brandkit -- 2013 # tokens from an agent's avatar
npm run restyle -- "https://…/hero.png" 1080 1080
npm run forge -- "https://…/art.png" "First Light" "A launch piece"Deploy is a plain Dockerfile (railway.json included). Mount a volume and point DATABASE_PATH, REELS_DIR and ASSETS_DIR at it — otherwise every deploy wipes delivered work, and the server warns loudly at boot if they aren't on the mount.
TypeScript · Node 20 · Hono · Remotion (headless Chrome) · satori + resvg · sharp · better-sqlite3 · Venice (image + text) · OKX x402 SDK on X Layer
Built for the OKX.AI Genesis Hackathon. Agent Reel is listed as agent #6731 under Art creation; every sample on the site is a real paid delivery, still hosted at the URL it was delivered to.
The studio's own launch reel was its first paid job — it made its own promo.