youtube-to-ebook
npx skills add https://github.com/zarazhangrui/youtube-to-ebook --skill youtube-to-ebook
Agent 安装分布
Skill 文档
YouTube to Ebook
Transform YouTube videos from your favorite channels into well-written magazine-style articles, delivered as an EPUB ebook.
What This Skill Does
- Fetches latest videos from YouTube channels (filtering out Shorts)
- Extracts transcripts from those videos
- Transforms transcripts into polished articles using Claude
- Packages articles into an EPUB ebook for reading on any device
Quick Start
Ask: “Set up YouTube to ebook for me”
I’ll guide you through:
- Creating a project folder
- Setting up YouTube API access
- Configuring your favorite channels
- Generating your first ebook
Requirements
- Python 3.8+
- YouTube Data API key (free from Google Cloud Console)
- Anthropic API key (for Claude)
Commands
| Command | Description |
|---|---|
python main.py |
Generate ebook from latest videos |
python main.py --channels |
Edit channel list |
python dashboard.py |
Launch web dashboard |
Key Files
youtube-newsletter/
âââ get_videos.py # Fetch latest videos
âââ get_transcripts.py # Extract transcripts
âââ write_articles.py # Transform to articles
âââ send_email.py # Create EPUB & send
âââ main.py # Run full pipeline
âââ channels.txt # Your channel list
âââ .env # API keys
Known Pitfalls & Solutions
1. YouTube Shorts Detection
Problem: Filtering by duration doesn’t workâsome Shorts are longer than 60 seconds.
Solution: Check if the /shorts/ URL resolves:
def is_youtube_short(video_id):
shorts_url = f"https://www.youtube.com/shorts/{video_id}"
response = requests.head(shorts_url, allow_redirects=True, timeout=5)
return "/shorts/" in response.url
2. Videos Not in Chronological Order
Problem: YouTube Search API doesn’t return truly chronological results.
Solution: Use the channel’s uploads playlist via playlistItems API:
# Get uploads playlist ID from channel
channel_info = youtube.channels().list(
part="contentDetails",
forHandle=handle
).execute()
uploads_playlist_id = channel_info["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]
# Fetch from uploads playlist (always chronological)
youtube.playlistItems().list(
part="snippet",
playlistId=uploads_playlist_id,
maxResults=15
).execute()
3. Transcript API Syntax
Problem: YouTubeTranscriptApi.get_transcript() no longer works.
Solution: Use instance method:
from youtube_transcript_api import YouTubeTranscriptApi
ytt_api = YouTubeTranscriptApi()
transcript = ytt_api.fetch(video_id)
4. Rate Limiting on Transcripts
Problem: Fetching many transcripts quickly triggers rate limits.
Solution: Add 2-second delays between requests:
import time
for video in videos:
transcript = get_transcript(video["video_id"])
time.sleep(2)
5. Transcript Accuracy (Names, Terms)
Problem: Auto-transcripts misspell names and technical terms.
Solution: Include video title and description in Claude’s contextâthese usually have correct spellings.
6. Cloud Automation Blocked
Problem: GitHub Actions and cloud servers are blocked by YouTube for transcript fetching.
Solution: Run automation locally on your Mac using launchd:
<!-- ~/Library/LaunchAgents/com.youtube.ebook.plist -->
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.youtube.ebook</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python3</string>
<string>/path/to/main.py</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key>
<integer>3</integer>
<key>Hour</key>
<integer>7</integer>
</dict>
</dict>
</plist>
Customization
Writing Style
Edit the prompt in write_articles.py to change article tone:
- Magazine style (default)
- Academic summary
- Casual blog post
- Technical documentation
Email Delivery (Optional)
Add Gmail credentials to .env to receive ebooks via email:
GMAIL_ADDRESS=your@gmail.com
GMAIL_APP_PASSWORD=your-app-password
Workflow
âââââââââââââââ ââââââââââââââââ âââââââââââââââââ ââââââââââââââ
â Fetch Videosâââââ¶âGet Transcriptsâââââ¶âWrite Articles âââââ¶âCreate EPUB â
â (YouTube API)â â(Transcript API)â â (Claude AI) â â (ebooklib) â
âââââââââââââââ ââââââââââââââââ âââââââââââââââââ ââââââââââââââ
Example Output
The generated EPUB contains:
- Table of contents with all articles
- Clean, readable formatting
- Original video links for reference
- Mobile-friendly styling