OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  clawdbites:从 Instagram Reels 视频中提取食谱内容

clawdbites:从 Instagram Reels 视频中提取食谱内容

 
  deep ·  2026-02-06 11:57:39 · 3 次点击  · 0 条评论  

名称: clawdbites
描述: 从 Instagram Reels 中提取食谱。当用户发送 Instagram Reels 链接并希望获取字幕中的食谱时使用。将食材、步骤和营养信息解析为清晰格式。
主页: https://github.com/kylelol/ClawdBites
元数据: {"clawdbot":{"emoji":"🦞","os":["darwin","linux"],"requires":{"bins":["yt-dlp","ffmpeg","whisper"]},"install":[{"id":"yt-dlp","kind":"brew","formula":"yt-dlp","bins":["yt-dlp"],"label":"通过 Homebrew 安装 yt-dlp"},{"id":"ffmpeg","kind":"brew","formula":"ffmpeg","bins":["ffmpeg"],"label":"通过 Homebrew 安装 ffmpeg"},{"id":"whisper","kind":"shell","command":"pip3 install --user openai-whisper","label":"安装 Whisper(本地运行,无需 API 密钥)"}]}}


Instagram 食谱提取器

使用多层方法从 Instagram Reels 中提取食谱:
1. 字幕解析 — 即时检查,优先查看描述
2. 音频转录 — 使用 Whisper(本地运行,无需 API 密钥)
3. 画面分析 — 使用视觉模型识别屏幕上的文字

无需 Instagram 登录。适用于公开的 Reels。

使用时机

  • 用户发送 Instagram Reels 链接
  • 用户提及“Instagram 上的食谱”或“保存这个 Reel”
  • 用户希望从视频帖子中提取食谱详情

工作原理(强制流程)

务必遵循此完整流程 — 如果字幕中缺少步骤说明,切勿在解析字幕后停止:

  1. 用户发送 Instagram Reels URL
  2. 使用 yt-dlp (--dump-json) 提取元数据
  3. 解析字幕以获取食谱详情
  4. 检查完整性: 字幕中是否同时包含食材步骤说明?
    • 是: 呈现食谱
    • 否(缺少步骤说明或不完整): 自动进行音频转录 — 不要停止或询问用户
  5. 如果需要音频转录:
    • 下载视频:yt-dlp -o "/tmp/reel.mp4" "URL"
    • 提取音频:ffmpeg -y -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav
    • 转录:whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp
    • 合并字幕中的食材与音频中的步骤说明
  6. 呈现清晰、格式化的食谱(根据需要结合字幕和音频内容)
  7. 用户决定后续操作(保存到笔记、添加到愿望清单等)

完整性检查启发式规则:
- 包含食材 = 包含 3 个或以上“数量+物品”模式(例如,“1 杯面粉”、“2 磅鸡肉”)
- 包含步骤说明 = 包含动作动词(搅拌、烹饪、烘烤、混合、倒入、添加)+ 顺序或编号步骤

提取命令

yt-dlp --dump-json "https://www.instagram.com/reel/SHORTCODE/" 2>/dev/null

JSON 输出中的关键字段:
- description — 包含食谱的字幕
- uploader — 创作者姓名
- channel — 创作者用户名
- webpage_url — 原始 URL
- like_count — 受欢迎程度指标

食谱解析

在字幕中寻找以下模式:

营养信息:
- “X 卡路里 | Xg 蛋白质 | Xg 碳水 | Xg 脂肪”
- “每份营养信息”
- “卡路里/蛋白质/碳水/脂肪”

食材:
- 以数量开头的行(1 杯、2 汤匙、24 盎司)
- 包含计量单位的行
- 表情符号项目符号(🥩 🌽 🧀 等)

章节:
- “对于 [组成部分]:”
- “食材:”
- “步骤:”
- “说明:”

输出格式

清晰地呈现提取的食谱:

## [食谱名称]
*来自 @[用户名]*

**营养信息(每份):** X 卡路里 | Xg 蛋白质 | Xg 碳水 | Xg 脂肪

### 食材
- [食材 1]
- [食材 2]
...

### 步骤
1. [步骤 1]
2. [步骤 2]
...

---
来源:[原始 URL]

提取后的用户操作

让用户决定后续操作:
- “保存到我的食谱” → 保存到 Apple 备忘录(如果 meal-planner 技能可用)
- “添加到愿望清单” → 保存到 memory/recipe-wishlist.json
- “只显示给我看” → 仅显示,不保存
- “为下周计划这个” → 转交给 meal-planner 技能

