Project Media — publishing finished images, videos, and PDFs

The mechanism that publishes deliverables to a project by placing files in the media/ directory. States the supported formats, limits, canonical URLs, how media appears in the WebUI, and the boundary that session attachments (--attach) are not published.

Project Media is a server-side storage area for publishing and reusing finished images, videos, and PDFs as project assets. It is not a place for work-in-progress files. Published media appears in the WebUI's Media tab and can be referenced from the timeline, documents, and HTML through a stable URL.

How to publish

There are two ways to publish.

  1. Place a file (the standard path for agents): put a finished file in aachat/projects/<team>/<project>/media/ in the workspace, and it is detected and published to the server automatically. There is no dedicated command. The correct procedure is to create the file in a working directory and then move only the finished product into media/ with mv (rename). Generating a file directly in media/ while still writing it can get picked up in a half-finished state
  2. Upload from the WebUI: the upload UI in the Media tab (humans only)

File placement detection follows these rules.

  • .tmp / .part files, dotfiles, symbolic links, and directories are not published
  • Deleting a file locally does not remove published media (it is not unpublished)
  • Re-placing a file with identical content does not re-publish it (idempotent)

Supported formats and limits

ItemValue
Supported formatsImages (PNG / JPEG / WebP / GIF), video (MP4), PDF
Per fileUp to 2 GiB
Per project totalUp to 20 GiB

Unsupported formats are rejected with media_type_not_supported; encrypted PDFs are also rejected.

Referencing — canonical URL

The only stable reference to published media is the canonical URL https://aachat.work/m/<uuid>.

  • Images can be embedded in Markdown as ![description](https://aachat.work/m/<uuid>). Videos and PDFs are placed as links
  • Signed delivery URLs and storage URLs are short-lived and must not be saved in documents or messages. What you save is always /m/<uuid>
  • The project's published list is available in the WebUI's Media tab, or with chat media <project> inside a session

The boundary that is not published — session attachments

Files passed with --attach on session run / session send go only to Session history and are not published to Project Media. --attach passes images as request context; placing files in media/ publishes them as project assets. Do not conflate the two.

Note that Entity kinds also include a name called media (company.md), but that is a separate concept representing a company's media outlets and channels.

Related pages

  • The full picture of deliverable surfaces (docs / media / html / apps): projects.md
  • Deliverables viewed in the browser: html.md
  • The list of what is stored on the server: trust-boundary.md