Generate podcast metadata (titles, descriptions, chapters, SRT subtitles) from transcripts using AI powered by the GitHub Copilot SDK.
- π― 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
- .NET 10.0 SDK or later
- GitHub Copilot CLI installed and authenticated
macOS and Linux (Homebrew):
brew install copilot-cliWindows (WinGet):
winget install GitHub.CopilotAll platforms (npm, requires Node.js 22+):
npm install -g @github/copilotmacOS and Linux (install script):
curl -fsSL https://gh.io/copilot-install | bashThen authenticate:
copilot
# Type /login and follow the promptsdnx PodcastMetadataGeneratordotnet tool install -g PodcastMetadataGeneratorgit clone https://github.com/jamesmontemagno/podcast-metadata-generator.git
cd podcast-metadata-generator
dotnet build PodcastMetadataGenerator.sln# If installed as a tool:
podcast-metadata-generator
# Or from source:
cd src/Console
dotnet runpodcast-metadata-generator /path/to/transcript.txt
# Or from source:
dotnet run -- /path/to/transcript.txtA 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.
# From repository root
cd src/Blazor
dotnet runThen open https://localhost:5001 in your browser.
- Drag-and-drop file upload
- Real-time streaming AI output
- Tabbed results view
- Settings persistence via localStorage
00:00.00 Speaker 1: Hello and welcome to the show.
00:15.50 Speaker 2: Thanks for having me!
00:00:00 - 00:00:15
Hello and welcome to the show.
00:00:15 - 00:00:30
Thanks for having me!
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!
Any text file without timestamps will be processed as plain text. Note: Chapter generation and SRT conversion require timestamps.
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 |
Access settings from the main menu to configure:
- 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
- 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.
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
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- GitHub Copilot SDK for AI integration
- Spectre.Console for the beautiful terminal UI
- Inspired by jamesmontemagno/app-podcast-assistant