# Media Library

> Upload and organize images per site - required alt text, folders, automatic WebP optimization, and R2 object storage.

Each site has its own media library for images and files used across pages, the blog, and Site Settings (logo, favicon, social images). Media is strictly scoped per site: a user working in one client site only ever sees that site's files, and the operator sees everything.

<DocShot src="/sites-docs-screens/media-library.webp" alt="The media library grid with per-image alt text, folders, search, and upload" />

---

## Uploading

1. Open **Media** (or any media picker in the builder or an editor)
2. Click **Upload**, or drag and drop files - multi-select is supported
3. Enter **Alt text** for each image (required)
4. Optionally file it into a **folder**

### Alt Text Is Required

Every image must have a short description. It is rendered as the image's alt attribute on the live site, which is what screen readers announce and what search engines index. Write what the image shows, not a keyword list.

### Automatic Optimization

Uploaded raster images (JPEG, PNG, and similar) are converted to **WebP** automatically, and the platform generates several responsive sizes alongside the original. The renderer picks appropriately sized variants, including smaller background-image variants on phones, so you can upload a full-quality photo and let the platform handle the rest. SVG and non-image files are stored as-is.

### File Names and Privacy

Stored filenames keep a readable slug (good for image SEO) plus a randomized suffix, so file URLs cannot be guessed.

---

## Folders

Folders keep a large library manageable:

- Create folders (and nested subfolders) from the folder tree in the media library
- Filter the grid by folder, or search by name
- Move a file by changing its folder

Folders are organizational only - they do not change a file's URL.

---

## Where Files Live and How They Serve

Media is stored in your object-storage bucket (Cloudflare R2) - infrastructure you control, part of the [self-hosted architecture](/docs/architecture). On the published site, images serve from the client site's own domain under a `/media/` path, not from a third-party hostname, which keeps URLs clean and portable.

New uploads are available to the builder and preview immediately. As with all content, the published site reflects media changes after the next **Deploy**.

---

## Picking Media

Anywhere an image is needed - an Image element in the builder, a featured image, the logo in Site Settings, an OG image - the same tenant-scoped media picker opens: browse by folder, search, or upload in place.

---

## Summary

| Capability | Details |
|-----------|---------|
| Scoping | Per site; users see only their own site's media |
| Alt text | Required on every image |
| Optimization | Auto-WebP + responsive size variants |
| Organization | Nested folders + search |
| Storage | Your R2 bucket; served from the site's own domain |
| Permissions | Administrators, Editors, and Authors can upload; Contributors cannot |

---
Source: https://seedlysites.com/docs/help/media
