feat: add 4 universal skills from cli-ai-skills
- Add audio-transcriber skill (v1.2.0): Transform audio to Markdown with Whisper - Add youtube-summarizer skill (v1.2.0): Generate summaries from YouTube videos - Update prompt-engineer skill: Enhanced with 11 optimization frameworks - Update skill-creator skill: Improved automation workflow All skills are zero-config, cross-platform (Claude Code, Copilot CLI, Codex) and follow Quality Bar V4 standards. Source: https://github.com/ericgandrade/cli-ai-skills
This commit is contained in:
365
skills/youtube-summarizer/README.md
Normal file
365
skills/youtube-summarizer/README.md
Normal file
@@ -0,0 +1,365 @@
|
||||
# 🎥 youtube-summarizer
|
||||
|
||||
> Extract transcripts from YouTube videos and generate comprehensive, detailed summaries
|
||||
|
||||
**Version:** 1.2.0
|
||||
**Status:** ✨ Zero-Config | 🌍 Universal
|
||||
**Platforms:** GitHub Copilot CLI, Claude Code
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The **youtube-summarizer** skill automates the extraction of YouTube video transcripts and generates verbose, structured summaries using the STAR + R-I-S-E framework. Perfect for documenting educational content, lectures, tutorials, or any informational videos without rewatching them.
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
- 🎯 **Automatic transcript extraction** using `youtube-transcript-api`
|
||||
- ✅ **Video validation** - Checks if video is accessible and has transcripts
|
||||
- 🌍 **Multi-language support** - Prefers Portuguese, falls back to English
|
||||
- 📊 **Comprehensive summaries** - Prioritizes detail and completeness
|
||||
- 📝 **Structured output** - Markdown with headers, sections, insights
|
||||
- 🔍 **Metadata included** - Video title, channel, duration, URL
|
||||
- ⚡ **Error handling** - Clear messages for all failure scenarios
|
||||
- 🛠️ **Dependency management** - Offers to install requirements automatically
|
||||
- 📊 **Progress gauge** - Visual processing tracker across all steps
|
||||
- 💾 **Flexible save options** - Summary-only, summary+transcript, or transcript-only (NEW v1.2.0)
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Triggers
|
||||
|
||||
Activate this skill with any of these phrases:
|
||||
|
||||
```bash
|
||||
# English
|
||||
copilot> summarize this video: https://www.youtube.com/watch?v=VIDEO_ID
|
||||
copilot> summarize youtube video https://youtu.be/VIDEO_ID
|
||||
copilot> extract youtube transcript https://youtube.com/watch?v=VIDEO_ID
|
||||
|
||||
# Portuguese (also supported)
|
||||
copilot> resume este video: https://www.youtube.com/watch?v=VIDEO_ID
|
||||
```
|
||||
|
||||
### First-Time Setup
|
||||
|
||||
The skill will automatically check for dependencies and offer to install them:
|
||||
|
||||
```bash
|
||||
⚠️ youtube-transcript-api not installed
|
||||
|
||||
Would you like me to install it now?
|
||||
- [x] Yes - Install with pip
|
||||
- [ ] No - I'll install manually
|
||||
```
|
||||
|
||||
Select "Yes" and the skill handles installation automatically.
|
||||
|
||||
---
|
||||
|
||||
## Use Cases
|
||||
|
||||
### 1. **Educational Video Documentation**
|
||||
|
||||
```bash
|
||||
copilot> summarize this video: https://www.youtube.com/watch?v=abc123
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Comprehensive summary of lecture content
|
||||
- Key concepts and terminology
|
||||
- Examples and practical applications
|
||||
- Resources mentioned in the video
|
||||
|
||||
### 2. **Technical Tutorial Analysis**
|
||||
|
||||
```bash
|
||||
copilot> summarize youtube video https://youtu.be/xyz789
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Step-by-step breakdown of tutorial
|
||||
- Code snippets and commands mentioned
|
||||
- Best practices highlighted
|
||||
- Troubleshooting tips documented
|
||||
|
||||
### 3. **Conference Talk Reference**
|
||||
|
||||
```bash
|
||||
copilot> extract youtube transcript https://youtube.com/watch?v=def456
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Speaker insights and arguments
|
||||
- Statistics and data points
|
||||
- Case studies and examples
|
||||
- Q&A session summary
|
||||
|
||||
### 4. **Language Learning Content**
|
||||
|
||||
```bash
|
||||
copilot> summarize youtube video https://youtu.be/ghi789
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Vocabulary and expressions used
|
||||
- Grammar points explained
|
||||
- Cultural references
|
||||
- Practice exercises mentioned
|
||||
|
||||
### 5. **Research and Investigation**
|
||||
|
||||
```bash
|
||||
copilot> summarize youtube video https://www.youtube.com/watch?v=jkl012
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Research findings presented
|
||||
- Methodology explained
|
||||
- Results and conclusions
|
||||
- Future work suggestions
|
||||
|
||||
---
|
||||
|
||||
## Output Structure
|
||||
|
||||
Every summary follows this comprehensive structure:
|
||||
|
||||
```markdown
|
||||
# [Video Title]
|
||||
|
||||
**Canal:** [Channel Name]
|
||||
**Duração:** [Duration]
|
||||
**URL:** [Video URL]
|
||||
**Data de Publicação:** [Date]
|
||||
|
||||
---
|
||||
|
||||
## 📊 Síntese Executiva
|
||||
[High-level overview, 2-3 paragraphs]
|
||||
|
||||
---
|
||||
|
||||
## 📝 Resumo Detalhado
|
||||
### [Topic 1]
|
||||
[Detailed analysis with examples, data, quotes]
|
||||
|
||||
### [Topic 2]
|
||||
[Continued breakdown...]
|
||||
|
||||
---
|
||||
|
||||
## 💡 Principais Insights
|
||||
- **Insight 1:** [Explanation]
|
||||
- **Insight 2:** [Explanation]
|
||||
|
||||
---
|
||||
|
||||
## 📚 Conceitos e Terminologia
|
||||
- **Term 1:** [Definition]
|
||||
- **Term 2:** [Definition]
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Recursos Mencionados
|
||||
- [Resource 1]
|
||||
- [Resource 2]
|
||||
|
||||
---
|
||||
|
||||
## 📌 Conclusão
|
||||
[Final synthesis and key takeaways]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
- **Python 3.x** (usually pre-installed on macOS/Linux)
|
||||
- **pip** (Python package manager)
|
||||
- **[youtube-transcript-api](https://github.com/jdepoix/youtube-transcript-api)** by [Julien Depoix](https://github.com/jdepoix) (installed automatically by the skill)
|
||||
|
||||
### Manual Installation (Optional)
|
||||
|
||||
If you prefer to install dependencies manually:
|
||||
|
||||
```bash
|
||||
pip install youtube-transcript-api
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Supported URL Formats
|
||||
|
||||
The skill recognizes these YouTube URL formats:
|
||||
|
||||
- `https://www.youtube.com/watch?v=VIDEO_ID`
|
||||
- `https://youtube.com/watch?v=VIDEO_ID`
|
||||
- `https://youtu.be/VIDEO_ID`
|
||||
- `https://m.youtube.com/watch?v=VIDEO_ID`
|
||||
|
||||
---
|
||||
|
||||
## Limitations
|
||||
|
||||
### Videos That Work
|
||||
|
||||
✅ Public videos with auto-generated captions
|
||||
✅ Videos with manual subtitles/captions
|
||||
✅ Videos with transcripts in any supported language
|
||||
|
||||
### Videos That Don't Work
|
||||
|
||||
❌ Private or unlisted videos
|
||||
❌ Videos with transcripts disabled
|
||||
❌ Age-restricted videos (may require authentication)
|
||||
❌ Videos without any captions/subtitles
|
||||
|
||||
---
|
||||
|
||||
## Error Messages
|
||||
|
||||
### No Transcript Available
|
||||
|
||||
```
|
||||
❌ No transcript available for this video
|
||||
|
||||
This skill requires videos with auto-generated captions or manual subtitles.
|
||||
Unfortunately, transcripts are not enabled for this video.
|
||||
```
|
||||
|
||||
**Solution:** Try a different video that has captions enabled.
|
||||
|
||||
### Invalid URL
|
||||
|
||||
```
|
||||
❌ Invalid YouTube URL format
|
||||
|
||||
Expected format examples:
|
||||
- https://www.youtube.com/watch?v=VIDEO_ID
|
||||
- https://youtu.be/VIDEO_ID
|
||||
```
|
||||
|
||||
**Solution:** Ensure you're providing a complete, valid YouTube URL.
|
||||
|
||||
### Video Not Accessible
|
||||
|
||||
```
|
||||
❌ Unable to access video
|
||||
|
||||
Possible reasons:
|
||||
1. Video is private or unlisted
|
||||
2. Video has been removed
|
||||
3. Invalid video ID
|
||||
```
|
||||
|
||||
**Solution:** Verify the URL and ensure the video is public.
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Q: How long does it take to generate a summary?
|
||||
|
||||
**A:** Depends on video length:
|
||||
- Short videos (5-10 min): 30-60 seconds
|
||||
- Medium videos (20-40 min): 1-2 minutes
|
||||
- Long videos (60+ min): 2-5 minutes
|
||||
|
||||
### Q: Can I summarize videos in languages other than English/Portuguese?
|
||||
|
||||
**A:** Yes! The skill attempts to extract transcripts in the video's original language. If unavailable, it falls back to English.
|
||||
|
||||
### Q: Will this work with YouTube Music videos?
|
||||
|
||||
**A:** Only if the music video has captions/transcripts enabled. Most music videos don't have transcripts.
|
||||
|
||||
### Q: Can I customize the summary length?
|
||||
|
||||
**A:** The skill prioritizes completeness by design (verbose summaries). If you need shorter summaries, you can ask the AI to condense the output afterward.
|
||||
|
||||
### Q: Does this download the video?
|
||||
|
||||
**A:** No. Only the text transcript is extracted via YouTube's API. No video files are downloaded.
|
||||
|
||||
### Q: Can I save the summary to a file?
|
||||
|
||||
**A:** Yes! After the summary is generated, the skill offers flexible save options:
|
||||
- **Summary only** - Markdown file with structured summary
|
||||
- **Summary + transcript** - Markdown file with summary and raw transcript appended
|
||||
- **Transcript only** - Plain text file with raw transcript (NEW in v1.2.0)
|
||||
- **Display only** - No files saved, summary shown in terminal
|
||||
|
||||
Files are saved as `resumo-{VIDEO_ID}-{YYYY-MM-DD}.md` (summary) or `transcript-{VIDEO_ID}-{YYYY-MM-DD}.txt` (transcript-only).
|
||||
|
||||
### Q: When should I save just the transcript?
|
||||
|
||||
**A:** Use the transcript-only option when you:
|
||||
- Need raw content for further analysis
|
||||
- Want to process the text with other tools
|
||||
- Prefer to create your own summary later
|
||||
- Need the transcript for documentation or archival purposes
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Global Installation (Recommended)
|
||||
|
||||
Install the skill globally to use it across all projects:
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/ericgandrade/cli-ai-skills.git
|
||||
cd cli-ai-skills
|
||||
|
||||
# Run the install script
|
||||
./scripts/install-skills.sh $(pwd)
|
||||
```
|
||||
|
||||
This creates symlinks in:
|
||||
- `~/.copilot/skills/youtube-summarizer/` (GitHub Copilot CLI)
|
||||
- `~/.claude/skills/youtube-summarizer/` (Claude Code)
|
||||
|
||||
### Repository Installation
|
||||
|
||||
Add to a specific project:
|
||||
|
||||
```bash
|
||||
# Copy skill to your project
|
||||
cp -r cli-ai-skills/.github/skills/youtube-summarizer .github/skills/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Contributing
|
||||
|
||||
Found a bug or have a feature request? Contributions welcome!
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch: `git checkout -b feature/youtube-enhancement`
|
||||
3. Commit changes: `git commit -m "feat(youtube-summarizer): add feature X"`
|
||||
4. Push and create a Pull Request
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see [LICENSE](../../../LICENSE) for details.
|
||||
|
||||
---
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- **[youtube-transcript-api](https://github.com/jdepoix/youtube-transcript-api)** by [Julien Depoix](https://github.com/jdepoix) - Python library for extracting YouTube video transcripts
|
||||
- **Anthropic STAR/R-I-S-E frameworks** - For structured summarization
|
||||
|
||||
---
|
||||
|
||||
**Built with ❤️ by Eric Andrade**
|
||||
|
||||
*Version 1.1.0 | Last updated: February 2026*
|
||||
411
skills/youtube-summarizer/SKILL.md
Normal file
411
skills/youtube-summarizer/SKILL.md
Normal file
@@ -0,0 +1,411 @@
|
||||
---
|
||||
name: youtube-summarizer
|
||||
description: "Extract transcripts from YouTube videos and generate comprehensive, detailed summaries using intelligent analysis frameworks"
|
||||
version: 1.2.0
|
||||
author: Eric Andrade
|
||||
created: 2025-02-01
|
||||
updated: 2026-02-04
|
||||
platforms: [github-copilot-cli, claude-code, codex]
|
||||
category: content
|
||||
tags: [video, summarization, transcription, youtube, content-analysis]
|
||||
risk: safe
|
||||
---
|
||||
|
||||
# youtube-summarizer
|
||||
|
||||
## Purpose
|
||||
|
||||
This skill extracts transcripts from YouTube videos and generates comprehensive, verbose summaries using the STAR + R-I-S-E framework. It validates video availability, extracts transcripts using the `youtube-transcript-api` Python library, and produces detailed documentation capturing all insights, arguments, and key points.
|
||||
|
||||
The skill is designed for users who need thorough content analysis and reference documentation from educational videos, lectures, tutorials, or informational content.
|
||||
|
||||
## When to Use This Skill
|
||||
|
||||
This skill should be used when:
|
||||
|
||||
- User provides a YouTube video URL and wants a detailed summary
|
||||
- User needs to document video content for reference without rewatching
|
||||
- User wants to extract insights, key points, and arguments from educational content
|
||||
- User needs transcripts from YouTube videos for analysis
|
||||
- User asks to "summarize", "resume", or "extract content" from YouTube videos
|
||||
- User wants comprehensive documentation prioritizing completeness over brevity
|
||||
|
||||
## Step 0: Discovery & Setup
|
||||
|
||||
Before processing videos, validate the environment and dependencies:
|
||||
|
||||
```bash
|
||||
# Check if youtube-transcript-api is installed
|
||||
python3 -c "import youtube_transcript_api" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "⚠️ youtube-transcript-api not found"
|
||||
# Offer to install
|
||||
fi
|
||||
|
||||
# Check Python availability
|
||||
if ! command -v python3 &>/dev/null; then
|
||||
echo "❌ Python 3 is required but not installed"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**Ask the user if dependency is missing:**
|
||||
|
||||
```
|
||||
youtube-transcript-api is required but not installed.
|
||||
|
||||
Would you like to install it now?
|
||||
- [ ] Yes - Install with pip (pip install youtube-transcript-api)
|
||||
- [ ] No - I'll install it manually
|
||||
```
|
||||
|
||||
**If user selects "Yes":**
|
||||
|
||||
```bash
|
||||
pip install youtube-transcript-api
|
||||
```
|
||||
|
||||
**Verify installation:**
|
||||
|
||||
```bash
|
||||
python3 -c "import youtube_transcript_api; print('✅ youtube-transcript-api installed successfully')"
|
||||
```
|
||||
|
||||
## Main Workflow
|
||||
|
||||
### Progress Tracking Guidelines
|
||||
|
||||
Throughout the workflow, display a visual progress gauge before each step to keep the user informed. The gauge format is:
|
||||
|
||||
```bash
|
||||
echo "[████░░░░░░░░░░░░░░░░] 20% - Step 1/5: Validating URL"
|
||||
```
|
||||
|
||||
**Format specifications:**
|
||||
- 20 characters wide (use █ for filled, ░ for empty)
|
||||
- Percentage increments: Step 1=20%, Step 2=40%, Step 3=60%, Step 4=80%, Step 5=100%
|
||||
- Step counter showing current/total (e.g., "Step 3/5")
|
||||
- Brief description of current phase
|
||||
|
||||
**Display the initial status box before Step 1:**
|
||||
|
||||
```
|
||||
╔══════════════════════════════════════════════════════════════╗
|
||||
║ 📹 YOUTUBE SUMMARIZER - Processing Video ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ → Step 1: Validating URL [IN PROGRESS] ║
|
||||
║ ○ Step 2: Checking Availability ║
|
||||
║ ○ Step 3: Extracting Transcript ║
|
||||
║ ○ Step 4: Generating Summary ║
|
||||
║ ○ Step 5: Formatting Output ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ Progress: ██████░░░░░░░░░░░░░░░░░░░░░░░░ 20% ║
|
||||
╚══════════════════════════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
### Step 1: Validate YouTube URL
|
||||
|
||||
**Objective:** Extract video ID and validate URL format.
|
||||
|
||||
**Supported URL Formats:**
|
||||
- `https://www.youtube.com/watch?v=VIDEO_ID`
|
||||
- `https://youtube.com/watch?v=VIDEO_ID`
|
||||
- `https://youtu.be/VIDEO_ID`
|
||||
- `https://m.youtube.com/watch?v=VIDEO_ID`
|
||||
|
||||
**Actions:**
|
||||
|
||||
```bash
|
||||
# Extract video ID using regex or URL parsing
|
||||
URL="$USER_PROVIDED_URL"
|
||||
|
||||
# Pattern 1: youtube.com/watch?v=VIDEO_ID
|
||||
if echo "$URL" | grep -qE 'youtube\.com/watch\?v='; then
|
||||
VIDEO_ID=$(echo "$URL" | sed -E 's/.*[?&]v=([^&]+).*/\1/')
|
||||
# Pattern 2: youtu.be/VIDEO_ID
|
||||
elif echo "$URL" | grep -qE 'youtu\.be/'; then
|
||||
VIDEO_ID=$(echo "$URL" | sed -E 's/.*youtu\.be\/([^?]+).*/\1/')
|
||||
else
|
||||
echo "❌ Invalid YouTube URL format"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📹 Video ID extracted: $VIDEO_ID"
|
||||
```
|
||||
|
||||
**If URL is invalid:**
|
||||
|
||||
```
|
||||
❌ Invalid YouTube URL
|
||||
|
||||
Please provide a valid YouTube URL in one of these formats:
|
||||
- https://www.youtube.com/watch?v=VIDEO_ID
|
||||
- https://youtu.be/VIDEO_ID
|
||||
|
||||
Example: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
||||
```
|
||||
|
||||
### Step 2: Check Video & Transcript Availability
|
||||
|
||||
**Progress:**
|
||||
```bash
|
||||
echo "[████████░░░░░░░░░░░░] 40% - Step 2/5: Checking Availability"
|
||||
```
|
||||
|
||||
**Objective:** Verify video exists and transcript is accessible.
|
||||
|
||||
**Actions:**
|
||||
|
||||
```python
|
||||
from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound
|
||||
import sys
|
||||
|
||||
video_id = sys.argv[1]
|
||||
|
||||
try:
|
||||
# Get list of available transcripts
|
||||
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
|
||||
|
||||
print(f"✅ Video accessible: {video_id}")
|
||||
print("📝 Available transcripts:")
|
||||
|
||||
for transcript in transcript_list:
|
||||
print(f" - {transcript.language} ({transcript.language_code})")
|
||||
if transcript.is_generated:
|
||||
print(" [Auto-generated]")
|
||||
|
||||
except TranscriptsDisabled:
|
||||
print(f"❌ Transcripts are disabled for video {video_id}")
|
||||
sys.exit(1)
|
||||
|
||||
except NoTranscriptFound:
|
||||
print(f"❌ No transcript found for video {video_id}")
|
||||
sys.exit(1)
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error accessing video: {e}")
|
||||
sys.exit(1)
|
||||
```
|
||||
|
||||
**Error Handling:**
|
||||
|
||||
| Error | Message | Action |
|
||||
|-------|---------|--------|
|
||||
| Video not found | "❌ Video does not exist or is private" | Ask user to verify URL |
|
||||
| Transcripts disabled | "❌ Transcripts are disabled for this video" | Cannot proceed |
|
||||
| No transcript available | "❌ No transcript found (not auto-generated or manually added)" | Cannot proceed |
|
||||
| Private/restricted video | "❌ Video is private or restricted" | Ask for public video |
|
||||
|
||||
### Step 3: Extract Transcript
|
||||
|
||||
**Progress:**
|
||||
```bash
|
||||
echo "[████████████░░░░░░░░] 60% - Step 3/5: Extracting Transcript"
|
||||
```
|
||||
|
||||
**Objective:** Retrieve transcript in preferred language.
|
||||
|
||||
**Actions:**
|
||||
|
||||
```python
|
||||
from youtube_transcript_api import YouTubeTranscriptApi
|
||||
|
||||
video_id = "VIDEO_ID"
|
||||
|
||||
try:
|
||||
# Try to get transcript in user's preferred language first
|
||||
# Fall back to English if not available
|
||||
transcript = YouTubeTranscriptApi.get_transcript(
|
||||
video_id,
|
||||
languages=['pt', 'en'] # Prefer Portuguese, fallback to English
|
||||
)
|
||||
|
||||
# Combine transcript segments into full text
|
||||
full_text = " ".join([entry['text'] for entry in transcript])
|
||||
|
||||
# Get video metadata
|
||||
from youtube_transcript_api import YouTubeTranscriptApi
|
||||
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
|
||||
|
||||
print("✅ Transcript extracted successfully")
|
||||
print(f"📊 Transcript length: {len(full_text)} characters")
|
||||
|
||||
# Save to temporary file for processing
|
||||
with open(f"/tmp/transcript_{video_id}.txt", "w") as f:
|
||||
f.write(full_text)
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error extracting transcript: {e}")
|
||||
exit(1)
|
||||
```
|
||||
|
||||
**Transcript Processing:**
|
||||
|
||||
- Combine all transcript segments into coherent text
|
||||
- Preserve punctuation and formatting where available
|
||||
- Remove duplicate or overlapping segments (if auto-generated artifacts)
|
||||
- Store in temporary file for analysis
|
||||
|
||||
### Step 4: Generate Comprehensive Summary
|
||||
|
||||
**Progress:**
|
||||
```bash
|
||||
echo "[████████████████░░░░] 80% - Step 4/5: Generating Summary"
|
||||
```
|
||||
|
||||
**Objective:** Apply enhanced STAR + R-I-S-E prompt to create detailed summary.
|
||||
|
||||
**Prompt Applied:**
|
||||
|
||||
Use the enhanced prompt from Phase 2 (STAR + R-I-S-E framework) with the extracted transcript as input.
|
||||
|
||||
**Actions:**
|
||||
|
||||
1. Load the full transcript text
|
||||
2. Apply the comprehensive summarization prompt
|
||||
3. Use AI model (Claude/GPT) to generate structured summary
|
||||
4. Ensure output follows the defined structure:
|
||||
- Header with video metadata
|
||||
- Executive synthesis
|
||||
- Detailed section-by-section breakdown
|
||||
- Key insights and conclusions
|
||||
- Concepts and terminology
|
||||
- Resources and references
|
||||
|
||||
**Implementation:**
|
||||
|
||||
```bash
|
||||
# Use the transcript file as input to the AI prompt
|
||||
TRANSCRIPT_FILE="/tmp/transcript_${VIDEO_ID}.txt"
|
||||
|
||||
# The AI agent will:
|
||||
# 1. Read the transcript
|
||||
# 2. Apply the STAR + R-I-S-E summarization framework
|
||||
# 3. Generate comprehensive Markdown output
|
||||
# 4. Structure with headers, lists, and highlights
|
||||
|
||||
Read "$TRANSCRIPT_FILE" # Read transcript into context
|
||||
```
|
||||
|
||||
Then apply the full summarization prompt (from enhanced version in Phase 2).
|
||||
|
||||
### Step 5: Format and Present Output
|
||||
|
||||
**Progress:**
|
||||
```bash
|
||||
echo "[████████████████████] 100% - Step 5/5: Formatting Output"
|
||||
```
|
||||
|
||||
**Objective:** Deliver the summary in clean, well-structured Markdown.
|
||||
|
||||
**Output Structure:**
|
||||
|
||||
```markdown
|
||||
# [Video Title]
|
||||
|
||||
**Canal:** [Channel Name]
|
||||
**Duração:** [Duration]
|
||||
**URL:** [https://youtube.com/watch?v=VIDEO_ID]
|
||||
**Data de Publicação:** [Date if available]
|
||||
|
||||
|
||||
## 📝 Detailed Summary
|
||||
|
||||
### [Topic 1]
|
||||
|
||||
[Comprehensive explanation with examples, data, quotes...]
|
||||
|
||||
#### [Subtopic 1.1]
|
||||
|
||||
[Detailed breakdown...]
|
||||
|
||||
### [Topic 2]
|
||||
|
||||
[Continued detailed analysis...]
|
||||
|
||||
|
||||
## 📚 Concepts and Terminology
|
||||
|
||||
- **[Term 1]:** [Definition and context]
|
||||
- **[Term 2]:** [Definition and context]
|
||||
|
||||
|
||||
## 📌 Conclusion
|
||||
|
||||
[Final synthesis and takeaways]
|
||||
|
||||
|
||||
### **Example 2: Missing Dependency**
|
||||
|
||||
**User Input:**
|
||||
```
|
||||
claude> summarize this youtube video https://youtu.be/abc123
|
||||
```
|
||||
|
||||
**Skill Response:**
|
||||
|
||||
```
|
||||
⚠️ youtube-transcript-api not installed
|
||||
|
||||
This skill requires the Python library 'youtube-transcript-api'.
|
||||
|
||||
Would you like me to install it now?
|
||||
- [ ] Yes - Install with pip
|
||||
- [ ] No - I'll install manually
|
||||
```
|
||||
|
||||
**User selects "Yes":**
|
||||
|
||||
```bash
|
||||
$ pip install youtube-transcript-api
|
||||
Successfully installed youtube-transcript-api-0.6.1
|
||||
|
||||
✅ Installation complete! Proceeding with video summary...
|
||||
```
|
||||
|
||||
|
||||
### **Example 4: Invalid URL**
|
||||
|
||||
**User Input:**
|
||||
```
|
||||
claude> summarize youtube video www.youtube.com/some-video
|
||||
```
|
||||
|
||||
**Skill Response:**
|
||||
|
||||
```
|
||||
❌ Invalid YouTube URL format
|
||||
|
||||
Expected format examples:
|
||||
- https://www.youtube.com/watch?v=VIDEO_ID
|
||||
- https://youtu.be/VIDEO_ID
|
||||
|
||||
Please provide a valid YouTube video URL.
|
||||
```
|
||||
|
||||
|
||||
## 📊 Executive Summary
|
||||
|
||||
This video provides a comprehensive introduction to the fundamental concepts of Artificial Intelligence (AI), designed for beginners and professionals who want to understand the technical foundations and practical applications of modern AI. The instructor covers everything from basic definitions to machine learning algorithms, using practical examples and visualizations to facilitate understanding.
|
||||
|
||||
[... continued detailed summary ...]
|
||||
```
|
||||
|
||||
**Save Options:**
|
||||
|
||||
```
|
||||
What would you like to save?
|
||||
→ Summary + raw transcript
|
||||
|
||||
✅ File saved: resumo-exemplo123-2026-02-01.md (includes raw transcript)
|
||||
[████████████████████] 100% - ✓ Processing complete!
|
||||
```
|
||||
|
||||
|
||||
Welcome to this comprehensive tutorial on machine learning fundamentals. In today's video, we'll explore the core concepts that power modern AI systems...
|
||||
```
|
||||
|
||||
|
||||
**Version:** 1.2.0
|
||||
**Last Updated:** 2026-02-02
|
||||
**Maintained By:** Eric Andrade
|
||||
65
skills/youtube-summarizer/scripts/extract-transcript.py
Normal file
65
skills/youtube-summarizer/scripts/extract-transcript.py
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Extract YouTube video transcript
|
||||
Usage: ./extract-transcript.py VIDEO_ID [LANGUAGE_CODE]
|
||||
"""
|
||||
|
||||
import sys
|
||||
from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound
|
||||
|
||||
def extract_transcript(video_id, language='en'):
|
||||
"""Extract transcript from YouTube video"""
|
||||
try:
|
||||
# Try to get transcript in specified language with fallback to English
|
||||
transcript = YouTubeTranscriptApi.get_transcript(
|
||||
video_id,
|
||||
languages=[language, 'en']
|
||||
)
|
||||
|
||||
# Combine all transcript segments
|
||||
full_text = " ".join([entry['text'] for entry in transcript])
|
||||
return full_text
|
||||
|
||||
except TranscriptsDisabled:
|
||||
print(f"❌ Transcripts are disabled for video {video_id}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
except NoTranscriptFound:
|
||||
print(f"❌ No transcript found for video {video_id}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"❌ Error: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
def list_available_transcripts(video_id):
|
||||
"""List all available transcripts for a video"""
|
||||
try:
|
||||
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
|
||||
print(f"✅ Available transcripts for {video_id}:")
|
||||
|
||||
for transcript in transcript_list:
|
||||
generated = "[Auto-generated]" if transcript.is_generated else "[Manual]"
|
||||
translatable = "(translatable)" if transcript.is_translatable else ""
|
||||
print(f" - {transcript.language} ({transcript.language_code}) {generated} {translatable}")
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ Error listing transcripts: {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: ./extract-transcript.py VIDEO_ID [LANGUAGE_CODE]")
|
||||
print(" ./extract-transcript.py VIDEO_ID --list (list available transcripts)")
|
||||
sys.exit(1)
|
||||
|
||||
video_id = sys.argv[1]
|
||||
|
||||
# Check if user wants to list available transcripts
|
||||
if len(sys.argv) > 2 and sys.argv[2] == "--list":
|
||||
list_available_transcripts(video_id)
|
||||
sys.exit(0)
|
||||
|
||||
# Extract transcript
|
||||
language = sys.argv[2] if len(sys.argv) > 2 else 'en'
|
||||
transcript = extract_transcript(video_id, language)
|
||||
print(transcript)
|
||||
28
skills/youtube-summarizer/scripts/install-dependencies.sh
Normal file
28
skills/youtube-summarizer/scripts/install-dependencies.sh
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install youtube-transcript-api dependency
|
||||
|
||||
set -e
|
||||
|
||||
echo "📦 Installing youtube-transcript-api..."
|
||||
|
||||
if command -v pip3 &>/dev/null; then
|
||||
pip3 install youtube-transcript-api
|
||||
echo "✅ Installation complete using pip3!"
|
||||
elif command -v pip &>/dev/null; then
|
||||
pip install youtube-transcript-api
|
||||
echo "✅ Installation complete using pip!"
|
||||
else
|
||||
echo "❌ Error: pip not found"
|
||||
echo "Please install Python pip first:"
|
||||
echo " macOS: brew install python3"
|
||||
echo " Ubuntu/Debian: sudo apt install python3-pip"
|
||||
echo " Fedora: sudo dnf install python3-pip"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verify installation
|
||||
python3 -c "import youtube_transcript_api; print('✅ youtube-transcript-api is ready to use!')" 2>/dev/null || {
|
||||
echo "⚠️ Installation completed but verification failed"
|
||||
echo "Try running: python3 -c 'import youtube_transcript_api'"
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user