愿望清单存储

用于存储用户稍后想尝试的食谱(可选):

memory/recipe-wishlist.json:

{
  "recipes": [
    {
      "name": "食谱名称",
      "source": "instagram",
      "sourceUrl": "https://instagram.com/reel/...",
      "handle": "@创作者",
      "addedDate": "2026-01-26",
      "tried": false,
      "macros": {
        "calories": 585,
        "protein": 56,
        "carbs": 25,
        "fat": 28,
        "servings": 3
      },
      "ingredients": [...],
      "instructions": [...]
    }
  ]
}

错误处理

如果 yt-dlp 失败:
- 检查 URL 是否为有效的 Instagram Reels 格式
- 可能是私密账户 — 通知用户
- 建议用户手动粘贴字幕文本作为备用方案

如果在字幕中未找到食谱(重要):

提取后,扫描字幕寻找食谱指示:
- 食材数量(数字 + 单位,如盎司、杯、汤匙、磅)
- 食谱章节(“对于...”、“食材:”、“步骤:”)
- 烹饪动词(烘烤、烹饪、炒、混合、结合)
- 营养信息(卡路里、蛋白质、碳水、脂肪)

如果未找到,请明确告知用户:

“我提取了字幕,但看起来食谱不在里面 — 这可能只是一个预告,或者食谱只在视频本身中展示。以下是字幕内容:

[显示字幕]

几个选项:
1. 查看评论 — 有时创作者会在那里发布食谱
2. 查看他们的个人简介链接 — 可能指向完整食谱
3. 描述你在视频中看到的内容,我可以帮你找到类似的食谱”

食谱检测启发式规则:

包含食谱 如果字幕包含:
- 3 个或以上类似食材的模式(数量 + 食物)
- 或 “recipe” + 食材列表
- 或 营养细分 + 食材
- 或 编号/项目符号步骤说明

不包含食谱 如果字幕:
- 大部分是标签
- 只是描述/预告
- 少于 100 个字符
- 没有数量或计量单位

与 meal-planner 集成

meal-planner 技能可以引用此技能:
- 计划餐食时,检查愿望清单中未尝试的食谱
- 根据现有食材推荐愿望清单中的食谱
- 在食谱用于餐食计划后标记为“已尝试”

音频转录(V2)— 强制备用方案

当字幕缺少步骤说明时,务必自动转录音频。 不要停下来询问用户 — 直接执行。这是最常见的情况,因为创作者通常将食材放在字幕中,但口述步骤说明。

步骤 1:下载视频

yt-dlp -o "/tmp/reel.mp4" "https://instagram.com/reel/XXX"

步骤 2:提取音频

ffmpeg -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav

步骤 3:使用 Whisper 转录

/Users/kylekirkland/Library/Python/3.14/bin/whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp

步骤 4:解析转录文本寻找食谱
寻找烹饪步骤说明、口述的食材。

缺失计量的推断

务必在未提供时推断数量。 切勿呈现没有数量的食谱 — 根据上下文和标准包装尺寸进行估算。

模糊语言 → 具体数量

他们说的内容 推断
“一些鸡肉” ~1 磅
“一点大蒜” 2-3 瓣
“一把菠菜” ~2 杯
“淋上油” 1-2 汤匙
“根据口味调味” ½ 茶匙盐,¼ 茶匙胡椒
“少许酱油” 1-2 汤匙
“几汤匙” 2-3 汤匙
“一些米饭” 1 杯生米
“顶部放奶酪” ½ - 1 杯碎奶酪
“切碎的洋葱” 1 个中等洋葱
“甜椒” 2 个甜椒

标准包装尺寸(当提到物品但未指定数量时)

食材 标准包装 推断
酥皮 17 盎司片 1 片
碎牛肉/火鸡肉 1 磅包装 1 磅
鸡胸肉 ~1.5 磅包装 1.5 磅
香肠链接 14 盎司 / 4-5 根 1 包
培根 12 盎司 / 12 片 ½ 包 (6 片)
碎奶酪 8 盎司袋 1-2 杯
玉米饼 8-10 片装 1 包
罐装豆子 15 盎司罐 1 罐
高汤/汤底 32 盎司盒 1-2 杯
意大利面 16 盎司盒 8 盎司 (半盒)
米饭 2 磅袋 1-2 杯生米

基于上下文的缩放

