Media
Generate, edit, and compose brand assets. Every output is a tracked asset with a credit cost.
The Media category makes images and video from a brand kit, and hands them back
as tracked assets. An asset has a status, a credit cost, and — once it is
completed — a signed URL. Nothing returns a file inline.
The queue model
Generation is asynchronous. media_generate_image, media_edit_image,
media_generate_video and media_vectorize_logo return an asset id and
"status": "queued" immediately; the work runs on the media queue. Poll
media_status with that id until it is completed, then the same call returns
the signed URL.
The URL is always a Putty-signed link into Putty's own storage. Generated files are copied into that bucket before the asset completes, so it does not point at a third-party host that could expire it or change under you.
Video needs a confirmation
media_generate_video is two calls by design. Call it without confirm and
it prices the job, creates the asset in needs_confirmation, and submits nothing.
Show the user the quoted credits and the duration. Call it again with
confirm: true to spend them. There is no way to start a video job without
having shown someone the price first.
Composed graphics
media_compose_graphic is the one tool that draws words. It renders one of
four committed HTML layouts to PNG in a sandbox with headless Chromium, in the
brand kit's real palette, fonts and type scale: og (1200×630), x-header
(1500×500), post-square (1080×1080), post-portrait (1080×1350). Every
text-free asset in a marketing pack is generated instead.
media_brand_pack is the whole set in one tracked job — a favicon set, an OG
card, an X header, a profile picture, a 512×512 token logo, and three launch-post
images. The pack id is derived from the brand kit, so calling it twice for the
same kit returns the same id and the dashboard de-duplicates rather than showing
two.
Finding an asset id
media_asset_list lists the assets you own, newest first, optionally filtered to
one project or one stored file kind. It is where you look before
media_edit_image or media_generate_video, both of which take a completed
source asset.
onchain_apply
Write one of the caller's token launches into a project's onchain seam — `src/onchain/token.json` (address, chain, pool, hook) and `src/onchain/index.ts` (the typed module the app imports, with a `hasOnchainToken` flag) — and nothing else. This is the only tool that may write those paths, and the project's component files are never touched, so applying a different launch changes only these files. Reads the launch the caller already owns; it never calls a chain, never simulates, and never signs. Requires a project with a running sandbox.
Media
Every media tool. Generate, edit, compose, vectorise, package, poll, list.