EmDash Media Library: Upload, Manage, and Optimize Images

Discover how EmDash's media library, powered by Cloudflare R2, simplifies image management with edge processing and zero egress fees.

By Central
Step-by-step guide to uploading, managing, and optimizing images in the EmDash media library.
Highlights
  • Images upload directly to Cloudflare R2, bypassing your server to avoid PHP memory limits and timeouts.
  • Replace an image without breaking existing links — the URL stays the same while the file updates.
  • EmDash v0.1 does not auto-generate multiple image sizes, so upload images at the exact dimensions needed.

The media library is where most CMS projects live or die. You upload a hero image. You crop it. You reuse it across a dozen pages. WordPress made this workflow famous — but it also made it painful. Bloat, versioning nightmares, and storage limits that force you to delete old files.

EmDash takes a different approach. Built on Cloudflare R2, the media library separates storage from your server entirely. Images live in blob storage, not in a /wp-content/uploadscodecodecodecode folder next to your code. That changes everything about how you manage, scale, and pay for media.

EmDash's media library is simple, fast, and cost-predictable.

Let me walk through the exact steps — upload, manage, optimize — and show you where EmDash breaks the old mold.

How to Access the Media Library

Open your EmDash admin panel. On the left sidebar, click Media under the Content section.

You’ll see a grid of all uploaded files. Thumbnails load fast because they’re served from Cloudflare’s edge cache, not from a PHP script hitting your database.

The interface is clean. No clutter. Each file shows its name, type, dimensions, and file size. A search bar at the top lets you filter by filename.

Expected outcome: You see every file you’ve uploaded, sorted by date, with instant thumbnail previews. No pagination lag.

Uploading Images — Step by Step

Step 1: Click the Upload Button

In the top-right corner of the Media grid, click Upload. A file picker opens.

Step 2: Select Your Files

Choose one image or multiple. EmDash accepts JPEG, PNG, WebP, GIF, and AVIF. There’s no hard file-size limit in the CMS itself — R2 handles large files natively.

Expected outcome: The upload begins immediately. You see a progress bar for each file.

Step 3: Wait for Edge Processing

Files upload directly to Cloudflare R2. They don’t pass through your server. No PHP memory limits, no timeouts. A 10 MB image uploads in seconds.

Expected outcome: Each file appears in the grid with a green checkmark. No server-side processing delay.

Step 4: Set Alt Text and Metadata

Click any uploaded image. A side panel opens. Here you can add:

  • Alt text — required for accessibility and SEO
  • Caption — optional, displayed below the image in some themes
  • Description — internal notes, not visible to visitors

Expected outcome: Metadata saves instantly. No page reload.

Step 5: Copy the URL

In the same side panel, you’ll find a Copy URL button. The URL points directly to the R2 bucket, served through Cloudflare’s CDN.

Expected outcome: You get a public URL that loads fast from any location. No database queries on every request.

Managing Images

Replace an Image Without Breaking Links

This is one of EmDash’s best features. Open any image, click Replace, and upload a new version. The URL stays the same. Every page that references that image updates automatically.

Expected outcome: Old image is replaced. All published pages show the new version. Zero broken links.

Delete Images

Select one or multiple images. Click the trash icon. Confirmation dialog appears. Once confirmed, the file is removed from R2.

Expected outcome: File deleted. No orphaned database entries — EmDash cleans up references automatically.

Bulk Select

Hold Shift and click multiple images. Or click the checkbox in the header to select all on the current page. Then apply an action — delete, download, or add to a collection.

Expected outcome: Batch operations complete in seconds, not minutes.

Optimization — What Makes EmDash Different

WordPress stores images on your server’s filesystem. Each request to serve an image hits PHP, then the filesystem, then a web server. That’s three layers of overhead per image.

EmDash stores images in R2, served directly from Cloudflare’s edge. No PHP involved. No filesystem reads. The CDN caches the image at 330+ locations worldwide.

Zero egress fees. R2 does not charge you for serving files. If your site gets a traffic spike, your media costs stay flat. WordPress hosting, by contrast, charges for bandwidth — and overage bills arrive without warning.

No image compression built in yet. EmDash version 0.1 does not include an automatic image optimizer. You should compress images before uploading. Tools like Squoosh, ImageOptim, or a CLI tool like sharpcodecodecodecode work well.

Expected outcome: Images load 2-3x faster than WordPress-served files. Your hosting bill stays predictable.

EmDash vs WordPress: Media Library Comparison

Dimension EmDash (R2) WordPress (Local Filesystem)
Storage location Cloudflare R2 (blob storage) /wp-content/uploadscodecodecodecode on your server
Egress fees Zero Varies by host — often $0.10-$0.50/GB overage
Max file size No hard limit (R2 accepts up to 5 TB per file) PHP upload_max_filesizecodecodecodecode limit (typically 2-64 MB)
CDN delivery Built-in (Cloudflare edge) Requires plugin or separate CDN setup
Server load None — files served directly from R2 PHP + filesystem read on every request
Backup strategy Replicate R2 bucket to another region Manual or plugin-based backup of uploads folder
URL permanence Replace file, keep same URL Replace requires same filename or redirect
Thumbnail generation Manual (no auto-resize yet in v0.1) Automatic on upload (multiple sizes)

Three Best Practices for EmDash Media

1. Compress before uploading. EmDash does not auto-optimize images yet. Run your images through Squoosh or ImageOptim. Target WebP for modern browsers, JPEG at 80-85% quality for photos. A 2 MB JPEG becomes 300 KB with no visible quality loss.

2. Name files descriptively. EmDash search works on filenames. hero-banner-homepage.webpcodecodecodecode is searchable. IMG_4921.jpgcodecodecodecode is not. Rename files before upload.

3. Use alt text on every image. The side panel saves alt text instantly. Search engines read it. Screen readers read it. EmDash surfaces alt text in the REST API, so headless frontends inherit it automatically.

The One Thing That’s Missing

EmDash v0.1 does not generate multiple image sizes on upload. WordPress creates thumbnails, medium, and large versions automatically. EmDash stores only the original file.

For a blog post, that means you serve the full-resolution image even in a 300-pixel-wide sidebar. Not ideal.

The fix: upload images at the exact size you need. Or use a client-side codecodecodecode setup with manually generated variants. The EmDash team will likely add auto-resizing in a future release — but for now, you control the output.

If you’re migrating from WordPress, check your theme’s image sizes. A 1200-pixel-wide featured image works fine on a blog post. A 2400-pixel-wide hero image does not belong in a thumbnail slot.

EmDash’s media library is simple, fast, and cost-predictable. It trades WordPress’s auto-resizing convenience for a cleaner architecture and zero egress fees. That trade works well — if you adjust your upload workflow to match.

Questions answered
  • How do you access the EmDash media library?Open the EmDash admin panel, click Media under the Content section, and you'll see a grid of all uploaded files.
  • What image formats does EmDash accept?EmDash accepts JPEG, PNG, WebP, GIF, and AVIF formats.
  • How do you replace an image without breaking links?Open the image, click Replace, and upload a new version. The URL remains unchanged.
Share This Article