根据食谱类型:
- 2 人份炒菜 → 1 磅蛋白质,4 杯蔬菜
- 汤/炖菜 → 1.5-2 磅蛋白质,4 杯高汤
- 烤盘餐 → 1.5 磅蛋白质,3-4 杯蔬菜
- 开胃菜 → 较小份量,估算每批约 12-15 份

根据提到的份数:
- “4 人份” → 按 4 人份缩放标准数量
- “一周备餐” → 假设 5-8 人份
- 未提及份数 → 默认为 4 人份

根据蛋白质目标(如果用户有营养目标):
- 每份 40-50 克蛋白质 → 每份约 6-8 盎司熟肉
- 相应缩放食谱蛋白质含量

输出格式

始终清晰地呈现推断的数量:

### 食材
- 1 磅火鸡肉 *(估算)*
- 1 个中等洋葱,切碎 *(估算)*
- 2 杯高汤 *(基于典型汤品估算)*

(估算) 标记推断的数量,以便用户知道哪些来自源内容,哪些是推断的。

组合提取流程

1. 尝试字幕(即时)
   └── yt-dlp --dump-json → 解析描述
   └── 找到食谱? → 完成 ✅
   └── 检查“置顶”/“在评论中”/“查看评论” → 标记

2. 如果标记:检查创作者评论
   └── 在评论中查找创作者用户名
   └── 如果找到包含食谱的创作者评论 → 完成 ✅
   └── 如果未找到 → 继续 + 通知用户

3. 尝试音频(30-60 秒)
   └── 下载视频
   └── 使用 ffmpeg 提取音频
   └── 使用 Whisper(基础模型)转录
   └── 解析转录文本寻找食谱
   └── 推断缺失的计量
   └── 找到食谱? → 完成 ✅

4. 呈现结果 + 必要时提示
   └── 显示从音频中提取的内容
   └── 如果标记了“置顶”,告知用户:
       “创作者提到完整食谱在评论中置顶。
        我从音频中提取了能获取的内容,但如果你想要
        精确的计量,请将置顶评论粘贴到这里,我会
        将其与我找到的内容合并。”

5. 尝试画面分析(如果音频不完整)
   └── 使用 ffmpeg 提取 5-8 个关键帧
   └── 发送给 Claude 视觉模型
   └── 询问:“提取显示的任何食谱文本、食材或计量”
   └── 将发现与音频转录合并

6. 备用方案(未找到任何内容)
   └── 通知用户:“字幕或音频/视频中未找到食谱”
   └── 提供:根据视频标题/描述搜索类似食谱

画面分析

提取关键帧并使用视觉模型分析。

提取帧:

# 每 5 秒提取 1 帧
ffmpeg -i /tmp/reel.mp4 -vf "fps=1/5" /tmp/frame_%02d.jpg

# 或提取特定数量的均匀分布帧
ffmpeg -i /tmp/reel.mp4 -vf "select='not(mod(n,30))'" -vsync vfr /tmp/frame_%02d.jpg

发送给视觉模型:
使用 Claude 的图像分析功能读取每一帧:
- 食谱卡片 / 标题屏幕
- 屏幕上显示的食材列表
- 文字叠加中的计量
- 显示的逐步说明

视觉提示词:

分析这个烹饪视频的帧。提取任何:
- 食谱名称或标题
- 带数量的食材
- 烹饪步骤说明
- 营养信息 / 营养数据
- 任何其他显示的食谱相关文本

如果没有可见的食谱文本,请回复“未找到食谱文本。”

合并策略:
- 音频转录 = 主要来源(口述步骤说明)
- 画面分析 = 补充(精确计量、食谱卡片)
- 结合两者,优先使用视觉中的具体计量而非音频推断

置顶评论检测

扫描字幕中的以下短语(不区分大小写):
- “recipe pinned”
- “pinned in comments”
- “check comments”
- “in the comments”
- “comment below”
- “recipe below”
- “full recipe in comments”

如果检测到,在提取后标记并通知用户:

“请注意 — 创作者说食谱在评论中置顶。
我从音频中获取了能获取的内容,但 yt-dlp 无法在没有登录的情况下访问置顶评论。
如果你想要确切的食谱,复制置顶评论并发送给我 — 我会将其正确格式化。”

要求

  • yt-dlpbrew install yt-dlp
  • ffmpegbrew install ffmpeg
  • whisperpip3 install openai-whisper(本地运行,无需 API 密钥)
  • 对于公开 Reels,无需 Instagram 登录
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor