The order of preference
- Brand assets, dropped in before the chat. Nothing to upload during the build. See Brand assets.
fetch_brand, for a business with a website. Zero files.- An upload link, for files you hold. One link per batch, valid fifteen minutes.
- A share link. A Google Drive or Dropbox link works anywhere a URL is accepted.
- Base64, capped at 100 KB, for a tiny logo when nothing else can work.
Upload links
The assistant callsupload_media {request_upload_url:true, filenames:[…]} (or upload_font with a family) and gets one link that accepts up to ten files. Then:
If it can run commands (Claude Code, Codex, Cowork), it uploads the files itself:
check_upload and matches files by file name and tone, never by upload order: the white one is the light logo whichever came first.
Fonts on a link
A font file on any link is installed as one face of the family the link was minted with, or the one typed on the drop page. One file per weight. The library checks the file’s structure, not just its first bytes.Share links
Google Drive and Dropbox share links open a viewer page, not the file. The plugin rewrites them to the direct form before fetching, so pasting a share link asurl works for images and fonts.
Receipts
Every file is hashed with SHA-256 on the way in. The same bytes, sent again under any name, return the same attachment or the same font face. A lost response and a retry never make a duplicate.What the link can and cannot do
- It is minted by a connection and dies with it: revoke the connection and the link answers 403.
- Only a successful file uses one of its slots; a link that keeps failing closes itself.
- It accepts images up to 20 MB (or the site’s upload limit, whichever is lower) and fonts up to 4 MB.
- A file that is not really an image or a font is refused by its bytes, whatever its name says.
The bridge
For Claude Desktop, Cursor and Claude Code,@wpbevel/bridge runs on your machine and uploads from your folders with no link and no clicks. See Connecting.