Images & Media
Two schemas and one line make a podcast feed
The show is one record, the episodes are a collection, and the feed is a page whose entire content is a single call. Everything Apple requires is a required field, so a show the directories would reject cannot be saved.
Total CMS ships two schemas for a podcast. podcast holds the show, podcast-episode holds the episodes. Create the show collection from the podcast schema and tick Single Object Collection, because a show has exactly one record — opening the collection opens the record. Episodes go in a second collection you name yourself, and you pass that name to the feed call. Neither collection is created by Setup Default Collections, since most sites do not have a podcast.
Everything Apple requires is a required field, so the form will not save a show the directories would reject. Cover art must be square, between 1400 and 3000 pixels a side, and a JPG or PNG. Categories come from Apple's own list, and the first one is the primary category directories show. The Feed URL is the public address of the feed you are about to publish: apps re-fetch with it and the show's permanent identifier is derived from it, so it is set once. Owner email and the explicit answer are required too. Funding links, the locked flag and a new feed URL are optional.
An episode needs a title, a date and its audio. Upload the audio to the Audio File field and Total CMS hosts it, serves it through the streaming route apps expect, and counts every listen — the number is on the file in the admin and reads in Twig as episode.audio.count. Or fill in the Audio URL when the file lives on your own bucket, with the size in bytes apps use for download progress. If both are set the upload wins; an episode with neither is left out. Transcripts and chapter files work the same way, uploaded or linked.
The feed is a page whose whole content is one call. Add a Site Builder page at /podcast.xml, set its content type to application/rss+xml, and the call returns the show's details, the episodes newest first, an enclosure for each audio file, and the iTunes and Podcast Index tags. Open it in a browser, run it through a validator such as podba.se, then submit the URL to Apple Podcasts Connect, Spotify for Podcasters and the Podcast Index.
Record on Thursday for a Monday release: upload the audio, date the episode Monday, save. It stays out of the feed until the date arrives, then appears at the top the next time an app fetches.
What you get
The show is one record
Built as a Single Object Collection, so opening the collection opens the show. Episodes live in a separate collection you name yourself.
Apple's rules in the form
Cover art between 1400 and 3000 pixels square, categories picked from Apple's list, owner email and explicit. All required, all checked before the record saves.
Host it here or link it
Upload the audio and Total CMS serves it through the streaming route and counts every listen. Or point the Audio URL at your own bucket and supply the size in bytes.
Drafts and dated releases
The Draft box and a date in the future both keep an episode out of the feed. Date an episode ahead and it publishes itself when the day arrives.
One call is the whole feed
cms.feed.podcast() takes the show collection and the episodes collection and writes the enclosures, the iTunes tags and the Podcast Index tags.
In practice
One snippet
{# A Site Builder page at /podcast.xml, content type application/rss+xml #}
{{ cms.feed.podcast('podcast', 'episodes') }}
{# Options: link, language, copyright, and self to override the feed URL #}
{{ cms.feed.podcast('podcast', 'episodes', {link: '/', language: 'en-US'}) }}
The first argument is the show collection, the second the episodes collection. The feed's own address comes from the show's Feed URL field, so the page you create has to match it.
FAQ
Common questions
Can I host the audio somewhere other than Total CMS?
Yes. Leave the Audio File field empty and fill in the Audio URL with the address on your host or bucket, plus the file size in bytes so apps can show download progress. If both a file and a URL are set, the uploaded file wins.
I am moving from another podcast host. Will subscribers follow?
Copy the existing GUID out of your old feed into the show's Podcast GUID field before you change the Feed URL, and set New Feed URL so apps switch. Change the GUID instead and every listener's app sees a brand-new show. Episode IDs work the same way — the ID is the item's identity in the feed.
What about a show with real download numbers?
The streaming route is fine for a few hundred downloads an episode. Beyond that, serve the audio from your own storage bucket and use the Audio URL field: bandwidth stops being your web host's problem, and the byte-range requests apps rely on for scrubbing are handled by the bucket.
Does Total CMS count downloads?
For uploaded audio, yes. Every fetch through the streaming route adds one to the file's download count, shown on the file in the admin and available in Twig as episode.audio.count. It is a plain fetch count that includes validators and re-downloads, so read it as a trend rather than an audit. Linked audio never passes through Total CMS and is not counted.
Related features
- RSS & sitemap builders RSS, Atom and podcast feeds built in Twig from any query, plus opt-in XML sitemaps per collection and a discoverable index at /sitemap.xml.
- Singleton collections For content there is only ever one of — a homepage, an about page, global settings. One object, opened directly, with no list to navigate.
- Depot file management Multi-file fields with subfolders, size and type rules, and access control inherited from the collection. Files are served by URL, not hunted for over FTP.
Want the details? Read the Podcasting documentation →
Or keep browsing: every Total CMS feature →
Start Your Free 45-Day Trial