# Export and delivery Podcast **delivery** (export) pushes your RSS feed and episode audio to a remote destination (S3, R2, FTP, SFTP, WebDAV, IPFS, SMB) so listeners can subscribe and download. Credentials are encrypted at rest with the instance's `HARBORFM_SECRETS_KEY`. Full request-body examples and options are in the main [README](../blob/main/README.md) ("Export" section). ## Podcast delivery overview **Podcast delivery** (export) uploads your show's RSS feed and episode audio files to a remote server or storage. You configure one or more **exports** per show; each export has a destination (e.g. S3, FTP) and credentials. ### Where to configure 1. Open the **show** (podcast) and go to **Settings** (or the show's delivery/export section). 2. Find **Podcast Delivery** (or "Export," "Deploy"). 3. **Add** an export and choose the **mode** (S3, FTP, SFTP, WebDAV, IPFS, SMB). Fill in the required fields (bucket/path, credentials, and optional public base URL). 4. Save. Credentials are stored encrypted using the instance's `HARBORFM_SECRETS_KEY`. ### Deploying After you've built an episode (**Build Final Episode**) and optionally published it, **deploy** so the updated feed and new/changed audio files are pushed to the remote. When the episode has chapters, **chapters.json** is included in the deploy. The UI has a Deploy/Push action for each export. Only changed files are uploaded (the app uses ETag or similar to skip unchanged files). ### Public base URL Many export types let you set a **public base URL** (e.g. your CDN or bucket URL). The generated RSS feed will use this URL for the feed itself and for episode audio enclosures, so subscribers and directories get the correct links. ### Analytics note If you serve your podcast from a **remote** destination (e.g. S3 or your own CDN), the built-in analytics in HarborFM do not track plays for those remote files. Analytics apply to listens that go through the HarborFM host. See [Analytics](Analytics.md) and the main [README](../blob/main/README.md). ### See also - [S3 and R2](#s3-and-r2-export) - [FTP, SFTP, WebDAV, IPFS, SMB](#ftp-sftp-webdav-ipfs-and-smb-export) - [Making the final episode](Segments.md#making-the-final-episode) - [Episode archive and backup](Episode-archive-and-backup.md) - Main [README](../blob/main/README.md) - Export section (full JSON examples and options) ## Episode archive and backup Episode **Archive** and **Backup** use a separate **Archive Settings** destination on the show (not a Podcast Delivery row). They upload a project zip for offloading or remote copies. Full steps: [Episode archive and backup](Episode-archive-and-backup.md). ## S3 and R2 export You can deploy your RSS feed and episode audio to **AWS S3**, **Cloudflare R2**, **Backblaze B2**, or any **S3-compatible** storage. ### S3 (AWS) Configure an export with **mode** `S3` (or "S3" in the UI). You'll need: - **Bucket** name and optional **prefix** (folder path). - **Region** (e.g. `us-east-1`). - **Access key ID** and **Secret access key** (IAM user with read/write to the bucket). - **Public base URL** (optional) - e.g. `https://my-bucket.s3.amazonaws.com` or your CloudFront URL so the feed and enclosures use the correct listener-facing URLs. ### R2 (Cloudflare) Use the same S3-compatible mode with R2-specific settings: - **Bucket**, **prefix**, **region** (use `auto` for R2). - **Endpoint URL** - e.g. `https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com`. - R2 **Access key ID** and **Secret access key** (from R2 dashboard). - **Public base URL** - e.g. your R2 public bucket URL or custom domain. ### B2 (Backblaze) Again use S3-compatible mode: - **Bucket**, **prefix**, **region** (e.g. `us-west-002` for B2). - **Endpoint URL** - e.g. `https://s3.us-west-002.backblazeb2.com`. - B2 **key ID** and **application key**. - **Public base URL** - your B2 bucket URL or custom domain. ### See also - [Podcast delivery overview](#podcast-delivery-overview) - [FTP, SFTP, WebDAV, IPFS, SMB](#ftp-sftp-webdav-ipfs-and-smb-export) - Main [README](../blob/main/README.md) - Export section (full JSON examples for S3, R2, B2) ## FTP, SFTP, WebDAV, IPFS, and SMB export Besides S3-compatible storage, HarborFM can deploy to **FTP**, **SFTP**, **WebDAV**, **IPFS**, and **SMB**. Configure each as a separate export in **Podcast Delivery** on the show settings. ### FTP - **Mode:** FTP. - **Host**, **port** (usually 21), **username**, **password**. - **Path** - Remote directory for the feed and audio (e.g. `/public/podcast`). - **Secure** - Use TLS if your server supports it. - **Public base URL** - Optional; URL where the feed and files will be served (e.g. `https://cdn.example.com/podcast`). ### SFTP - **Mode:** SFTP. - **Host**, **port** (usually 22), **username**, **password** (or **private key** PEM for key-based auth). - **Path** - Remote directory. - **Public base URL** - Optional. ### WebDAV - **Mode:** WebDAV. - **URL** - WebDAV base URL (e.g. `https://webdav.example.com/remote.php/dav/files/user/`). - **Username**, **password**. - **Path** - Subpath for the podcast (e.g. `podcast/`). - **Public base URL** - Optional. ### IPFS - **Mode:** IPFS. - **API URL** - Your IPFS node API (e.g. `http://127.0.0.1:5001`). Optional **API key**, **username**, **password** if the node is behind auth (e.g. Caddy). - **Path** - Optional path/prefix. - **Gateway URL** - Public gateway for resolving content (e.g. `https://ipfs.io`). - **Public base URL** - Optional; e.g. your own gateway. ### SMB - **Mode:** SMB. - **Host**, **port** (default 445), **share** name, **username**, **password**, optional **domain** (for Windows domain auth). - **Path** - Path within the share (e.g. `feed/`). - **Public base URL** - Optional; URL where you serve the feed and files (e.g. via a web server in front of the share). ### See also - [Podcast delivery overview](#podcast-delivery-overview) - [S3 and R2](#s3-and-r2-export) - Main [README](../blob/main/README.md) - Export section (full JSON examples for each mode)