Uploading episode audio files to VeloCMS
Learn how to upload MP3 or M4A episode audio, set the audio URL on your post, and verify the player renders correctly on the Podcast theme.
VeloCMS stores podcast audio as standard media files alongside images. Every post in the Podcast theme exposes an Audio URL field — fill it in and the built-in AudioPlayer renders automatically on the public episode page, complete with play, pause, seek, and volume controls.
Step 1 — Upload your audio file to the Media Library
Go to Admin > Media and click the Upload button. VeloCMS supports MP3, M4A, and OGG up to 500 MB per file. Larger files (live recordings, uncompressed WAV) should be compressed to 128–192 kbps MP3 before uploading — this keeps streaming smooth without noticeable quality loss for spoken-word audio.
- Accepted formats: .mp3, .m4a, .ogg
- Maximum file size: 500 MB per upload
- Recommended bitrate: 128 kbps for interviews, 192 kbps for music-heavy productions
- Stereo is fine; mono reduces file size by half with no perceivable quality loss for speech
Files are stored in Cloudflare R2 and served via a CDN edge node closest to the listener. Streaming starts in under 200ms from anywhere in the world on a standard connection.
Step 2 — Copy the file URL
After the upload completes, the media item shows a public URL in the format https://media.velocms.org/tenant-id/filename.mp3. Click the copy icon next to the URL. You will paste this into the post settings in the next step.
Step 3 — Paste the audio URL into the episode post
Open the post editor for your episode (or create a new post). In the right-hand Settings panel, scroll down to the Podcast section. Paste the URL you copied into the Audio URL field. The field also accepts any externally hosted MP3 URL — Anchor.fm, Buzzsprout, and other hosts all work here as long as the URL ends in a supported extension.
Step 4 — Set duration and file size
Two optional fields appear below Audio URL: Duration (in seconds, e.g. 3600 for a one-hour episode) and File Size (in bytes). These fields populate the iTunes RSS feed enclosure element, which podcast apps like Spotify, Apple Podcasts, and Overcast use to display episode length and enable pre-download. If you leave them blank the feed remains valid but the duration badge in podcast apps shows Unknown.
- Duration format: integer seconds — e.g. 1800 for 30 minutes
- File size: integer bytes — find this in Finder (macOS) or File Explorer (Windows) by right-clicking the file and choosing Get Info or Properties
- Both fields are optional but recommended for Apple Podcast Connect compliance
Step 5 — Publish and verify the player
Publish the post. Visit the episode page on your public blog (the Podcast theme renders it at /blog/your-episode-slug). You should see the AudioPlayer bar rendered directly below the episode title, before the show notes body. It includes a play button, a waveform progress bar, a time counter, and a volume control. If you do not see the player, verify that the Audio URL field is non-empty and starts with https://.
HTTP (non-HTTPS) audio URLs will be blocked by browsers due to mixed-content policy. Always use the HTTPS version of your audio file URL.
Troubleshooting
- Player not visible: confirm the active theme is Podcast (Admin > Themes). Other themes do not render the podcast-specific layout.
- Audio will not play: check that the file URL is publicly accessible — open it in a private browser tab. If it returns a 403, the R2 bucket policy needs to be set to public.
- Feed missing enclosure: confirm the Audio URL and File Size fields are filled in. The RSS feed is at yourblog.velocms.org/podcast.xml.
- Duration shows wrong value: duration is stored in seconds. A value of 3660 renders as 1:01:00 in podcast apps.