> ## Documentation Index
> Fetch the complete documentation index at: https://docs.postsider.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Media Library: Upload and Reuse Images and Videos

> The Volta media library stores your uploaded images, videos, and audio files so you can reuse them across multiple posts and channels.

The media library is a central store for all the images, videos, and audio files you use in your posts. Instead of re-uploading the same brand assets every time, you upload once and attach them to any post, on any channel, whenever you need them. Everything is organized in a searchable grid so your media is always a few clicks away.

## Supported file types

Volta accepts the following media formats:

* **Images** — PNG, JPG/JPEG, GIF (including animated GIFs)
* **Video** — MP4
* **Audio** — common audio formats for platforms that support audio posts

## Uploading media

You can upload files in two ways:

<Steps>
  <Step title="From the Media Library view">
    Navigate to **Media Library** in the dashboard sidebar. Drag and drop files directly onto the page, or click the **Upload** button to open a file picker. Uploaded files appear in the grid immediately.
  </Step>

  <Step title="From the post composer">
    While composing a post, click the attachment icon in the toolbar. You can upload a new file on the spot or browse your existing media library to attach a previously uploaded file.
  </Step>
</Steps>

## Reusing media across posts

Any file in your media library can be attached to multiple posts. In the composer, click **Browse Library** to open a media picker, search or scroll to find the file you want, and click to attach it. Reusing media doesn't create duplicate files — Volta references the same stored asset each time.

## Storage backends

Where your media files are physically stored depends on how your Volta instance is configured:

* **Local filesystem (default)** — files are saved to the `./uploads/` directory on the server. No extra configuration needed, but storage grows on the same machine as Volta.
* **Cloudflare R2** — files are stored in a Cloudflare R2 bucket. This is the recommended option for production deployments with heavy media usage. Ask your admin whether R2 is enabled for your instance.

<Note>
  Your admin controls which storage backend is active. As a user, the media library behaves identically regardless of backend — the difference is only in where files are physically stored.
</Note>

## Platform media limits

Different social platforms have different limits on how many images or videos you can attach to a single post. Volta enforces these limits in the composer so you don't accidentally exceed them.

| Platform    | Images              | Video |
| ----------- | ------------------- | ----- |
| X (Twitter) | Up to 4             | 1     |
| Instagram   | Up to 10 (carousel) | 1     |
| Pinterest   | Up to 5             | 1     |
| Telegram    | Up to 10 (album)    | —     |

For platforms not listed above, refer to the composer — it will show the attachment limit for the channel you've selected.

## Uploading via the API and SDK

You can upload media programmatically using the public API or the official SDK:

**REST API**

```http theme={null}
POST /public/v1/upload
Authorization: your-api-key
Content-Type: multipart/form-data

file=<binary>
```

**SDK**

```typescript theme={null}
import Postsider from '@postsider/node';

const client = new Postsider('your-api-key', 'https://your-instance.com');

// Upload a local file buffer
const result = await client.upload(fileBuffer, 'png');
console.log(result); // { id, path, url }
```

The returned `id` or `path` can then be referenced when creating a post via the API.

<Tip>
  When building AI agent workflows with the Volta MCP server, use the **`uploadFromUrlTool`** to import media directly from a public URL into the media library — no manual download and re-upload needed. This is especially useful when an agent generates or discovers an image online and needs to attach it to a scheduled post.
</Tip>
