360 Secure SkillHub
360 安全技能中心

Recipe to List

从菜谱照片(Gemini 视觉)或网页搜索提取食材,按保守的同义词/重叠规则与现有 Todoist Shopping 清单比对,默认只添加缺失项、跳过盐和胡椒,同单位则累加数量;同时把菜谱保存为 recipes/ 下的 markdown 并追加 index.md。

borahm
borahm
热度 56.10
最近更新 2026-05-17 11:03:37
分类:生活依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:食谱 / 购物 / 自动化脚本 / 工作流 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add recipe-to-list
Metadata
name
recipe-to-list
description
Turn recipes into a Todoist Shopping list. Extract ingredients from recipe photos (Gemini Flash vision) or recipe web pages (search + fetch), then compare against the existing Shopping project with conservative synonym/overlap rules, skip pantry staples (salt/pepper), and sum quantities when units match. Also saves each cooked recipe into the workspace cookbook (recipes/).

Create Shopping List (Gemini Flash + Todoist)

Target flow:

  1. Input is either a photo or a recipe web search
  2. Extract ingredients (Gemini Flash for photos; web_fetch text → Gemini for websites)
  3. Pull current Todoist Shopping list
  4. Compare using overlap + synonym mapping (kept conservative; only merge high-confidence equivalents like coriander↔cilantro, panko↔breadcrumbs)
  5. Update Shopping (default: add only missing items; skip salt/pepper)

Use the bundled script to handle the photo → ingredients → Shopping update part.

It also automatically saves a markdown entry into recipes/ (your cookbook knowledge base) and appends to recipes/index.md.

For recipe-name → web search, do it confirm-first using web_search + web_fetch, then feed the ingredients into the same update logic (and save the recipe).

Prereqs

  • Env: GEMINI_API_KEY (or GOOGLE_API_KEY) for Gemini
  • Env: TODOIST_API_TOKEN for Todoist
  • Bin: todoist (todoist-ts-cli)

Output formatting

  • Items are reformatted to start with the ingredient name, followed by a parenthetical quantity.
  • The Shopping list is kept flat (no Todoist sections/groups).

Run

python3 skills/recipe-to-list/scripts/recipe_to_list.py \
  --image /path/to/photo.jpg \
  --title "<optional title>" \
  --source "photo:/path/to/photo.jpg"

Optional flags

  • --model gemini-2.0-flash (default; falls back automatically) or any compatible Gemini vision model
  • --dry-run to print extracted items without creating tasks
  • --prefix "[Recipe] " to prefix each created task
  • --no-overlap-check to skip checking your existing Shopping list
  • --include-pantry to include salt/pepper
  • --no-save to skip saving into recipes/

What to send to the model

The script prompts Gemini to return strict JSON:

{
  "items": ["2 large globe eggplants", "kosher salt", "..."],
  "notes": "optional"
}

If parsing fails, rerun with a clearer crop (ingredients list only) or provide a manual list.