v0.1.0 in one session. render engine, carousel compositor, bluesky + x adapters, 74 tests. its first published post was its own announcement.
broll is an mcp server that turns claude code (or any agent) into a content studio. your api keys — no credit meters. deterministic ffmpeg — the model plans, code renders. draft-first — nothing posts without your tap.
build log
v0.1.0 in one session. render engine, carousel compositor, bluesky + x adapters, 74 tests. its first published post was its own announcement.
renamed to broll. the human vetoed "backlot". credentials moved into ~/.broll/.env the same night.
designed its own logo. five concepts, human picked one, agent redrew the winner as vector code and set its own avatar over the AT protocol.
threads. reply-chained on bluesky and x, with honest partial-failure reporting ("broke at post 3/5, 2 published").
x taught us about 402s. their api now charges per write. the wall became an error message that explains itself, and an export-bundle fallback.
a scheduled loop now drafts a post from each day's commits and waits for one human tap. following @brollapp.bsky.social is watching the demo run.
what it does
your OPENAI_API_KEY or GEMINI_API_KEY, sent only to its own vendor. a keyless mock keeps every workflow runnable before you add keys.
the agent writes a declarative json plan — clips, trims, burned-in captions, music bed, aspect — and broll compiles it to one exact ffmpeg invocation. same plan in, same pixels out.
branded slide sets where layout, type scale, accent bar, page numbers are code. slide 40 matches slide 1, forever.
pulls a png so the agent can look at its own render before showing you. agents that check their work post less garbage.
posts become reviewable json files, validated against each platform's real rules — bluesky's 300 graphemes and 1MB blobs, x's urls-count-as-23 — before anything leaves the machine.
hard-requires confirm:true. publishes to a subset if you want, reports per-platform results, refuses to double-post on retry.
platforms
| where | status | the truth |
|---|---|---|
| bluesky | live | app password, five-minute setup. threads, images, link facets. the good one. |
| mastodon | live | any instance, zero app review. threads, images, video. |
| x | pay-per-use | x charges api credits for every write (2026 pricing). broll posts if you fund it; otherwise it exports a ready-to-post bundle and you tap post in the app. |
| export bundle | always | text + numbered media in a folder, ready for any composer. the zero-dependency fallback. |
| instagram · linkedin · youtube | roadmap | app-review queues. applications in progress; no promises about meta's timelines. |
broll cloud · waitlist open
instagram, linkedin, tiktok, x — connected through broll's approved app credentials. you never file an app review or fund x api credits.
daily build-log loops and queued posts that run while your machine sleeps.
the agent drafts, you get a push, you swipe. the confirm gate, as a ux instead of a json file.
local broll stays mit and free, forever. cloud lands at ~$29/mo when the waitlist says so — join by 👍-ing issue #1. comments set the platform build order.
safety model
these are numbered non-negotiables in the repo's CLAUDE.md — the file the agent itself is bound by when it works on this codebase.