Podcast Publisher¶
Masters the conversation recording into a publish-ready MP3 and publishes it as an episode in the event's own podcast RSS feed.
At a glance¶
| Needs | An approved title, a recording, and a complete show (set up on the event page) |
| Produces | A published episode: the mastered audio, an entry in the RSS feed, and a public episode page |
| Waits when | The title hasn't been approved yet, or the recording isn't available |
| Re-running | Safe — the episode keeps its identity and the audio is never re-mastered |
What it does¶
There is no external podcast host. The feed is ours, and an episode is a published conversation:
- One event is one show. The show — its title, description, artwork, category and owner email, all of which Apple, Spotify and YouTube read — is settings on the event, edited on the event's own page. It is not part of this step's settings.
- One conversation is one episode. An event holds many conversations, and they are the episodes; they may run through several different journeys and still land in the one show.
- One event is one feed, at a permanent address derived from the event's name.
This step's own settings are only how this journey publishes into that show — the publish delay, whether to append the transcript, and the episode defaults. Two journeys under the same event may answer those differently while sharing one show.
For each conversation that reaches the step, it:
- Finds the event's show and checks it is complete enough to publish, naming any missing field.
- Waits for an approved title.
- Masters the recording's audio — see below.
- Publishes the audio and records the episode.
- Builds the show notes and publishes the episode to the feed.
The audio is mastered, not just converted¶
Loudness is the single biggest difference in perceived quality between a homemade podcast and a professional one. A conversation recorded quietly plays quiet next to every other show in someone's queue, and the listener reaches for the volume knob.
So the audio is loudness-normalised in two passes — the first measures the recording, the second encodes using those measurements — rather than simply converted to MP3. A high-pass filter removes rumble and handling noise that is inaudible for speech but wastes bitrate. The result is encoded at a consistent quality, and the show's title, cover art and episode name are embedded in the file itself, so car stereos and podcast apps display them even where the feed does not reach.
This takes a few minutes per episode. That cost is paid once: the mastered audio is saved before anything else happens, so a later failure and re-run never repeats it.
Publishing can be scheduled¶
Publish delay schedules the episode forward instead of publishing the moment the step runs, which is how you line an episode up for a particular morning. The feed's caching is tied to the next scheduled publication, so an episode appears on time rather than whenever a cache happens to expire.
How it behaves¶
Episode identity never changes. Each episode is given a permanent identifier the first time it publishes, and nothing afterwards changes it — not editing the title, not replacing the audio, not re-running the step. This matters more than it sounds: podcast directories key on that identifier, so a change makes every app treat the episode as brand new and show it to subscribers a second time.
Published text is a snapshot. The title and description are copied into the episode when it publishes. Editing the publishing fields afterwards does not silently rewrite a published episode; re-running the step is the deliberate way to refresh it.
Re-running is safe. An already-published conversation is recognised immediately: the step refreshes the title and description if they changed, and returns. It does not re-master, and it does not republish.
Resetting the step withdraws the episode; it does not erase it. The episode leaves the feed and its page reports that it was withdrawn, but its identity and audio are kept. Erasing it would orphan the copies that listeners' apps already hold, and would let a later run publish the same episode under a new identity.
Troubleshooting¶
| Symptom | Likely cause | What to do |
|---|---|---|
| Waiting with no error | The title hasn't been approved | Normal. Approve the content. |
| Error listing show fields | The show is incomplete | Fill in the named fields on the event's Podcast section. Waiting won't fix it — a feed can't publish without them. |
| "This event has no podcast show yet" | Nothing has set the show up | Open the event page and press Set up the podcast. |
| Error about the category | The category isn't one Apple recognises | Pick from the dropdown; Apple rejects a feed with an unknown category. |
| Error that the recording is missing | The recording isn't on disk or in storage | Check the recording steps ran. |
| Episode published but not visible in Apple or Spotify | Normal delay | Directories refresh on their own schedule, often hours. The canonical feed is already correct. |
| Artwork not updating in Apple | Apple only re-reads artwork when its address changes | Publish the artwork as a new version rather than replacing the existing file. |
| Episode appears twice in listeners' apps | Its identifier changed | Should be impossible; report it. Check whether the record was erased rather than withdrawn. |
| Audio plays but can't be skipped through | The media host isn't answering range requests | An administrator checks the media host configuration. |
The show — set up on the event page¶
Open the event, find the Podcast section, and press Set up the podcast (or Edit show). Everything below is public: it is what podcast directories read.
| Field | Notes |
|---|---|
| Show title | The show's name in every directory |
| Show description | Required |
| Cover artwork URL | Square, 1400×1400 to 3000×3000, JPEG or PNG, RGB with no transparency. Generate artwork renders one from the event's card pack |
| Show website | Optional; the show page is used when empty |
| Owner name | Shown as the publisher |
| Owner email | Appears publicly in the feed — use an organisational address. Spotify and YouTube both verify ownership by emailing a code to it, so neither can be connected without it |
| Author name | Defaults to the owner name |
| Language | e.g. en, en-gb |
| Category / subcategory | From Apple's published list |
| Show type | Episodic or serial |
| Explicit | Show-wide default |
The form never refuses an incomplete show — a show can be saved half-filled while you decide what it is called. Publishing is what requires the fields to be there, and it names the ones that are missing. Diagnostics on the same section checks the feed as an outside directory sees it.
Step config fields¶
Publishing behaviour for this journey. The show is not here.
| Field | Public? | Notes |
|---|---|---|
| Season | Yes | Blank uses the publication year |
| Episode type | Yes | Full, trailer or bonus |
| Publish delay (hours) | No | 0 publishes immediately |
| Append transcript to show notes | No | Truncated to the 4000-character description limit |
Technical reference¶
| Step type | podcast_publisher |
| Runs after | Content generation and approval; optionally cloud_storage_migrator |
| Reads | fields.title (the gate), fields.subtitle, fields.youtube_description |
| Writes | records.podcast |
| Needs on the agent | Nothing. Storage credentials are only needed if the recording is read from cloud storage |
| Runtime requirement | FFmpeg |
| Feed address | /podcasts/<event-slug>/feed.xml — permanent once submitted to a directory |
| Episode page | /podcasts/<event-slug>/<episode-id>/ — what publication notifications link to |
Connecting the show to Apple, Spotify, YouTube and others is a one-time manual procedure: see the platform connection guide.