YTBlog-Pilot is a powerful .NET 10 CLI tool that converts YouTube video transcripts into well-structured, engaging blog posts using AI models like Claude, GPT, and Gemini. Perfect for content creators, developers, and bloggers who want to repurpose video content.
✨ Features
- 🎥 Extract YouTube Transcripts - Automatically fetch video transcripts and metadata
- 🤖 AI-Powered Generation - Choose from 16+ AI models (Claude Sonnet/Haiku/Opus, GPT-5.x, Gemini)
- 🎯 Interactive Mode - Beautiful CLI with guided prompts and progress tracking
- 📦 Multi-Video Support - Process multiple videos or entire playlists at once
- 🎬 Playlist Expansion - Automatically extract all videos from YouTube playlists
- 📝 Customizable Templates - Use built-in or create your own Markdown templates
- 🎨 HTML Output - Generate styled HTML alongside Markdown
- 💾 Smart Caching - Avoid redundant API calls with intelligent caching (7-day TTL)
- 🔄 Retry Logic - Automatic exponential backoff for failed requests
- ⚡ Beautiful UI - Powered by Spectre.Console with progress bars and spinners
My Experience with GitHub Copilot CLI
GitHub Copilot CLI was used extensively throughout development and materially sped up iteration: it helped prototype and refine prompts, scaffold C# implementations (transcript chunking, retry policies, caching), generate Spectre.Console interactive flows, and accelerate unit test scaffolding and README content.
📸 Screenshots
Interactive Mode
Step-by-step guided experience with AI model selection
Multi-Video Processing
Process multiple videos or playlists in one go
Generated Output
Professional blog posts with YAML frontmatter and proper formatting
🚀 Quick Start
Prerequisites
Before you begin, ensure you have the following installed:
- .NET 10 SDK (Required)
# Verify installation
dotnet --version
# Should show: 10.0.x
- GitHub Copilot CLI (Required)
# Install Copilot CLI (standalone command)
# Visit: https://github.com/github/gh-copilot
# Authenticate
copilot login
# Test it works
copilot -p "Hello world" --allow-all
- GitHub Copilot Subscription (Required for AI generation)
Installation
Option 1: From Source (Recommended for now)
# 1. Clone the repository
git clone https://github.com/Milenpkurian/ytblog-pilot.git
cd ytblog-pilot
# 2. Build the project
dotnet build
# 3. Pack and install globally
dotnet pack VideoToBlog/VideoToBlog.csproj -c Release
dotnet tool install --global --add-source ./VideoToBlog/bin/Release YTBlogPilot.CLI
# 4. Verify installation
ytblog-pilot --version
📖 Usage
Interactive Mode (Recommended for Beginners)
Simply run the command without arguments:
ytblog-pilot
You'll be guided through:
-
AI Model Selection - Choose from 16+ models
- Claude Sonnet 4.5 (Recommended) - Balanced quality and speed
- Claude Haiku 4.5 (Fast & Cheap) - Quick processing
- Claude Opus 4.6 (Premium) - Highest quality
- GPT-5.2, GPT-5.1, GPT-5 variants
- Gemini 3 Pro
-
YouTube URLs - Enter one or more:
- Single video:
https://www.youtube.com/watch?v=VIDEO_ID - Multiple videos:
url1, url2, url3(comma or space separated) - Playlist:
https://www.youtube.com/playlist?list=PLAYLIST_ID - Mixed: Any combination
- Single video:
Template Selection - Choose your blog template (
default,custom, etc.)Output Directory - Specify where to save files (default:
./output)-
Additional Options
- Generate HTML alongside Markdown
- Overwrite existing files
- And more!
Command-Line Mode (For Automation)
# Basic usage
ytblog-pilot https://www.youtube.com/watch?v=dQw4w9WgXcQ
# With options
ytblog-pilot <url> --html --output ./myblog --template custom --verbose
# Force overwrite
ytblog-pilot <url> --force
Multi-Video Processing
# In interactive mode, enter multiple URLs:
# Single: https://www.youtube.com/watch?v=vid1
# Multiple: vid1_url, vid2_url, vid3_url
# Playlist: https://www.youtube.com/playlist?list=PLa1F2ddGya...
# The tool will:
# 1. Expand playlists to individual videos
# 2. Fetch transcripts for all videos
# 3. Generate a comprehensive blog post combining all content
🎨 Customization
Templates
Create custom templates in the templates/ directory:
---
title: {{TITLE}}
description: {{DESCRIPTION}}
date: {{DATE}}
tags: {{TAGS}}
reading_time: {{READING_TIME}}
video_url: {{VIDEO_URL}}
---
# {{TITLE}}
{{CONTENT}}
---
*This blog post was generated from a YouTube video transcript.*
Available Placeholders:
-
{{TITLE}}- Video title -
{{DESCRIPTION}}- Auto-generated description -
{{DATE}}- Current date -
{{TAGS}}- Auto-extracted tags -
{{READING_TIME}}- Estimated reading time -
{{VIDEO_URL}}- Original YouTube URL -
{{CONTENT}}- AI-generated blog content
Configuration
Edit VideoToBlog/appsettings.json:
{
"AppSettings": {
"CacheDirectory": ".cache",
"CacheTtlDays": 7,
"MaxTranscriptLength": 10000,
"ChunkSize": 1500,
"DefaultOutputDirectory": "./output",
"DefaultTemplate": "default",
"MaxRetries": 3,
"RetryDelaySeconds": 2,
"CopilotTimeout": 300
}
}
📂 Output Format
Generated blog posts include:
- YAML Frontmatter with metadata (title, description, date, tags, reading time)
- Properly Formatted Markdown with headings, lists, code blocks
- SEO-Friendly Description (auto-extracted from content)
- Auto-Generated Tags (extracted from title and content)
- Reading Time Estimate (based on word count)
- Link to Original Video
Example Output:
---
title: "10 Python Tips for Beginners"
description: "Learn essential Python tips and tricks that will boost your..."
date: 2026-02-08
tags: ["python", "tutorial", "programming"]
reading_time: 5 min read
video_url: https://www.youtube.com/watch?v=example
---
# 10 Python Tips for Beginners
## Introduction
In this comprehensive guide, we'll explore...
## 1. Use List Comprehensions
List comprehensions provide a concise way to create lists...
🛠️ Development
Building from Source
# Clone and build
git clone https://github.com/Milenpkurian/ytblog-pilot.git
cd ytblog-pilot
dotnet build
# Run tests
dotnet test
# Run locally (interactive mode)
dotnet run --project VideoToBlog/VideoToBlog.csproj
# Run locally (command-line mode)
dotnet run --project VideoToBlog/VideoToBlog.csproj -- <youtube-url> [options]
Project Structure
ytblog-pilot/
├── .github/
│ ├── assets/ # Screenshots and images
│ └── copilot-instructions.md # AI assistant guidelines
├── VideoToBlog/ # Main CLI project
│ ├── Commands/ # Interactive & ConvertCommand
│ ├── Services/ # Business logic
│ ├── Models/ # Data models
│ ├── Configuration/ # AppSettings
│ └── Exceptions/ # Custom exceptions
├── VideoToBlog.Tests/ # xUnit tests
├── templates/ # Blog post templates
├── output/ # Generated blog posts
├── .cache/ # Transcript cache
└── README.md
Running Tests
# Run all tests
dotnet test
# Run specific test
dotnet test --filter FullyQualifiedName~VideoToBlog.Tests.BlogPostServiceTests.GenerateBlogPostAsync_WithValidVideoInfo_ReturnsBlogPostWithCorrectTitle
# Run with verbose output
dotnet test --logger "console;verbosity=detailed"



Top comments (0)