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.py

  • JSON 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, default 1)

  • episode_id (string, required)

  • hosts (list of strings or null, optional): podcast host names injected into LLM prompts to prevent hallucinated speakers

  • inputs (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 to sources.reaper_media_dir

  • label (string or null): display label

  • role (string or null): optional role tag

  • provenance (list): provenance entries (see reference/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 in auphonic.presets from 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 transcribe also 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 with title and optional start/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.