Research Collector
Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving result...
Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving results as markdown. Best for "收集素材"、"给我找这个话题的相关视频和文章"、"整理成 NotebookLM 分析" type requests. Combines yt-dlp YouTube search, NotebookLM `nlm` CLI research, and markdown report output.
Install
Quick install
npx skills add https://github.com/jacob-bd/notebooklm-mcp-clinpx skills add jacob-bd/notebooklm-mcp-cli --agent claude-codenpx skills add jacob-bd/notebooklm-mcp-cli --agent cursornpx skills add jacob-bd/notebooklm-mcp-cli --agent codexnpx skills add jacob-bd/notebooklm-mcp-cli --agent opencodenpx skills add jacob-bd/notebooklm-mcp-cli --agent github-copilotnpx skills add jacob-bd/notebooklm-mcp-cli --agent windsurfMore install options
Shorthand — useful for multi-skill repos:
npx skills add jacob-bd/notebooklm-mcp-cliManual — clone the repo and drop the folder into your agent's skills directory:
git clone https://github.com/jacob-bd/notebooklm-mcp-cli.gitcp -r notebooklm-mcp-cli ~/.claude/skills/Research Collector
Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving results as markdown. Best for "收集素材"、"给我找这个话题的相关视频和文章"、"整理成 NotebookLM 分析" type requests. Combines yt-dlp YouTube search, NotebookLM nlm CLI research, and markdown report output.
---
name: research-collector
description: Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving results as markdown. Best for "收集素材"、"给我找这个话题的相关视频和文章"、"整理成 NotebookLM 分析" type requests. Combines yt-dlp YouTube search, NotebookLM nlm CLI research, and markdown report output.
---
Research Collector
这个 skill 只做一件事:
- 为某个主题批量收集 YouTube 视频 + 网页文章,喂进 NotebookLM,跑分析查询,把结果落地到本地目录(默认
./research/<topic>/,可配置)
不负责:
- 写成品文章(交给你自己的写作工具 / skill)
- 选主标题
- 下载视频(交给本仓库里的
yt-dlp-directskill) - 发布到多平台(交给本仓库里的
publisher-wechatsyncskill)
一句话原则:用户说"帮我收集 X 话题的素材"或"拉一批 YouTube + 文章到 NotebookLM",就走这条固定流水线,不要每次重新设计。
When To Use
适用场景:
- 用户要为某个话题写推荐/测评/观点文,需要先做背景研究
- 用户说"帮我找 X 的热门 YouTube 视频和文章"
- 用户说"收集到 NotebookLM 里分析"
- 用户说"给我整理一份 X 话题的素材研究"
不适用场景:
- 用户已经有明确素材清单,只想要总结 → 直接跑
nlm notebook query - 用户要做的是实时对话研究,不需要持久化到 notebook → 用 WebSearch + WebFetch
- 用户只要下载单个视频 → 用
yt-dlp-direct
Preconditions
开始前必须确认:
nlmCLI 已安装且登录:nlm login --checkyt-dlp在 PATH 中:which yt-dlp- 用户明确说明了主题和角度
- 输出目录可写(默认
./research/<topic>/,可以通过RESEARCH_OUTPUT_DIR环境变量或对话里直接指定其他路径)
前置不满足时:
nlm login --check失败 → 让用户跑nlm login,session 有效期 ~20 分钟yt-dlp没装 → 停止并告诉用户
Working Rules
- 先和用户对齐主题、角度、量级,再动手
- 每轮 ytsearch 默认 15 条,可以根据需要调整
- NotebookLM deep research 一次只能跑一个任务,不能并发
- 添加 source 时每条之间 sleep 2 秒,避免限流
- 所有产出(原始 JSON + 汇总 markdown)落到
./research/<topic>/下(或用户指定的目录) - 这个 skill 只负责收集和分析,不要擅自接着写成品文章
- 不要删 notebook,用户后面可能还要回去跑 query
Core Workflow
Phase 0: 对齐目标
在动手前必须和用户明确:
- 主题是什么(要一句话能喂给 ytsearch 的关键词)
- 角度(比如"最常用 + 个人创作" vs "最新发布 + 技术细节")
- 笔记本命名(默认
<主题> 素材) - 量级(默认:15 油管 + deep research 自动 ~40 网页)
Phase 1: 创建笔记本 + 设 alias
nlm notebook create "<话题> 素材"
# 从输出提取 ID,然后:
nlm alias set <short-name> <notebook-id>
alias 取短名,比如 skills-research、vps-2026,后续所有命令都用 alias。
Phase 2: yt-dlp ytsearch 找热门 YouTube
并行跑 2-3 个不同角度的搜索,每个 15 条:
yt-dlp --simulate --print "%(title)s|%(webpage_url)s|%(view_count)s|%(uploader)s" \
"ytsearch15:<关键词 A>"
yt-dlp --simulate --print "%(title)s|%(webpage_url)s|%(view_count)s|%(uploader)s" \
"ytsearch15:<关键词 B>"
输出里的 JS runtime warning 可以忽略。
从结果里按以下规则筛 top 15:
- 去重(同一视频出现在多个搜索里)
- 优先官方账号(比如 Anthropic、OpenAI 等)
- 按 view count 从高到低,但要留 2-3 个垂直向角度的中腰部视频,避免全是爆款通稿
- 每个角度至少保留 5 条
Phase 3: 把 YouTube 加为 source
用 bash 循环逐条加,每次 sleep 2 秒:
cat > /tmp/yt_urls.txt <<'EOF'
https://www.youtube.com/watch?v=XXX1
https://www.youtube.com/watch?v=XXX2
...
EOF
while IFS= read -r url; do
echo "=== Adding: $url ==="
nlm source add <alias> --url "$url" 2>&1 | tail -5
sleep 2
done < /tmp/yt_urls.txt
偶尔会遇到单条失败(视频不公开、区域限制),忽略继续,最后报告成功率。
Phase 4: 跑 NotebookLM deep research 发现网页文章
nlm research start "<英文查询,适合 web 研究>" \
--notebook-id <alias> --mode deep
deep 模式 ~5 分钟,返回 ~40 条网页源。
关键:一个 notebook 同一时间只能有一个 research 任务在跑。如果要跑第二轮,必须等第一轮 import 完或 --force。
等待完成:
nlm research status <alias> --max-wait 360
Bash 工具默认 timeout 120 秒,必须加 timeout: 400000(即 400 秒)。
Phase 5: 导入 research 结果
研究完成后从输出里拿 task-id,然后:
nlm research import <alias> <task-id> --timeout 600
Bash 工具加 timeout: 700000。
注意:用户有时会说"素材够了,不用再导入",要停下来直接进 Phase 6。
Phase 6: 跑 3 个分析查询
默认跑 3 个角度,命令直接重定向到文件避免输出过大:
mkdir -p "./research/<topic>"
nlm notebook query <alias> "<问题 1 的中文提示>" \
> "./research/<topic>/query1-<slug>-raw.json" 2>&1
nlm notebook query <alias> "<问题 2 的中文提示>" \
> "./research/<topic>/query2-<slug>-raw.json" 2>&1
nlm notebook query <alias> "<问题 3 的中文提示>" \
> "./research/<topic>/query3-<slug>-raw.json" 2>&1
每个 query 的 Bash 调用要加 timeout: 240000。
默认 3 个查询模板(按需改关键词):
- Top 清单:"基于所有 source,请列出被最多来源推荐的 Top 10 X。对每个 X 说明:(1) 名称 (2) 具体做什么 (3) 主要使用场景 (4) 推荐它的来源数量 (5) 类型分类。按推荐频率从高到低,用中文输出。"
- 目标读者向:"我要写一篇面向 <读者画像> 的文章。请筛选出对 <读者> 最有帮助的 Top 8 X,每个说明:(1) 名称 (2) 具体痛点 (3) 典型用法一句话 (4) 类型 (5) 最具体的来源编号。去掉不相关的,聚焦 <场景>,用中文。"
- 入门 + 坑:"针对 <读者> 使用 X 时,请总结:(1) 最快入门方式 (2) 去哪里获取 (3) 最容易踩的 5 个坑 (4) 什么时候其实不需要 (5) 最新的重要更新。每点配来源编号,用中文。"
Phase 7: 抽取 answer 字段,生成汇总 markdown
原始输出是 JSON 包含 answer + citations,用 Python 抽 value.answer 字段:
python3 <<'PY'
import json, pathlib
base = pathlib.Path("./research/<topic>")
files = [
("query1-<slug>-raw.json", "## Query 1:<标题>"),
("query2-<slug>-raw.json", "## Query 2:<标题>"),
("query3-<slug>-raw.json", "## Query 3:<标题>"),
]
out = ["# <话题> 素材研究", "",
"> 基于 NotebookLM 笔记本 `<notebook-name>` 的分析结果", "",
"---", ""]
for fname, heading in files:
out.append(heading)
out.append("")
raw = (base/fname).read_text()
try:
data = json.loads(raw)
out.append(data.get("value",{}).get("answer",""))
except Exception as e:
out.append(f"(解析失败: {e})")
out.append("")
out.append("---")
out.append("")
(base/"素材研究汇总.md").write_text("
".join(out))
print("Written:", (base/"素材研究汇总.md").stat().st_size, "bytes")
PY
Output Contract
执行完要给用户报告:
- Notebook 名字 + alias + 实际 source 数量
- 3 份 raw JSON 和 1 份汇总 markdown 的落盘路径
- 失败/跳过的 source(如果有)
- 汇总文件的头部预览(前 20 行左右)
- 建议的下一步(交给用户决定下游怎么用,本 skill 到此结束)
Safety and Boundaries
- 不要默认跑 audio/video/slides 生成,这些费配额,用户没要就不碰
- 不要自动跑第二轮 research,一轮够用绝大多数场景
- 不要覆盖已有的
素材研究汇总.md,如果存在先追加-v2 - 研究查询里不要塞用户私密信息(notebook 是可搜索的)
Troubleshooting
nlm login 失效
nlm login --check # 会告诉你是否有效
nlm login # 重新登录
session 有效期约 20 分钟。
yt-dlp 搜索结果没输出
先看版本:
yt-dlp --version
如果太旧提示用户更新。JS runtime / ffmpeg 的警告可以忽略,不影响 --simulate 模式。
research 超时或卡住
单独查状态(不阻塞):
nlm research status <alias> --max-wait 0
如果 status 一直是 in_progress 超过 10 分钟,用 --force 重开:
nlm research start "..." --notebook-id <alias> --mode deep --force
query 输出太大无法直接看
所有 query 都重定向到文件,再用 Python 抽 answer,不要尝试在终端直接打印大 JSON。
source add 连续失败
- 检查是否有限流 → 增大 sleep 到 3-5 秒
- 检查 URL 格式(YouTube 要用
watch?v=标准格式,不用 shorts/live) - 检查登录态 →
nlm login --check
References
- NotebookLM CLI 完整指引:
notebooklm-mcp-cli(pip 包,作者 jacob-bd)随附的 nlm-skill,或上游 README https://github.com/jacob-bd/notebooklm-mcp-cli - yt-dlp 命令库:同仓库
../yt-dlp-direct/SKILL.md - 项目自身约定:如果你的工作目录有
CLAUDE.md/AGENTS.md,本 skill 不强依赖,可选阅读
---
Source: https://github.com/jacob-bd/notebooklm-mcp-cli
Author: xiaomoBoy
Discovered via: skillsdirectory.com
Genre: ai-agents
SKILL.md source
---
name: Research Collector
description: Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving result...
---
# Research Collector
Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving results as markdown. Best for "收集素材"、"给我找这个话题的相关视频和文章"、"整理成 NotebookLM 分析" type requests. Combines yt-dlp YouTube search, NotebookLM `nlm` CLI research, and markdown report output.
---
name: research-collector
description: Use when the user wants to collect research material for an article or topic by gathering YouTube videos and web articles into a NotebookLM notebook, then running analysis queries and saving results as markdown. Best for "收集素材"、"给我找这个话题的相关视频和文章"、"整理成 NotebookLM 分析" type requests. Combines yt-dlp YouTube search, NotebookLM `nlm` CLI research, and markdown report output.
---
# Research Collector
这个 skill 只做一件事:
- 为某个主题批量收集 YouTube 视频 + 网页文章,喂进 NotebookLM,跑分析查询,把结果落地到本地目录(默认 `./research/<topic>/`,可配置)
不负责:
- 写成品文章(交给你自己的写作工具 / skill)
- 选主标题
- 下载视频(交给本仓库里的 `yt-dlp-direct` skill)
- 发布到多平台(交给本仓库里的 `publisher-wechatsync` skill)
一句话原则:用户说"帮我收集 X 话题的素材"或"拉一批 YouTube + 文章到 NotebookLM",就走这条固定流水线,不要每次重新设计。
## When To Use
适用场景:
- 用户要为某个话题写推荐/测评/观点文,需要先做背景研究
- 用户说"帮我找 X 的热门 YouTube 视频和文章"
- 用户说"收集到 NotebookLM 里分析"
- 用户说"给我整理一份 X 话题的素材研究"
不适用场景:
- 用户已经有明确素材清单,只想要总结 → 直接跑 `nlm notebook query`
- 用户要做的是实时对话研究,不需要持久化到 notebook → 用 WebSearch + WebFetch
- 用户只要下载单个视频 → 用 `yt-dlp-direct`
## Preconditions
开始前必须确认:
1. `nlm` CLI 已安装且登录:`nlm login --check`
2. `yt-dlp` 在 PATH 中:`which yt-dlp`
3. 用户明确说明了主题和角度
4. 输出目录可写(默认 `./research/<topic>/`,可以通过 `RESEARCH_OUTPUT_DIR` 环境变量或对话里直接指定其他路径)
前置不满足时:
- `nlm login --check` 失败 → 让用户跑 `nlm login`,session 有效期 ~20 分钟
- `yt-dlp` 没装 → 停止并告诉用户
## Working Rules
- 先和用户对齐主题、角度、量级,再动手
- 每轮 ytsearch 默认 15 条,可以根据需要调整
- NotebookLM deep research 一次只能跑一个任务,不能并发
- 添加 source 时每条之间 sleep 2 秒,避免限流
- 所有产出(原始 JSON + 汇总 markdown)落到 `./research/<topic>/` 下(或用户指定的目录)
- 这个 skill 只负责收集和分析,不要擅自接着写成品文章
- 不要删 notebook,用户后面可能还要回去跑 query
## Core Workflow
### Phase 0: 对齐目标
在动手前必须和用户明确:
1. **主题是什么**(要一句话能喂给 ytsearch 的关键词)
2. **角度**(比如"最常用 + 个人创作" vs "最新发布 + 技术细节")
3. **笔记本命名**(默认 `<主题> 素材`)
4. **量级**(默认:15 油管 + deep research 自动 ~40 网页)
### Phase 1: 创建笔记本 + 设 alias
```bash
nlm notebook create "<话题> 素材"
# 从输出提取 ID,然后:
nlm alias set <short-name> <notebook-id>
```
alias 取短名,比如 `skills-research`、`vps-2026`,后续所有命令都用 alias。
### Phase 2: yt-dlp ytsearch 找热门 YouTube
并行跑 2-3 个不同角度的搜索,每个 15 条:
```bash
yt-dlp --simulate --print "%(title)s|%(webpage_url)s|%(view_count)s|%(uploader)s" \
"ytsearch15:<关键词 A>"
yt-dlp --simulate --print "%(title)s|%(webpage_url)s|%(view_count)s|%(uploader)s" \
"ytsearch15:<关键词 B>"
```
输出里的 JS runtime warning 可以忽略。
从结果里按以下规则筛 top 15:
- 去重(同一视频出现在多个搜索里)
- 优先官方账号(比如 Anthropic、OpenAI 等)
- 按 view count 从高到低,但要留 2-3 个垂直向角度的中腰部视频,避免全是爆款通稿
- 每个角度至少保留 5 条
### Phase 3: 把 YouTube 加为 source
用 bash 循环逐条加,每次 sleep 2 秒:
```bash
cat > /tmp/yt_urls.txt <<'EOF'
https://www.youtube.com/watch?v=XXX1
https://www.youtube.com/watch?v=XXX2
...
EOF
while IFS= read -r url; do
echo "=== Adding: $url ==="
nlm source add <alias> --url "$url" 2>&1 | tail -5
sleep 2
done < /tmp/yt_urls.txt
```
偶尔会遇到单条失败(视频不公开、区域限制),忽略继续,最后报告成功率。
### Phase 4: 跑 NotebookLM deep research 发现网页文章
```bash
nlm research start "<英文查询,适合 web 研究>" \
--notebook-id <alias> --mode deep
```
deep 模式 ~5 分钟,返回 ~40 条网页源。
**关键:一个 notebook 同一时间只能有一个 research 任务在跑**。如果要跑第二轮,必须等第一轮 import 完或 --force。
等待完成:
```bash
nlm research status <alias> --max-wait 360
```
Bash 工具默认 timeout 120 秒,必须加 `timeout: 400000`(即 400 秒)。
### Phase 5: 导入 research 结果
研究完成后从输出里拿 task-id,然后:
```bash
nlm research import <alias> <task-id> --timeout 600
```
Bash 工具加 `timeout: 700000`。
**注意**:用户有时会说"素材够了,不用再导入",要停下来直接进 Phase 6。
### Phase 6: 跑 3 个分析查询
默认跑 3 个角度,命令直接重定向到文件避免输出过大:
```bash
mkdir -p "./research/<topic>"
nlm notebook query <alias> "<问题 1 的中文提示>" \
> "./research/<topic>/query1-<slug>-raw.json" 2>&1
nlm notebook query <alias> "<问题 2 的中文提示>" \
> "./research/<topic>/query2-<slug>-raw.json" 2>&1
nlm notebook query <alias> "<问题 3 的中文提示>" \
> "./research/<topic>/query3-<slug>-raw.json" 2>&1
```
**每个 query 的 Bash 调用要加 `timeout: 240000`。**
默认 3 个查询模板(按需改关键词):
1. **Top 清单**:"基于所有 source,请列出被最多来源推荐的 Top 10 X。对每个 X 说明:(1) 名称 (2) 具体做什么 (3) 主要使用场景 (4) 推荐它的来源数量 (5) 类型分类。按推荐频率从高到低,用中文输出。"
2. **目标读者向**:"我要写一篇面向 <读者画像> 的文章。请筛选出对 <读者> 最有帮助的 Top 8 X,每个说明:(1) 名称 (2) 具体痛点 (3) 典型用法一句话 (4) 类型 (5) 最具体的来源编号。去掉不相关的,聚焦 <场景>,用中文。"
3. **入门 + 坑**:"针对 <读者> 使用 X 时,请总结:(1) 最快入门方式 (2) 去哪里获取 (3) 最容易踩的 5 个坑 (4) 什么时候其实不需要 (5) 最新的重要更新。每点配来源编号,用中文。"
### Phase 7: 抽取 answer 字段,生成汇总 markdown
原始输出是 JSON 包含 answer + citations,用 Python 抽 `value.answer` 字段:
```bash
python3 <<'PY'
import json, pathlib
base = pathlib.Path("./research/<topic>")
files = [
("query1-<slug>-raw.json", "## Query 1:<标题>"),
("query2-<slug>-raw.json", "## Query 2:<标题>"),
("query3-<slug>-raw.json", "## Query 3:<标题>"),
]
out = ["# <话题> 素材研究", "",
"> 基于 NotebookLM 笔记本 `<notebook-name>` 的分析结果", "",
"---", ""]
for fname, heading in files:
out.append(heading)
out.append("")
raw = (base/fname).read_text()
try:
data = json.loads(raw)
out.append(data.get("value",{}).get("answer",""))
except Exception as e:
out.append(f"(解析失败: {e})")
out.append("")
out.append("---")
out.append("")
(base/"素材研究汇总.md").write_text("
".join(out))
print("Written:", (base/"素材研究汇总.md").stat().st_size, "bytes")
PY
```
## Output Contract
执行完要给用户报告:
1. Notebook 名字 + alias + 实际 source 数量
2. 3 份 raw JSON 和 1 份汇总 markdown 的落盘路径
3. 失败/跳过的 source(如果有)
4. 汇总文件的头部预览(前 20 行左右)
5. 建议的下一步(交给用户决定下游怎么用,本 skill 到此结束)
## Safety and Boundaries
- 不要默认跑 audio/video/slides 生成,这些费配额,用户没要就不碰
- 不要自动跑第二轮 research,一轮够用绝大多数场景
- 不要覆盖已有的 `素材研究汇总.md`,如果存在先追加 `-v2`
- 研究查询里不要塞用户私密信息(notebook 是可搜索的)
## Troubleshooting
### nlm login 失效
```bash
nlm login --check # 会告诉你是否有效
nlm login # 重新登录
```
session 有效期约 20 分钟。
### yt-dlp 搜索结果没输出
先看版本:
```bash
yt-dlp --version
```
如果太旧提示用户更新。JS runtime / ffmpeg 的警告可以忽略,不影响 `--simulate` 模式。
### research 超时或卡住
单独查状态(不阻塞):
```bash
nlm research status <alias> --max-wait 0
```
如果 status 一直是 in_progress 超过 10 分钟,用 `--force` 重开:
```bash
nlm research start "..." --notebook-id <alias> --mode deep --force
```
### query 输出太大无法直接看
所有 query 都重定向到文件,再用 Python 抽 answer,不要尝试在终端直接打印大 JSON。
### source add 连续失败
- 检查是否有限流 → 增大 sleep 到 3-5 秒
- 检查 URL 格式(YouTube 要用 `watch?v=` 标准格式,不用 shorts/live)
- 检查登录态 → `nlm login --check`
## References
- NotebookLM CLI 完整指引:`notebooklm-mcp-cli`(pip 包,作者 jacob-bd)随附的 nlm-skill,或上游 README https://github.com/jacob-bd/notebooklm-mcp-cli
- yt-dlp 命令库:同仓库 `../yt-dlp-direct/SKILL.md`
- 项目自身约定:如果你的工作目录有 `CLAUDE.md` / `AGENTS.md`,本 skill 不强依赖,可选阅读
---
**Source**: https://github.com/jacob-bd/notebooklm-mcp-cli
**Author**: xiaomoBoy
**Discovered via**: skillsdirectory.com
**Genre**: ai-agents
Related skills 6
running-claude-code-via-litellm-copilot
Use when routing Claude Code through a local LiteLLM proxy to GitHub Copilot, reducing direct Anthropic spend, configuring ANTHROPIC_BASE_URL or ANTHROPIC_MODEL overrides, or troubleshooting Copilot proxy setup failures such as model-not-found, no localhost traffic, or GitHub 401/403 auth errors.
skills-cli
Use when users ask to discover, install, list, check, update, remove, back up, restore, sync, or initialize Agent Skills, mention `bunx skills`, `npx skills`, `skills.sh`, or `skills-lock.json`, ask "find a skill for X", or want help extending agent capabilities with installable skills.
repo-intake-and-plan
Narrow RigorPilot helper for README-first deep learning repo reproduction. Use when the task is specifically to scan a repository, read the README and common project files, extract documented commands, classify inference, evaluation, and training candidates, and return the smallest trustworthy reproduction plan to the main orchestrator. Do not use for environment setup, asset download, command execution, final reporting, paper lookup, or end-to-end orchestration.
image-to-video
Animate any still image on RunComfy — this skill is a smart router that matches the user's intent to the right i2v model in the RunComfy catalog. Picks HappyHorse 1.0 I2V (Arena #1, native audio, identity preservation) for general animations, Wan 2.7 with `audio_url` for custom-voiceover lip-sync, or Seedance 2.0 Pro for multi-modal animation from image + reference video + reference audio. Bundles each model's documented prompting patterns so the caller gets sharper output without burning ite...
video-edit
Edit existing video on RunComfy — this skill is a smart router that matches the user's intent to the right edit model in the RunComfy catalog. Picks Wan 2.7 Edit-Video (general restyle / background swap / packaging swap, identity + motion preservation), Kling 2.6 Pro Motion Control (transfer precise motion from a reference video to a target character), or Lucy Edit Restyle (lightweight identity-stable restyle / outfit swap). Bundles each model's documented prompting patterns so the skill gets...
nano-banana-2
Generate images with Google Nano Banana 2 (Gemini-family flash-tier text-to-image) on RunComfy — bundled with the model's documented prompting patterns so the skill gets sharper output than naive prompting against the same model. Documents Nano Banana 2's strengths (rapid iteration, in-image typography rendering, predictable framing, optional web-grounded context), the resolution-tier pricing, the safety-tolerance dial, and when to route to Nano Banana Pro / GPT Image 2 / Flux 2 / Seedream in...