Selfhost Podcasting can upload episode media to S3-compatible storage and use the uploaded object URL in the feed.
Find settings in Selfhost Podcasting > Manage Podcasts > open a podcast > Connect Services > S3 Buckets.
Supported Providers in the Admin UI
The admin UI includes:
- Cloudflare R2.
- Amazon S3.
- Wasabi.
The storage handler also contains support paths for other S3-compatible providers, but the user-facing settings currently expose the providers above.
What Bucket Storage Does
When enabled:
- You create or update an episode with media.
- The plugin queues a background upload job.
- The media file is uploaded to the configured bucket.
- The episode stores the bucket object URL.
- The RSS feed uses the bucket URL instead of the original local media URL.
- If an uploaded episode is deleted, the plugin queues a bucket delete job.
Required Fields
Common fields:
- Provider.
- Access key.
- Secret key.
- Bucket name.
Provider-specific fields:
- Cloudflare R2 requires Account ID and a public domain for generated object URLs.
- Amazon S3 requires Region.
- Wasabi requires Region.
Optional:
- API endpoint.
- Delete audio after S3 upload.
Cloudflare R2 Notes
For R2, the plugin requires a public domain. Without it, the plugin cannot create a usable public media URL.
The R2 endpoint is normally built from the Account ID:
https://account-id.r2.cloudflarestorage.com
The public media URL is built from the configured public domain plus the uploaded object key.
Amazon S3 Notes
For AWS, the plugin builds public object URLs like:
https://bucket-name.s3.region.amazonaws.com/object-key
Make sure your bucket permissions and object access policy allow podcast apps to read the media files.
Wasabi Notes
For Wasabi, the plugin builds the endpoint from the region when no custom endpoint is provided.
Make sure the bucket and object permissions allow public playback if you are publishing a public podcast.
Credentials and Security
The plugin encrypts stored bucket credentials using WordPress authentication keys and salts.
If WordPress salts change, stored credentials may no longer decrypt. Re-enter the S3 settings if the plugin reports that WordPress secret keys and salts changed.
Delete Audio After Upload
When enabled, the plugin deletes the local WordPress Media Library file after a successful bucket upload.
Use this only if:
- You trust the bucket configuration.
- You have backups.
- The bucket object URL works.
If you disable this option, local media remains in WordPress after upload.
Upload Timing
Uploads run in background jobs. The episode may save before the bucket URL appears.
Open the episode later or check the preview/feed after the background job completes.
Manual Upload From Episode Screen
If S3 storage is enabled and an episode has not yet uploaded media, the episode media field can show an upload-to-bucket action.
Use this when an automatic upload did not complete or when you want to retry after fixing bucket settings.
Error Log and Upload Suspension
Repeated terminal upload failures can trip an upload safety guard. When this happens, upload jobs for the podcast are suspended until you resume jobs from the plugin admin.
Check Error Log for details.
