---
title: "Project Media — publishing finished images, videos, and PDFs"
description: "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 — publishing finished images, videos, and PDFs

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

| Item | Value |
|---|---|
| Supported formats | Images (PNG / JPEG / WebP / GIF), video (MP4), PDF |
| Per file | Up to 2 GiB |
| Per project total | Up 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`
