DEV Community

Cover image for YTBlog‑Pilot — Convert YouTube videos into polished, SEO-ready blog posts
Milen
Milen

Posted on

YTBlog‑Pilot — Convert YouTube videos into polished, SEO-ready blog posts

GitHub Copilot CLI Challenge Submission

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:

  1. .NET 10 SDK (Required)
   # Verify installation
   dotnet --version
   # Should show: 10.0.x
Enter fullscreen mode Exit fullscreen mode
  1. 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
Enter fullscreen mode Exit fullscreen mode
  1. 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
Enter fullscreen mode Exit fullscreen mode

📖 Usage

Interactive Mode (Recommended for Beginners)

Simply run the command without arguments:

ytblog-pilot
Enter fullscreen mode Exit fullscreen mode

You'll be guided through:

  1. 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
  2. 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
  3. Template Selection - Choose your blog template (default, custom, etc.)

  4. Output Directory - Specify where to save files (default: ./output)

  5. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

🎨 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.*
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode

📂 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...
Enter fullscreen mode Exit fullscreen mode

🛠️ 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]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Top comments (0)