원클릭으로
youtube-to-ebook
Transform YouTube videos into beautifully formatted ebook articles with transcripts
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Transform YouTube videos into beautifully formatted ebook articles with transcripts
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, managing credentials, auditing instance security, or using any n8n-mcp tool. Provides tool selection guidance, parameter formats, and common patterns. IMPORTANT — Always consult this skill before calling any n8n-mcp tool — it prevents common mistakes like wrong nodeType formats, incorrect parameter structures, and inefficient tool usage. If the user mentions n8n, workflows, nodes, or automation and you have n8n MCP tools available, use this skill first.
Expert n8n workflow development — expression syntax, MCP tools, workflow patterns, node configuration, validation, Code node JS/Python, n8nac code-first development, and code-mode runtime optimization. USE WHEN n8n, n8n workflow, build workflow, n8n node, n8n expression, n8n validation, n8n code node, n8n pattern, n8n MCP, automation workflow, n8n template, webhook workflow, batch processing, n8n agent, n8n javascript, n8n python, workflow architecture, n8nac, n8n-as-code, code-first, workflow.ts, n8nac push, n8nac pull, n8nac init, code-mode, sandbox, token savings, tool consolidation, sibling tools, lazy import.
Developer utilities — CLI generation, skill scaffolding, agent delegation, system upgrades, evals, documents, parsing, audio editing, Codex, Cloudflare, browser automation, prompting, aphorisms, n8n workflows, beads management, full output enforcement, knowledge base, compound engineering. USE WHEN create CLI, scaffold skill, delegate, upgrade system, eval, document, parse, cloudflare, browser, n8n, beads, full output, knowledge, compound engineering.
any input (code, docs, papers, images) - knowledge graph - clustered communities - HTML + JSON + audit report
Compose CUSTOM agents from Base Traits + Voice + Specialization for specialized perspectives. USE WHEN create custom agents, spin up agents, specialized agents, agent personalities, available traits, list traits, agent voices, compose agent, load agent context, agent profile, spawn parallel agents, launch agents. NOT for agent teams/swarms (use Delegation skill → TeamCreate) or Codex delegation (use Delegation skill → CodexBridge).
Audit or initialize repo Beads workflow and files. USE WHEN bootstrap Beads, adopt Beads, standardize Beads workflow, initialize a new repo onto Beads, or verify whether a repo already has mature Beads doctrine.
| name | youtube-to-ebook |
| description | Transform YouTube videos into beautifully formatted ebook articles with transcripts |
Transform YouTube videos from your favorite channels into well-written magazine-style articles, delivered as an EPUB ebook.
Ask: "Set up YouTube to ebook for me"
I'll guide you through:
| Command | Description |
|---|---|
python main.py | Generate ebook from latest videos |
python main.py --channels | Edit channel list |
python dashboard.py | Launch web dashboard |
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
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
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()
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)
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)
Problem: Auto-transcripts misspell names and technical terms.
Solution: Include video title and description in Claude's context—these usually have correct spellings.
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>
Edit the prompt in write_articles.py to change article tone:
Add Gmail credentials to .env to receive ebooks via email:
GMAIL_ADDRESS=your@gmail.com
GMAIL_APP_PASSWORD=your-app-password
┌─────────────┐ ┌──────────────┐ ┌───────────────┐ ┌────────────┐
│ Fetch Videos│───▶│Get Transcripts│───▶│Write Articles │───▶│Create EPUB │
│ (YouTube API)│ │(Transcript API)│ │ (Claude AI) │ │ (ebooklib) │
└─────────────┘ └──────────────┘ └───────────────┘ └────────────┘
The generated EPUB contains: