episode.yaml schema¶
episode.yaml lives in the workspace root and stores per-episode metadata for inputs, audio sources, and agent
configuration.
Schema sources¶
Model:
src/podcast_pipeline/domain/episode_yaml.pyJSON schema helper:
src/podcast_pipeline/workspace_schemas.py
Example¶
schema_version: 1
episode_id: ep_001
hosts:
- Jochen
- Dominik
inputs:
transcript: /path/to/transcript.txt
chapters: /path/to/chapters.txt
sources:
reaper_media_dir: /path/to/ReaperMedia
tracks_glob: "*.flac"
tracks:
- track_id: host_01
path: Host 01.flac
label: Host 1
role: host
agents:
creator:
command: codex
args:
- --format
- json
kind: codex
auphonic:
preset: podcast_pipeline
input_file: /path/to/final_mix.wav
metadata:
title: "Automation & Podcasting"
subtitle: "Shipping faster episode pipelines"
summary: "A short summary for feeds and players."
description: |
Longer episode description text for Auphonic.
tags:
- automation
- podcasting
itunes_keywords: "podcast, automation"
Top-level fields¶
schema_version(int, default1)episode_id(string, required)hosts(list of strings or null, optional): podcast host names injected into LLM prompts to prevent hallucinated speakersinputs(object, optional)sources(object, optional)tracks(list of objects, optional)agents(object, optional)auphonic(object, optional)
inputs¶
transcript(string or null): path to a transcript text file.transcript_draft(string or null): path to the draft transcript text file (if available).transcript_final(string or null): path to the final transcript text file (if available).chapters(string or null): path to a chapters text file.chapters_draft(string or null): path to draft chapters text file (if available).chapters_final(string or null): path to final chapters text file (if available).Extra keys are allowed and preserved.
sources¶
reaper_media_dir(string or null): absolute path to the Reaper media directory.tracks_glob(string or null): glob for selecting track files.Extra keys are allowed and preserved.
tracks¶
Each track is an object with:
track_id(string, pattern[a-z][a-z0-9_]*)path(string): path to the audio file, relative tosources.reaper_media_dirlabel(string or null): display labelrole(string or null): optional role tagprovenance(list): provenance entries (seereference/review-protocol-schemas.md)Extra keys are allowed and preserved.
agents¶
Agent configuration mirrors the local CLI config in reference/configuration.md. episode.yaml overrides the global
config when both are present.
auphonic¶
Optional settings used by podcast produce --dry-run to build an Auphonic payload:
preset(string): Auphonic preset id or a key inauphonic.presetsfrom the global config.preset_id(string): Explicit preset id override (skips preset mapping).input_file(string or null): Path to the final mix audio file (relative to the workspace is ok).podcast transcribealso uses this as the preferred source audio input when present.input_files(list or null): Multiple input paths (preview only).metadata(object, optional): Metadata merged into the payload.title,subtitle,summary,description(string or null): Convenience overrides merged into metadata.tags(string or list): Tags merged into metadata.itunes_keywords(string or list): Keywords merged into metadata.chapters(list): Chapter objects withtitleand optionalstart/end(seconds).
If metadata fields are missing, the payload builder falls back to selected copy in copy/selected/ (for example
title_detail, subtitle_auphonic, summary_short, description, audio_tags, and itunes_keywords).
For podcast transcribe, if auphonic.input_file is not set, the command falls back to tracks and uses a single
preferred mix/master/final track. If multiple possible inputs exist, set auphonic.input_file explicitly.