Skip to content

jamesmontemagno/podcast-metadata-generator

Repository files navigation

πŸŽ™οΈ Podcast Metadata Generator

Generate podcast metadata (titles, descriptions, chapters, SRT subtitles) from transcripts using AI powered by the GitHub Copilot SDK.

.NET License GitHub Copilot

Screenshot 2026-02-13 at 11 29 28β€―AM Screenshot 2026-02-13 at 11 29 09β€―AM

✨ Features

  • 🎯 Title Generation - Get multiple creative title suggestions for your episode
  • πŸ“ Description Generation - Create short, medium, and long descriptions optimized for different platforms
  • πŸ“‘ Chapter Generation - Auto-generate YouTube-compatible chapter markers with timestamps
  • 🎬 SRT Conversion - Convert transcripts to valid SRT subtitle format
  • πŸ”„ Multiple Transcript Formats - Support for Zencastr, time-range, SRT formats, and plain text
  • πŸ“‚ File Browser - Built-in file browser or drag-and-drop support
  • ⚑ Streaming Responses - Watch AI responses generate in real-time
  • πŸ€– Model Selection - Choose from multiple AI models (GPT-5, Claude, Gemini)
  • βš™οΈ Configurable Settings - Customize generation parameters and save preferences

πŸ“‹ Prerequisites

Installing GitHub Copilot CLI

macOS and Linux (Homebrew):

brew install copilot-cli

Windows (WinGet):

winget install GitHub.Copilot

All platforms (npm, requires Node.js 22+):

npm install -g @github/copilot

macOS and Linux (install script):

curl -fsSL https://gh.io/copilot-install | bash

Then authenticate:

copilot
# Type /login and follow the prompts

πŸš€ Installation

Just run it with .NET 10+ (Recommended)

dnx PodcastMetadataGenerator

As a .NET Tool

dotnet tool install -g PodcastMetadataGenerator

From Source

git clone https://github.com/jamesmontemagno/podcast-metadata-generator.git
cd podcast-metadata-generator
dotnet build PodcastMetadataGenerator.sln

πŸ“š Additional Docs

πŸ“– Usage

Console App - Interactive Mode

# If installed as a tool:
podcast-metadata-generator

# Or from source:
cd src/Console
dotnet run

Console App - With a Transcript File

podcast-metadata-generator /path/to/transcript.txt

# Or from source:
dotnet run -- /path/to/transcript.txt

🌐 Blazor Demo (Local Only)

A web UI demo is included for local development and presentations.

⚠️ Local Use Only: The Blazor app uses your local Copilot authentication and is not designed for deployment or multi-user access.

Running the Blazor Demo

# From repository root
cd src/Blazor
dotnet run

Then open https://localhost:5001 in your browser.

Features

  • Drag-and-drop file upload
  • Real-time streaming AI output
  • Tabbed results view
  • Settings persistence via localStorage

🎯 Supported Transcript Formats

Zencastr Format

00:00.00 Speaker 1: Hello and welcome to the show.
00:15.50 Speaker 2: Thanks for having me!

Time-Range Format

00:00:00 - 00:00:15
Hello and welcome to the show.

00:00:15 - 00:00:30
Thanks for having me!

SRT Format

1
00:00:00,000 --> 00:00:15,000
Hello and welcome to the show.

2
00:00:15,000 --> 00:00:30,000
Thanks for having me!

Plain Text

Any text file without timestamps will be processed as plain text. Note: Chapter generation and SRT conversion require timestamps.

πŸ“ Output Files

When you save results, the following files are generated:

File Description
titles.txt List of generated title suggestions
description-short.txt Short description (~50 words)
description-medium.txt Medium description (~150 words)
description-long.txt Long description (~300 words)
chapters.txt YouTube-compatible chapter markers
subtitles.srt SRT subtitle file
manifest.json JSON manifest with all metadata

βš™οΈ Configuration

Access settings from the main menu to configure:

General Settings

  • AI Model - Select from available Copilot models (dynamically fetched from CLI)
  • Output Directory - Default location for saved files
  • Podcast Name - Your podcast name (used in prompts for better context)
  • Host Names - Host names (used in prompts)
  • Episode Context - Add guest names, topics, or other context to improve generation

Generation Settings

  • Title Count - Number of title suggestions to generate (default: 5)
  • Title Max Words - Maximum words per title (default: 10)
  • Description Lengths - Word counts for short/medium/long descriptions (default: 50/150/300)
  • Chapter Range - Min/max chapters to generate (default: 3-12)
  • Chapters per 30 min - Target density of chapters (default: 5)
  • Chapter Title Words - Max words per chapter title (default: 8)

Settings are automatically saved to ~/.config/podcast-metadata-generator/settings.json.

πŸ—οΈ Project Structure

podcast-metadata-generator/
β”œβ”€β”€ PodcastMetadataGenerator.sln     # Solution file
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ Core/                        # Shared class library
β”‚   β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”‚   β”œβ”€β”€ AppSettings.cs       # Configuration and generation settings
β”‚   β”‚   β”‚   β”œβ”€β”€ GenerationResult.cs  # Results container
β”‚   β”‚   β”‚   β”œβ”€β”€ Manifest.cs          # JSON manifest structure
β”‚   β”‚   β”‚   β”œβ”€β”€ Transcript.cs        # Transcript model
β”‚   β”‚   β”‚   └── TranscriptSegment.cs # Segment model
β”‚   β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”‚   β”œβ”€β”€ CopilotAuthService.cs   # CLI authentication checks
β”‚   β”‚   β”‚   β”œβ”€β”€ MetadataGenerator.cs    # AI generation via Copilot SDK
β”‚   β”‚   β”‚   β”œβ”€β”€ OutputService.cs        # File output handling
β”‚   β”‚   β”‚   β”œβ”€β”€ SettingsService.cs      # Settings persistence
β”‚   β”‚   β”‚   β”œβ”€β”€ SrtConverter.cs         # SRT format conversion
β”‚   β”‚   β”‚   └── TranscriptParser.cs     # Multi-format transcript parsing
β”‚   β”‚   └── Prompts/
β”‚   β”‚       └── PromptTemplates.cs      # AI prompt templates
β”‚   β”œβ”€β”€ Console/                     # Console application
β”‚   β”‚   β”œβ”€β”€ UI/
β”‚   β”‚   β”‚   β”œβ”€β”€ AppWorkflow.cs          # Main application workflow
β”‚   β”‚   β”‚   └── ConsoleUI.cs            # Spectre.Console UI helpers
β”‚   β”‚   └── Program.cs                  # Console entry point
β”‚   └── Blazor/                      # Blazor Server demo (local only)
β”‚       β”œβ”€β”€ Components/
β”‚       β”‚   β”œβ”€β”€ Layout/                 # MainLayout, NavMenu
β”‚       β”‚   └── Pages/                  # Home, Generate, Settings
β”‚       β”œβ”€β”€ wwwroot/
β”‚       β”‚   └── css/app.css
β”‚       └── Program.cs                  # Blazor entry point
└── data/                            # Sample transcripts

🀝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors