boring-youtube-mining

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

YouTube Mining — World Code Edition

YouTube内容挖掘 — World Code版

You pull recent videos from pre-selected YouTube channels, download their transcripts, and generate content ideas the user can actually use. One pass. No back-and-forth.
你可以从预先选定的YouTube频道提取最新视频,下载其字幕,并生成用户可实际使用的内容创意。一站式完成,无需反复沟通。

Before Starting — Check Dependencies

开始前 — 检查依赖项

Run this silently:
bash
which yt-dlp
If
yt-dlp
is NOT installed
, stop and tell the user:
yt-dlp
is required but not installed.
Install it for your platform:
  • macOS:
    brew install yt-dlp
  • Windows:
    winget install yt-dlp
  • Linux:
    pip install yt-dlp
    or your package manager
  • Universal:
    pip install yt-dlp
Then run
/boring-youtube-mining
again.
Do not proceed without
yt-dlp
. Stop gracefully.

静默运行以下命令:
bash
which yt-dlp
如果未安装
yt-dlp
,请停止操作并告知用户:
需要
yt-dlp
但未安装。
请根据你的平台进行安装:
  • macOS:
    brew install yt-dlp
  • Windows:
    winget install yt-dlp
  • Linux:
    pip install yt-dlp
    或使用你的包管理器
  • 通用方式:
    pip install yt-dlp
然后重新运行
/boring-youtube-mining
未安装
yt-dlp
时请勿继续操作,需优雅终止流程。

Before Starting — Load World Code (Optional)

开始前 — 加载World Code(可选)

Try to read these files silently:
  • world-code/voice.md
    — Voice rules (NOT applied to output — this is research, not published content)
  • world-code/conversation.md
    — Bridge structure (walls, struggles, goblins, treasures)
If conversation.md exists: Use the Bridge to filter and prioritize ideas. Every idea gets mapped to a wall, struggle, or goblin. Ideas that don't connect to any get deprioritized (still listed, just flagged as "no Bridge connection").
If conversation.md doesn't exist: Generate ideas purely from transcript analysis. Don't nag about missing files.

尝试静默读取以下文件:
  • world-code/voice.md
    — 语音规则(不应用于输出内容,仅用于调研)
  • world-code/conversation.md
    — Bridge结构(包含壁垒、困境、障碍、机遇)
若conversation.md存在: 使用Bridge过滤并优先排序创意。每个创意都需关联到某个壁垒、困境或障碍。无法关联的创意将被降权(仍会列出,但标记为“无Bridge关联”)。
若conversation.md不存在: 仅基于字幕分析生成创意。无需因文件缺失提示用户。

Step 1: Load Channel List

步骤1:加载频道列表

Read
settings/youtube-channels.md
.
If the file doesn't exist, create it with starter content and tell the user:
I created
settings/youtube-channels.md
with some example channels. Edit it in Obsidian to add the channels you want to mine, then run
/boring-youtube-mining
again.
Starter content for
settings/youtube-channels.md
:
markdown
undefined
读取
settings/youtube-channels.md
文件。
若文件不存在,则创建包含初始内容的文件并告知用户:
我已创建
settings/youtube-channels.md
并添加了示例频道。请在Obsidian中编辑该文件,添加你想要挖掘的频道,然后重新运行
/boring-youtube-mining
settings/youtube-channels.md
的初始内容:
markdown
undefined

YouTube Channels

YouTube Channels

Add channels you want to mine for content ideas. Use the @ handle format. Add a short description so Claude knows the context.
  • @AlexHormozi - Business, offers, scaling
  • @ChrisDo - Branding, pricing, positioning

Stop after creating the file. Let the user configure it first.

---
添加你想要挖掘内容创意的频道,使用@用户名格式。 添加简短描述,以便Claude了解背景信息。
  • @AlexHormozi - 商业、报价、规模化
  • @ChrisDo - 品牌、定价、定位

创建文件后停止操作,等待用户完成配置。

---

Step 2: Fetch Recent Videos

步骤2:获取最新视频

For each channel in the list, run:
bash
yt-dlp --flat-playlist --playlist-items 1:5 --print "%(id)s | %(title)s | %(duration_string)s" "https://www.youtube.com/@{handle}/videos" 2>/dev/null
Process channels sequentially (not in parallel) to avoid rate limiting.
Present the results as a numbered list:
undefined
针对列表中的每个频道,运行以下命令:
bash
yt-dlp --flat-playlist --playlist-items 1:5 --print "%(id)s | %(title)s | %(duration_string)s" "https://www.youtube.com/@{handle}/videos" 2>/dev/null
按顺序处理频道(不要并行处理),避免触发频率限制。
将结果以编号列表形式呈现:
undefined

Recent Videos

最新视频

@AlexHormozi

@AlexHormozi

  1. [dQw4w9WgXcQ] How to Price Your Offer (12:34)
  2. [abc123def] The $100M Framework Nobody Uses (18:22) ...
  1. [dQw4w9WgXcQ] 如何为你的报价定价 (12:34)
  2. [abc123def] 无人使用的1亿美元框架 (18:22) ...

@ChrisDo

@ChrisDo

  1. [xyz789ghi] Why Your Brand Is Invisible (9:45) ...

Ask the user:

> Which videos should I analyze? Enter numbers (e.g., "1, 3, 5") or "all".

**If a channel handle fails to resolve**, report it and continue with the remaining channels:

> Could not fetch videos from @BadHandle — check the handle in `settings/youtube-channels.md`.

---
  1. [xyz789ghi] 为何你的品牌缺乏存在感 (9:45) ...

询问用户:

> 我应该分析哪些视频?请输入编号(例如:"1, 3, 5")或输入"all"。

**若频道用户名无法解析**,则报告该问题并继续处理剩余频道:

> 无法从@BadHandle获取视频 — 请检查`settings/youtube-channels.md`中的用户名是否正确。

---

Step 3: Download Transcripts

步骤3:下载字幕

For each selected video, first check if a cached transcript exists:
bash
ls "content/youtube-transcripts/{video_id}.md" 2>/dev/null
If cached: Skip download, read from cache. Tell the user:
Transcript for "{title}" already cached — skipping download.
If not cached: Download the auto-generated English captions:
bash
yt-dlp --write-auto-sub --sub-lang en --sub-format vtt --skip-download -o "content/youtube-transcripts/%(id)s" "https://www.youtube.com/watch?v={video_id}" 2>/dev/null
Then clean the VTT file and save as markdown. Create the directory if needed:
bash
mkdir -p "content/youtube-transcripts"
针对每个选定的视频,首先检查是否存在缓存的字幕:
bash
ls "content/youtube-transcripts/{video_id}.md" 2>/dev/null
若存在缓存: 跳过下载,直接读取缓存内容。告知用户:
视频"{title}"的字幕已缓存 — 跳过下载。
若不存在缓存: 下载自动生成的英文字幕:
bash
yt-dlp --write-auto-sub --sub-lang en --sub-format vtt --skip-download -o "content/youtube-transcripts/%(id)s" "https://www.youtube.com/watch?v={video_id}" 2>/dev/null
然后清理VTT文件并保存为Markdown格式。若需要,创建对应目录:
bash
mkdir -p "content/youtube-transcripts"

Cleaning VTT Captions

清理VTT字幕

The raw VTT file contains timestamps and duplicate lines. Clean it:
  1. Strip all timestamp lines (lines matching
    XX:XX:XX.XXX --> XX:XX:XX.XXX
    )
  2. Strip the
    WEBVTT
    header and
    Kind:
    /
    Language:
    metadata lines
  3. Remove duplicate consecutive lines (VTT repeats lines across cue boundaries)
  4. Remove position/alignment tags like
    <c>
    ,
    </c>
    ,
    align:start position:0%
  5. Join into paragraphs (group sentences, add line breaks at natural pauses)
Save as
content/youtube-transcripts/{video_id}.md
with frontmatter:
markdown
---
video_id: {video_id}
title: {video title}
channel: {channel handle}
date_fetched: {YYYY-MM-DD}
url: https://www.youtube.com/watch?v={video_id}
---
原始VTT文件包含时间戳和重复行。清理步骤如下:
  1. 移除所有时间戳行(匹配
    XX:XX:XX.XXX --> XX:XX:XX.XXX
    格式的行)
  2. 移除
    WEBVTT
    头部以及
    Kind:
    /
    Language:
    元数据行
  3. 移除连续重复的行(VTT会在字幕分段处重复内容)
  4. 移除位置/对齐标签,如
    <c>
    </c>
    align:start position:0%
  5. 合并为段落(将句子分组,在自然停顿处添加换行)
将清理后的内容保存为
content/youtube-transcripts/{video_id}.md
,并添加前置元数据:
markdown
---
video_id: {video_id}
title: {video title}
channel: {channel handle}
date_fetched: {YYYY-MM-DD}
url: https://www.youtube.com/watch?v={video_id}
---

{video title}

{video title}

Channel: {channel handle} URL: https://www.youtube.com/watch?v={video_id}
频道: {channel handle} 链接: https://www.youtube.com/watch?v={video_id}

Transcript

字幕

{cleaned transcript text}

Delete the raw VTT file after conversion.
{清理后的字幕文本}

转换完成后删除原始VTT文件。

Edge Cases

边缘情况处理

  • No English auto-captions available: Skip the video with a message:
    No English captions available for "{title}" — skipping.
  • Very long transcripts (estimated 10,000+ words): Chunk-summarize before idea generation. Break into ~3,000 word sections, summarize each section's key points, then use the summaries for idea generation. Note in the output that the transcript was summarized.

  • 无英文自动字幕可用: 跳过该视频并提示:
    视频"{title}"无英文字幕可用 — 跳过。
  • 超长字幕(预计10000词以上): 在生成创意前先进行分段总结。将字幕拆分为约3000词的段落,总结每个段落的要点,再基于总结内容生成创意。在输出中注明该字幕已被总结。

Step 4: Generate Ideas

步骤4:生成创意

For each transcript, generate ideas through two lenses:
针对每个字幕,从两个维度生成创意:

Lens 1: Direct Response

维度1:直接回应

How would the user respond to this video's ideas? Generate 2-3 ideas:
  • Agree & Expand — They made a point you also believe. What's your unique angle on it?
  • Disagree & Counter — They said something you see differently. What's your take?
  • Build On — They touched on something but stopped short. Where would you take it?
用户会如何回应该视频的观点?生成2-3个创意:
  • 认同并拓展 — 你认同视频中的某个观点,你的独特视角是什么?
  • 反对并反驳 — 你对视频中的某个观点有不同看法,你的观点是什么?
  • 延伸深化 — 视频提及了某个话题但未展开,你会如何深入探讨?

Lens 2: Gap Ideas

维度2:缺口创意

What's missing? Generate 1-2 ideas:
  • Topics they mentioned but didn't go deep on
  • Adjacent topics their audience would care about but weren't covered
  • The question their video raises but doesn't answer
视频遗漏了什么?生成1-2个创意:
  • 视频提及但未深入的话题
  • 目标受众关心但未被覆盖的相关话题
  • 视频引发但未解答的问题

Per Idea, Include:

每个创意需包含以下字段:

FieldDescription
Idea titleSharp, specific — not "Thoughts on pricing" but "Why Hourly Pricing Kills Solo Businesses"
AngleDirect Response (agree/disagree/expand) or Gap
SourceVideo title + timestamp range if identifiable
Your take (1-2 sentences)The core argument you'd make
Bridge mappingWhich wall/struggle/goblin this connects to (if conversation.md exists)
Content typePost, thread, email, essay, video script, carousel
Draft hookOne opening line that would stop the scroll
字段描述
创意标题清晰具体 — 不要使用“关于定价的思考”,而要用“按时计费为何会拖垮个体创业者”
角度直接回应(认同/反对/拓展)或缺口
来源视频标题 + 可识别的时间范围
你的观点(1-2句话)你要表达的核心论点
Bridge映射该创意关联到的壁垒/困境/障碍(若conversation.md存在)
内容类型帖子、推文、邮件、文章、视频脚本、轮播图
草稿钩子能吸引用户停留的开场句

Quality Over Quantity

质量优先于数量

  • 3-5 ideas per video. Not 10. Not 20. The best 3-5.
  • Every idea must pass the "would I actually make this?" test
  • If an idea is generic ("Content is important"), kill it
  • Ideas without a clear angle aren't ideas — they're topics. Topics aren't useful.
  • 每个视频生成3-5个创意,不要10个或20个,只保留最优质的3-5个。
  • 每个创意都必须通过“我真的会做这个内容吗?”的测试
  • 若创意过于通用(如“内容很重要”),则舍弃
  • 没有明确角度的不能称为创意,只是话题,话题毫无用处

Bridge-First Filtering (when conversation.md exists)

优先基于Bridge过滤(当conversation.md存在时)

After generating all ideas, sort them:
  1. Strong Bridge connection — directly maps to a wall, struggle, or goblin
  2. Loose Bridge connection — related to the user's world but not a direct map
  3. No Bridge connection — interesting but disconnected from their World Code
Group 3 still gets listed but flagged. The user decides if it's worth pursuing.

生成所有创意后,按以下顺序排序:
  1. 强Bridge关联 — 直接映射到某个壁垒、困境或障碍
  2. 弱Bridge关联 — 与用户的领域相关但未直接映射
  3. 无Bridge关联 — 有趣但与用户的World Code无关
第三类创意仍会列出,但会标记出来。由用户决定是否值得跟进。

Step 5: Save Output

步骤5:保存输出

Write the output file to
content-ideas/youtube-mining-{YYYY-MM-DD}.md
:
markdown
---
type: youtube-mining
date: {YYYY-MM-DD}
channels_mined: [{list of channels}]
videos_analyzed: {count}
ideas_generated: {count}
---
将输出文件写入
content-ideas/youtube-mining-{YYYY-MM-DD}.md
markdown
---
type: youtube-mining
date: {YYYY-MM-DD}
channels_mined: [{挖掘的频道列表}]
videos_analyzed: {数量}
ideas_generated: {数量}
---

YouTube Mining — {YYYY-MM-DD}

YouTube内容挖掘 — {YYYY-MM-DD}

Sources

来源

VideoChannelIdeas
{title}{channel}{count}
...
视频频道创意数量
{标题}{频道}{数量}
...

Ideas

创意列表

From: "{video title}" (@channel)

来自:"{视频标题}" (@频道)

1. {Idea Title}

1. {创意标题}

  • Angle: {Direct Response — Agree/Disagree/Expand | Gap}
  • Source: {video title}, ~{timestamp context if available}
  • Your take: {1-2 sentences}
  • Bridge: {wall/struggle/goblin or "No direct connection"}
  • Content type: {post/thread/email/essay/video/carousel}
  • Draft hook: "{opening line}"

{repeat for each idea}
  • 角度: {直接回应 — 认同/反对/拓展 | 缺口}
  • 来源: {视频标题},~{时间范围(若有)}
  • 你的观点: {1-2句话}
  • Bridge映射: {壁垒/困境/障碍 或 “无直接关联”}
  • 内容类型: {帖子/推文/邮件/文章/视频/轮播图}
  • 草稿钩子: "{开场句}"

{重复上述格式列出每个创意}

Bridge Summary

Bridge关联总结

Strong Connections

强关联创意

  • {idea} → {wall/struggle} ...
  • {创意} → {壁垒/困境} ...

No Connection

无关联创意

  • {idea} — interesting but not tied to your current World Code ...
  • {创意} — 有趣但与你的当前World Code无关 ...

Next Steps

后续操作建议

  • Pick an idea and run
    /boring-copywriting
    to draft it
  • Run
    /boring-social-content
    to turn an idea into platform-specific posts
  • Run
    /boring-remix
    to generate multiple angles on your favorite idea

---
  • 选择一个创意,运行
    /boring-copywriting
    生成完整内容草稿
  • 运行
    /boring-social-content
    将创意转化为平台专属帖子
  • 运行
    /boring-remix
    为你喜欢的创意生成多个不同角度

---

Step 6: Wrap Up

步骤6:收尾

After saving, tell the user:
Saved {X} ideas to
content-ideas/youtube-mining-{date}.md
.
{count} ideas with strong Bridge connections, {count} without.
Pick an idea and I can draft it with
/boring-copywriting
, turn it into social posts with
/boring-social-content
, or remix it with
/boring-remix
.
That's it. No recap of the process. No lecture on content strategy.

保存完成后,告知用户:
已将{X}个创意保存至
content-ideas/youtube-mining-{date}.md
其中{count}个创意与Bridge强关联,{count}个无关联。
你可以选择一个创意,我将通过
/boring-copywriting
生成草稿,或通过
/boring-social-content
转化为社交帖子,也可以通过
/boring-remix
生成多个角度。
操作到此结束。无需回顾流程,无需讲解内容策略。

Key Principles

核心原则

  • One pass, full output. Fetch → transcripts → ideas → save. No stopping to ask "should I continue?"
  • Research output, not published content. No voice applied. No polishing. Raw strategic ideas.
  • Caching is non-negotiable. Never re-download a transcript. Check the cache first, always.
  • Bridge-first when available. The World Code connection is what makes this useful instead of just interesting.
  • Sequential channel processing. Don't hammer YouTube with parallel requests.
  • 3-5 quality ideas per video. Restraint is the skill. Anyone can generate 50 mediocre ideas.
  • Draft hooks matter. An idea without a hook is just a topic. Topics are cheap.
  • Don't explain the process. The user doesn't need a play-by-play of "now I'm downloading transcripts." Just do it and show the results.

  • 一站式完成,输出完整结果:获取视频→下载字幕→生成创意→保存。无需中途询问“是否继续?”
  • 调研输出,而非发布内容:不应用语音风格,无需润色,仅输出原始战略创意。
  • 缓存是必须的:绝不重复下载字幕。始终先检查缓存。
  • 有Bridge时优先基于Bridge处理:与World Code的关联是本工具实用而非仅有趣的关键。
  • 按顺序处理频道:不要并行请求YouTube,避免触发限制。
  • 每个视频生成3-5个优质创意:克制是关键。任何人都能生成50个平庸创意。
  • 草稿钩子很重要:没有钩子的创意只是话题,话题毫无价值。
  • 无需解释流程:用户不需要了解“我正在下载字幕”这类细节,直接展示结果即可。

Related Skills

相关工具

  • boring-copywriting — Draft full content from a mined idea
  • boring-social-content — Turn ideas into platform-specific posts
  • boring-remix — Generate multiple angles on a single idea
  • boring-content-strategy — Broader content planning using mined insights
  • boring-copywriting — 基于挖掘到的创意生成完整内容草稿
  • boring-social-content — 将创意转化为平台专属帖子
  • boring-remix — 为单个创意生成多个不同角度
  • boring-content-strategy — 基于挖掘到的洞见进行更全面的内容规划