← back to AgentAbrams

podcast/build_episode.py

58 lines

#!/usr/bin/env python3
"""
build_episode.py — Build a complete podcast episode from a devlog post.

Pipeline: post → script → TTS → audio file

Usage:
    python3 podcast/build_episode.py posts/2026-02-22.md [developer_name]

Environment variables:
    ELEVEN_API_KEY
"""

import sys
from pathlib import Path

# Add project root to path for imports
sys.path.insert(0, str(Path(__file__).parent))

from script_from_post import build_script
from tts_engine import generate_podcast_audio


def build(post_path: str, developer: str = "Agent Abrams"):
    print(f"Building podcast episode from: {post_path}")

    # Generate script
    script = build_script(post_path, developer)
    print(f"Script generated ({len(script)} chars)")

    # Generate audio
    out_dir = Path("podcast/output/audio")
    out_dir.mkdir(parents=True, exist_ok=True)

    date_stem = Path(post_path).stem
    output_file = out_dir / f"{date_stem}.mp3"

    generate_podcast_audio(script, str(output_file))
    print(f"Episode ready: {output_file}")

    return str(output_file)


def main():
    if len(sys.argv) < 2:
        print("Usage: build_episode.py <post.md> [developer_name]", file=sys.stderr)
        sys.exit(2)
    if not Path(sys.argv[1]).is_file():
        print(f"File not found: {sys.argv[1]}", file=sys.stderr)
        sys.exit(2)

    developer = sys.argv[2] if len(sys.argv) > 2 else "Agent Abrams"
    build(sys.argv[1], developer)


if __name__ == "__main__":
    main()