[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MT4RH22SNKTY26CHHRTCVX":3,"skill-same:01M6MT4RH22SNKTY26CHHRTCVX":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":68,"updatedAt":69,"install":70,"resources":83},"01M6MT4RH22SNKTY26CHHRTCVX","clawdbites",null,"Extract recipes from Instagram reels. Use when a user sends an Instagram reel link and wants to get the recipe from the caption. Parses ingredients, instructions, and macros into a clean format.","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FGit和GitHub\u002Fclawdbites\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"clean","reel","darwin","pip3","recipe","recipes","get","local","macros","linux","whisper","use","install","brew","instagram","api","dlp","homebrew","openai","2026-11-10 10:12:30",false,"---\nname: clawdbites\ndescription: Extract recipes from Instagram reels. Use when a user sends an Instagram reel link and wants to get the recipe from the caption. Parses ingredients, instructions, and macros into a clean format.\nhomepage: https:\u002F\u002Fgithub.com\u002Fkylelol\u002FClawdBites\nmetadata: {\"clawdbot\":{\"emoji\":\"?\",\"os\":[\"darwin\",\"linux\"],\"requires\":{\"bins\":[\"yt-dlp\",\"ffmpeg\",\"whisper\"]},\"install\":[{\"id\":\"yt-dlp\",\"kind\":\"brew\",\"formula\":\"yt-dlp\",\"bins\":[\"yt-dlp\"],\"label\":\"Install yt-dlp via Homebrew\"},{\"id\":\"ffmpeg\",\"kind\":\"brew\",\"formula\":\"ffmpeg\",\"bins\":[\"ffmpeg\"],\"label\":\"Install ffmpeg via Homebrew\"},{\"id\":\"whisper\",\"kind\":\"shell\",\"command\":\"pip3 install --user openai-whisper\",\"label\":\"Install Whisper (local, no API key)\"}]}}\n---\n\n# Instagram Recipe Extractor\n\nExtract recipes from Instagram reels using a multi-layered approach:\n1. **Caption parsing** — Instant, check description first\n2. **Audio transcription** — Whisper (local, no API key)\n3. **Frame analysis** — Vision model for on-screen text\n\nNo Instagram login required. Works on public reels.\n\n## When to Use\n\n- User sends an Instagram reel link\n- User mentions \"recipe from Instagram\" or \"save this reel\"\n- User wants to extract recipe details from a video post\n\n## How It Works (MANDATORY FLOW)\n\n**ALWAYS follow this complete flow — do not stop after caption if instructions are missing:**\n\n1. User sends Instagram reel URL\n2. Extract metadata using yt-dlp (`--dump-json`)\n3. Parse the caption for recipe details\n4. **Check completeness:** Does caption have BOTH ingredients AND instructions?\n   - ✅ **YES:** Present the recipe\n   - ❌ **NO (missing instructions or incomplete):** **Automatically proceed to audio transcription** — do NOT stop or ask the user\n5. If audio transcription needed:\n   - Download video: `yt-dlp -o \"\u002Ftmp\u002Freel.mp4\" \"URL\"`\n   - Extract audio: `ffmpeg -y -i \u002Ftmp\u002Freel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 \u002Ftmp\u002Freel.wav`\n   - Transcribe: `whisper \u002Ftmp\u002Freel.wav --model base --output_format txt --output_dir \u002Ftmp`\n   - Merge caption ingredients with audio instructions\n6. Present clean, formatted recipe (combining caption + audio as needed)\n7. User decides what to do (save to notes, add to wishlist, etc.)\n\n**Completeness check heuristics:**\n- Has ingredients = contains 3+ quantity+item patterns (e.g., \"1 cup flour\", \"2 lbs chicken\")\n- Has instructions = contains action verbs (blend, cook, bake, mix, pour, add) + sequence OR numbered steps\n\n## Extraction Command\n\n```bash\nyt-dlp --dump-json \"https:\u002F\u002Fwww.instagram.com\u002Freel\u002FSHORTCODE\u002F\" 2>\u002Fdev\u002Fnull\n```\n\n**Key fields from JSON output:**\n- `description` — The caption containing the recipe\n- `uploader` — Creator's name\n- `channel` — Creator's handle\n- `webpage_url` — Original URL\n- `like_count` — Popularity indicator\n\n## Recipe Parsing\n\nLook for these patterns in the caption:\n\n**Macros:**\n- \"X Calories | Xg P | Xg C | Xg F\"\n- \"Macros per serving\"\n- \"Cal\u002FProtein\u002FCarbs\u002FFat\"\n\n**Ingredients:**\n- Lines starting with quantities (1 cup, 2 tbsp, 24oz)\n- Lines with measurement units\n- Emoji bullet points (? ? ? etc.)\n\n**Sections:**\n- \"For the [component]:\"\n- \"Ingredients:\"\n- \"Instructions:\"\n- \"Directions:\"\n\n## Output Format\n\nPresent extracted recipe cleanly:\n\n```\n## [Recipe Name]\n*From @[handle]*\n\n**Macros (per serving):** X cal | Xg P | Xg C | Xg F\n\n### Ingredients\n- [ingredient 1]\n- [ingredient 2]\n...\n\n### Instructions\n1. [step 1]\n2. [step 2]\n...\n\n---\nSource: [original URL]\n```\n\n## User Actions After Extraction\n\nLet the user decide what to do:\n- \"Save to my recipes\" → Save to Apple Notes (if meal-planner skill available)\n- \"Add to wishlist\" → Save to `memory\u002Frecipe-wishlist.json`\n- \"Just show me\" → Display only, no save\n- \"Plan this for next week\" → Hand off to meal-planner skill\n\n## Wishlist Storage\n\nOptional storage for recipes user wants to try later:\n\n**memory\u002Frecipe-wishlist.json:**\n```json\n{\n  \"recipes\": [\n    {\n      \"name\": \"Recipe Name\",\n      \"source\": \"instagram\",\n      \"sourceUrl\": \"https:\u002F\u002Finstagram.com\u002Freel\u002F...\",\n      \"handle\": \"@creator\",\n      \"addedDate\": \"2026-01-26\",\n      \"tried\": false,\n      \"macros\": {\n        \"calories\": 585,\n        \"protein\": 56,\n        \"carbs\": 25,\n        \"fat\": 28,\n        \"servings\": 3\n      },\n      \"ingredients\": [...],\n      \"instructions\": [...]\n    }\n  ]\n}\n```\n\n## Error Handling\n\n**If yt-dlp fails:**\n- Check if URL is valid Instagram reel format\n- May be a private account — inform user\n- Suggest user paste caption text manually as fallback\n\n**If no recipe found in caption (IMPORTANT):**\n\nAfter extracting, scan the caption for recipe indicators:\n- Ingredient quantities (numbers + units like oz, cups, tbsp, lbs)\n- Recipe sections (\"For the...\", \"Ingredients:\", \"Instructions:\")\n- Cooking verbs (bake, cook, sauté, mix, combine)\n- Macro information (calories, protein, carbs, fat)\n\n**If none found, tell the user clearly:**\n\n> \"I pulled the caption but it doesn't look like the recipe is there — it might just be a teaser or the recipe is only shown in the video itself. Here's what the caption says:\n> \n> [show caption]\n> \n> A few options:\n> 1. Check the comments — sometimes creators post recipes there\n> 2. Check their bio link — might lead to the full recipe\n> 3. Describe what you saw in the video and I can help find a similar recipe\"\n\n**Recipe detection heuristics:**\n```\nHAS_RECIPE if caption contains:\n- 3+ ingredient-like patterns (quantity + food item)\n- OR \"recipe\" + ingredient list\n- OR macro breakdown + ingredients\n- OR numbered\u002Fbulleted instructions\n\nNO_RECIPE if caption is:\n- Mostly hashtags\n- Just a description\u002Fteaser\n- Under 100 characters\n- No quantities or measurements\n```\n\n## Integration with meal-planner\n\nThe meal-planner skill can reference this skill:\n- When planning meals, check wishlist for untried recipes\n- Suggest wishlist recipes that match pantry items\n- Mark recipes as \"tried\" after they're used in a meal plan\n\n## Audio Transcription (V2) — MANDATORY FALLBACK\n\n**When caption is missing instructions, ALWAYS transcribe the audio automatically.** Do not stop and ask the user — just do it. This is the most common case since creators often put ingredients in captions but speak the instructions.\n\n**Step 1: Download video**\n```bash\nyt-dlp -o \"\u002Ftmp\u002Freel.mp4\" \"https:\u002F\u002Finstagram.com\u002Freel\u002FXXX\"\n```\n\n**Step 2: Extract audio**\n```bash\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 \u002Ftmp\u002Freel.wav\n```\n\n**Step 3: Transcribe with Whisper**\n```bash\n\u002FUsers\u002Fkylekirkland\u002FLibrary\u002FPython\u002F3.14\u002Fbin\u002Fwhisper \u002Ftmp\u002Freel.wav --model base --output_format txt --output_dir \u002Ftmp\n```\n\n**Step 4: Parse transcript for recipe**\nLook for cooking instructions, ingredients mentioned verbally.\n\n## Inference for Missing Measurements\n\n**ALWAYS infer quantities when not provided.** Never present a recipe without amounts — estimate based on context and standard package sizes.\n\n### Vague Language → Specific Amounts\n\n| What they say | Infer |\n|--------------|-------|\n| \"some chicken\" | ~1 lb |\n| \"a bit of garlic\" | 2-3 cloves |\n| \"handful of spinach\" | ~2 cups |\n| \"drizzle of oil\" | 1-2 tbsp |\n| \"season to taste\" | ½ tsp salt, ¼ tsp pepper |\n| \"splash of soy sauce\" | 1-2 tbsp |\n| \"a few tablespoons\" | 2-3 tbsp |\n| \"some rice\" | 1 cup dry |\n| \"cheese on top\" | ½ - 1 cup shredded |\n| \"diced onion\" | 1 medium onion |\n| \"bell peppers\" | 2 peppers |\n\n### Standard Package Sizes (when item mentioned without amount)\n\n| Ingredient | Standard Package | Infer |\n|------------|------------------|-------|\n| Puff pastry | 17oz sheet | 1 sheet |\n| Ground beef\u002Fturkey | 1 lb pack | 1 lb |\n| Chicken breast | ~1.5 lb pack | 1.5 lbs |\n| Sausage links | 14oz \u002F 4-5 links | 1 package |\n| Bacon | 12oz \u002F 12 slices | ½ package (6 slices) |\n| Shredded cheese | 8oz bag | 1-2 cups |\n| Tortillas | 8-10 count | 1 package |\n| Canned beans | 15oz can | 1 can |\n| Broth\u002Fstock | 32oz carton | 1-2 cups |\n| Pasta | 16oz box | 8oz (half box) |\n| Rice | 2 lb bag | 1-2 cups dry |\n\n### Context-Aware Scaling\n\n**By recipe type:**\n- Stir fry for 2 → 1 lb protein, 4 cups veggies\n- Soup\u002Fstew → 1.5-2 lbs protein, 4 cups broth\n- Sheet pan meal → 1.5 lbs protein, 3-4 cups veggies\n- Appetizers → smaller portions, estimate ~12-15 pieces per batch\n\n**By servings mentioned:**\n- \"Serves 4\" → Scale standard amounts for 4\n- \"Meal prep for the week\" → Assume 5-8 servings\n- No servings mentioned → Default to 4 servings\n\n**By protein target (if user has macro goals):**\n- 40-50g protein per serving → ~6-8oz cooked meat per portion\n- Scale recipe protein accordingly\n\n### Output Format\n\nAlways present inferred amounts clearly:\n```\n### Ingredients\n- 1 lb ground turkey *(estimated)*\n- 1 medium onion, diced *(estimated)*\n- 2 cups broth *(estimated based on typical soup)*\n```\n\nMark inferred quantities with *(estimated)* so user knows what came from the source vs inference.\n\n## Combined Extraction Flow\n\n```\n1. TRY CAPTION (instant)\n   └── yt-dlp --dump-json → parse description\n   └── Recipe found? → DONE ✅\n   └── Check for \"pinned\" \u002F \"in comments\" \u002F \"check comments\" → FLAG\n   \n2. IF FLAGGED: CHECK FOR CREATOR COMMENT\n   └── Look through comments for creator's username\n   └── If creator comment found with recipe → DONE ✅\n   └── If not found → continue + notify user\n\n3. TRY AUDIO (30-60 sec)\n   └── Download video\n   └── Extract audio with ffmpeg\n   └── Transcribe with Whisper (base model)\n   └── Parse transcript for recipe\n   └── Infer missing measurements\n   └── Recipe found? → DONE ✅\n\n4. PRESENT RESULTS + PROMPT IF NEEDED\n   └── Show what was extracted from audio\n   └── If \"pinned\" was flagged, tell user:\n       \"The creator mentioned the full recipe is pinned in the comments.\n        I extracted what I could from the audio, but if you want the \n        exact measurements, paste the pinned comment here and I'll \n        merge it with what I found.\"\n   \n5. TRY FRAME ANALYSIS (if audio incomplete)\n   └── Extract 5-8 key frames with ffmpeg\n   └── Send to Claude vision\n   └── Ask: \"Extract any recipe text, ingredients, or measurements shown\"\n   └── Merge findings with audio transcript\n   \n6. FALLBACK (nothing found)\n   └── Inform user: \"Recipe wasn't in caption or audio\u002Fvideo\"\n   └── Offer: search for similar recipe based on video title\u002Fdescription\n```\n\n## Frame Analysis\n\nExtract key frames and analyze with vision model.\n\n**Extract frames:**\n```bash\n# Extract 1 frame every 5 seconds\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vf \"fps=1\u002F5\" \u002Ftmp\u002Fframe_%02d.jpg\n\n# Or extract specific number of frames evenly distributed\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vf \"select='not(mod(n,30))'\" -vsync vfr \u002Ftmp\u002Fframe_%02d.jpg\n```\n\n**Send to vision model:**\nUse Claude's image analysis to read each frame:\n- Recipe cards \u002F title screens\n- Ingredient lists shown on screen\n- Measurements in text overlays\n- Step-by-step instructions displayed\n\n**Vision prompt:**\n```\nAnalyze this frame from a cooking video. Extract any:\n- Recipe name or title\n- Ingredients with quantities\n- Cooking instructions\n- Nutritional information \u002F macros\n- Any other recipe-related text shown\n\nIf no recipe text is visible, respond with \"No recipe text found.\"\n```\n\n**Merge strategy:**\n- Audio transcript = primary source (spoken instructions)\n- Frame analysis = supplement (exact measurements, recipe cards)\n- Combine both, prefer specific measurements from visual over inferred from audio\n\n## Pinned Comment Detection\n\nScan caption for these phrases (case-insensitive):\n- \"recipe pinned\"\n- \"pinned in comments\"\n- \"check comments\"\n- \"in the comments\"\n- \"comment below\"\n- \"recipe below\"\n- \"full recipe in comments\"\n\nIf detected, flag and notify user after extraction:\n\n> \"Heads up — the creator said the recipe is pinned in the comments. \n> I got what I could from the audio, but yt-dlp can't access pinned comments \n> without login. If you want the exact recipe, copy the pinned comment and \n> send it to me — I'll format it properly.\"\n\n## Requirements\n\n- `yt-dlp` — `brew install yt-dlp`\n- `ffmpeg` — `brew install ffmpeg`\n- `whisper` — `pip3 install openai-whisper` (runs locally, no API key)\n- No Instagram login required for public reels\n","# Instagram Recipe Extractor\n\nExtract recipes from Instagram reels using a multi-layered approach:\n1. **Caption parsing** — Instant, check description first\n2. **Audio transcription** — Whisper (local, no API key)\n3. **Frame analysis** — Vision model for on-screen text\n\nNo Instagram login required. Works on public reels.\n\n## When to Use\n\n- User sends an Instagram reel link\n- User mentions \"recipe from Instagram\" or \"save this reel\"\n- User wants to extract recipe details from a video post\n\n## How It Works (MANDATORY FLOW)\n\n**ALWAYS follow this complete flow — do not stop after caption if instructions are missing:**\n\n1. User sends Instagram reel URL\n2. Extract metadata using yt-dlp (`--dump-json`)\n3. Parse the caption for recipe details\n4. **Check completeness:** Does caption have BOTH ingredients AND instructions?\n   - ✅ **YES:** Present the recipe\n   - ❌ **NO (missing instructions or incomplete):** **Automatically proceed to audio transcription** — do NOT stop or ask the user\n5. If audio transcription needed:\n   - Download video: `yt-dlp -o \"\u002Ftmp\u002Freel.mp4\" \"URL\"`\n   - Extract audio: `ffmpeg -y -i \u002Ftmp\u002Freel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 \u002Ftmp\u002Freel.wav`\n   - Transcribe: `whisper \u002Ftmp\u002Freel.wav --model base --output_format txt --output_dir \u002Ftmp`\n   - Merge caption ingredients with audio instructions\n6. Present clean, formatted recipe (combining caption + audio as needed)\n7. User decides what to do (save to notes, add to wishlist, etc.)\n\n**Completeness check heuristics:**\n- Has ingredients = contains 3+ quantity+item patterns (e.g., \"1 cup flour\", \"2 lbs chicken\")\n- Has instructions = contains action verbs (blend, cook, bake, mix, pour, add) + sequence OR numbered steps\n\n## Extraction Command\n\n```bash\nyt-dlp --dump-json \"https:\u002F\u002Fwww.instagram.com\u002Freel\u002FSHORTCODE\u002F\" 2>\u002Fdev\u002Fnull\n```\n\n**Key fields from JSON output:**\n- `description` — The caption containing the recipe\n- `uploader` — Creator's name\n- `channel` — Creator's handle\n- `webpage_url` — Original URL\n- `like_count` — Popularity indicator\n\n## Recipe Parsing\n\nLook for these patterns in the caption:\n\n**Macros:**\n- \"X Calories | Xg P | Xg C | Xg F\"\n- \"Macros per serving\"\n- \"Cal\u002FProtein\u002FCarbs\u002FFat\"\n\n**Ingredients:**\n- Lines starting with quantities (1 cup, 2 tbsp, 24oz)\n- Lines with measurement units\n- Emoji bullet points (? ? ? etc.)\n\n**Sections:**\n- \"For the [component]:\"\n- \"Ingredients:\"\n- \"Instructions:\"\n- \"Directions:\"\n\n## Output Format\n\nPresent extracted recipe cleanly:\n\n```\n## [Recipe Name]\n*From @[handle]*\n\n**Macros (per serving):** X cal | Xg P | Xg C | Xg F\n\n### Ingredients\n- [ingredient 1]\n- [ingredient 2]\n...\n\n### Instructions\n1. [step 1]\n2. [step 2]\n...\n\n---\nSource: [original URL]\n```\n\n## User Actions After Extraction\n\nLet the user decide what to do:\n- \"Save to my recipes\" → Save to Apple Notes (if meal-planner skill available)\n- \"Add to wishlist\" → Save to `memory\u002Frecipe-wishlist.json`\n- \"Just show me\" → Display only, no save\n- \"Plan this for next week\" → Hand off to meal-planner skill\n\n## Wishlist Storage\n\nOptional storage for recipes user wants to try later:\n\n**memory\u002Frecipe-wishlist.json:**\n```json\n{\n  \"recipes\": [\n    {\n      \"name\": \"Recipe Name\",\n      \"source\": \"instagram\",\n      \"sourceUrl\": \"https:\u002F\u002Finstagram.com\u002Freel\u002F...\",\n      \"handle\": \"@creator\",\n      \"addedDate\": \"2026-01-26\",\n      \"tried\": false,\n      \"macros\": {\n        \"calories\": 585,\n        \"protein\": 56,\n        \"carbs\": 25,\n        \"fat\": 28,\n        \"servings\": 3\n      },\n      \"ingredients\": [...],\n      \"instructions\": [...]\n    }\n  ]\n}\n```\n\n## Error Handling\n\n**If yt-dlp fails:**\n- Check if URL is valid Instagram reel format\n- May be a private account — inform user\n- Suggest user paste caption text manually as fallback\n\n**If no recipe found in caption (IMPORTANT):**\n\nAfter extracting, scan the caption for recipe indicators:\n- Ingredient quantities (numbers + units like oz, cups, tbsp, lbs)\n- Recipe sections (\"For the...\", \"Ingredients:\", \"Instructions:\")\n- Cooking verbs (bake, cook, sauté, mix, combine)\n- Macro information (calories, protein, carbs, fat)\n\n**If none found, tell the user clearly:**\n\n> \"I pulled the caption but it doesn't look like the recipe is there — it might just be a teaser or the recipe is only shown in the video itself. Here's what the caption says:\n> \n> [show caption]\n> \n> A few options:\n> 1. Check the comments — sometimes creators post recipes there\n> 2. Check their bio link — might lead to the full recipe\n> 3. Describe what you saw in the video and I can help find a similar recipe\"\n\n**Recipe detection heuristics:**\n```\nHAS_RECIPE if caption contains:\n- 3+ ingredient-like patterns (quantity + food item)\n- OR \"recipe\" + ingredient list\n- OR macro breakdown + ingredients\n- OR numbered\u002Fbulleted instructions\n\nNO_RECIPE if caption is:\n- Mostly hashtags\n- Just a description\u002Fteaser\n- Under 100 characters\n- No quantities or measurements\n```\n\n## Integration with meal-planner\n\nThe meal-planner skill can reference this skill:\n- When planning meals, check wishlist for untried recipes\n- Suggest wishlist recipes that match pantry items\n- Mark recipes as \"tried\" after they're used in a meal plan\n\n## Audio Transcription (V2) — MANDATORY FALLBACK\n\n**When caption is missing instructions, ALWAYS transcribe the audio automatically.** Do not stop and ask the user — just do it. This is the most common case since creators often put ingredients in captions but speak the instructions.\n\n**Step 1: Download video**\n```bash\nyt-dlp -o \"\u002Ftmp\u002Freel.mp4\" \"https:\u002F\u002Finstagram.com\u002Freel\u002FXXX\"\n```\n\n**Step 2: Extract audio**\n```bash\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 \u002Ftmp\u002Freel.wav\n```\n\n**Step 3: Transcribe with Whisper**\n```bash\n\u002FUsers\u002Fkylekirkland\u002FLibrary\u002FPython\u002F3.14\u002Fbin\u002Fwhisper \u002Ftmp\u002Freel.wav --model base --output_format txt --output_dir \u002Ftmp\n```\n\n**Step 4: Parse transcript for recipe**\nLook for cooking instructions, ingredients mentioned verbally.\n\n## Inference for Missing Measurements\n\n**ALWAYS infer quantities when not provided.** Never present a recipe without amounts — estimate based on context and standard package sizes.\n\n### Vague Language → Specific Amounts\n\n| What they say | Infer |\n|--------------|-------|\n| \"some chicken\" | ~1 lb |\n| \"a bit of garlic\" | 2-3 cloves |\n| \"handful of spinach\" | ~2 cups |\n| \"drizzle of oil\" | 1-2 tbsp |\n| \"season to taste\" | ½ tsp salt, ¼ tsp pepper |\n| \"splash of soy sauce\" | 1-2 tbsp |\n| \"a few tablespoons\" | 2-3 tbsp |\n| \"some rice\" | 1 cup dry |\n| \"cheese on top\" | ½ - 1 cup shredded |\n| \"diced onion\" | 1 medium onion |\n| \"bell peppers\" | 2 peppers |\n\n### Standard Package Sizes (when item mentioned without amount)\n\n| Ingredient | Standard Package | Infer |\n|------------|------------------|-------|\n| Puff pastry | 17oz sheet | 1 sheet |\n| Ground beef\u002Fturkey | 1 lb pack | 1 lb |\n| Chicken breast | ~1.5 lb pack | 1.5 lbs |\n| Sausage links | 14oz \u002F 4-5 links | 1 package |\n| Bacon | 12oz \u002F 12 slices | ½ package (6 slices) |\n| Shredded cheese | 8oz bag | 1-2 cups |\n| Tortillas | 8-10 count | 1 package |\n| Canned beans | 15oz can | 1 can |\n| Broth\u002Fstock | 32oz carton | 1-2 cups |\n| Pasta | 16oz box | 8oz (half box) |\n| Rice | 2 lb bag | 1-2 cups dry |\n\n### Context-Aware Scaling\n\n**By recipe type:**\n- Stir fry for 2 → 1 lb protein, 4 cups veggies\n- Soup\u002Fstew → 1.5-2 lbs protein, 4 cups broth\n- Sheet pan meal → 1.5 lbs protein, 3-4 cups veggies\n- Appetizers → smaller portions, estimate ~12-15 pieces per batch\n\n**By servings mentioned:**\n- \"Serves 4\" → Scale standard amounts for 4\n- \"Meal prep for the week\" → Assume 5-8 servings\n- No servings mentioned → Default to 4 servings\n\n**By protein target (if user has macro goals):**\n- 40-50g protein per serving → ~6-8oz cooked meat per portion\n- Scale recipe protein accordingly\n\n### Output Format\n\nAlways present inferred amounts clearly:\n```\n### Ingredients\n- 1 lb ground turkey *(estimated)*\n- 1 medium onion, diced *(estimated)*\n- 2 cups broth *(estimated based on typical soup)*\n```\n\nMark inferred quantities with *(estimated)* so user knows what came from the source vs inference.\n\n## Combined Extraction Flow\n\n```\n1. TRY CAPTION (instant)\n   └── yt-dlp --dump-json → parse description\n   └── Recipe found? → DONE ✅\n   └── Check for \"pinned\" \u002F \"in comments\" \u002F \"check comments\" → FLAG\n   \n2. IF FLAGGED: CHECK FOR CREATOR COMMENT\n   └── Look through comments for creator's username\n   └── If creator comment found with recipe → DONE ✅\n   └── If not found → continue + notify user\n\n3. TRY AUDIO (30-60 sec)\n   └── Download video\n   └── Extract audio with ffmpeg\n   └── Transcribe with Whisper (base model)\n   └── Parse transcript for recipe\n   └── Infer missing measurements\n   └── Recipe found? → DONE ✅\n\n4. PRESENT RESULTS + PROMPT IF NEEDED\n   └── Show what was extracted from audio\n   └── If \"pinned\" was flagged, tell user:\n       \"The creator mentioned the full recipe is pinned in the comments.\n        I extracted what I could from the audio, but if you want the \n        exact measurements, paste the pinned comment here and I'll \n        merge it with what I found.\"\n   \n5. TRY FRAME ANALYSIS (if audio incomplete)\n   └── Extract 5-8 key frames with ffmpeg\n   └── Send to Claude vision\n   └── Ask: \"Extract any recipe text, ingredients, or measurements shown\"\n   └── Merge findings with audio transcript\n   \n6. FALLBACK (nothing found)\n   └── Inform user: \"Recipe wasn't in caption or audio\u002Fvideo\"\n   └── Offer: search for similar recipe based on video title\u002Fdescription\n```\n\n## Frame Analysis\n\nExtract key frames and analyze with vision model.\n\n**Extract frames:**\n```bash\n# Extract 1 frame every 5 seconds\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vf \"fps=1\u002F5\" \u002Ftmp\u002Fframe_%02d.jpg\n\n# Or extract specific number of frames evenly distributed\nffmpeg -i \u002Ftmp\u002Freel.mp4 -vf \"select='not(mod(n,30))'\" -vsync vfr \u002Ftmp\u002Fframe_%02d.jpg\n```\n\n**Send to vision model:**\nUse Claude's image analysis to read each frame:\n- Recipe cards \u002F title screens\n- Ingredient lists shown on screen\n- Measurements in text overlays\n- Step-by-step instructions displayed\n\n**Vision prompt:**\n```\nAnalyze this frame from a cooking video. Extract any:\n- Recipe name or title\n- Ingredients with quantities\n- Cooking instructions\n- Nutritional information \u002F macros\n- Any other recipe-related text shown\n\nIf no recipe text is visible, respond with \"No recipe text found.\"\n```\n\n**Merge strategy:**\n- Audio transcript = primary source (spoken instructions)\n- Frame analysis = supplement (exact measurements, recipe cards)\n- Combine both, prefer specific measurements from visual over inferred from audio\n\n## Pinned Comment Detection\n\nScan caption for these phrases (case-insensitive):\n- \"recipe pinned\"\n- \"pinned in comments\"\n- \"check comments\"\n- \"in the comments\"\n- \"comment below\"\n- \"recipe below\"\n- \"full recipe in comments\"\n\nIf detected, flag and notify user after extraction:\n\n> \"Heads up — the creator said the recipe is pinned in the comments. \n> I got what I could from the audio, but yt-dlp can't access pinned comments \n> without login. If you want the exact recipe, copy the pinned comment and \n> send it to me — I'll format it properly.\"\n\n## Requirements\n\n- `yt-dlp` — `brew install yt-dlp`\n- `ffmpeg` — `brew install ffmpeg`\n- `whisper` — `pip3 install openai-whisper` (runs locally, no API key)\n- No Instagram login required for public reels\n",{"name":5,"homepage":42,"metadata":43,"description":7},"https:\u002F\u002Fgithub.com\u002Fkylelol\u002FClawdBites",{"clawdbot":44},{"os":45,"emoji":46,"install":47,"requires":60},[20,27],"?",[48,52,56],{"id":49,"bins":50,"kind":31,"label":51,"formula":49},"yt-dlp",[49],"Install yt-dlp via Homebrew",{"id":53,"bins":54,"kind":31,"label":55,"formula":53},"ffmpeg",[53],"Install ffmpeg via Homebrew",{"id":28,"kind":57,"label":58,"command":59},"shell","Install Whisper (local, no API key)","pip3 install --user openai-whisper",{"bins":61},[49,53,28],"main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","Git和GitHub\u002Fclawdbites",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill clawdbites",{"tool":76,"command":77},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill clawdbites",{"tool":79,"command":80},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill clawdbites","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FGit和GitHub\u002Fclawdbites\u002FSKILL.md",true,[84,90],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"_meta.json","REFERENCE","参考文档",273,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FGit和GitHub\u002Fclawdbites\u002F_meta.json",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"README.md",1883,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FGit和GitHub\u002Fclawdbites\u002FREADME.md",[95,118,153,164,174,203],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":37},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[97,102,103,104,105,106,29,107,108,109,110,111,112,113,114,115,116,117],"safe","ethereum","defi","Optimization","user","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":119,"name":120,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":136,"publishedAt":37},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[123,128,131],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":129,"categoryName":130,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[33,137,138,139,140,141,142,104,143,107,144,145,146,147,148,149,150,151,152],"zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":154,"name":155,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":161,"publishedAt":37},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[158,159,160],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},{"categoryNo":129,"categoryName":130,"taxonomyType":126,"taxonomyTypeDesc":127},{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},[33,162,163,137,138,139,140,141,142,104,143,107,145,146,147,148,149,150,151,152],"api skill","zerion api skill",{"skillNo":165,"name":166,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":37},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[169,170,171],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},{"categoryNo":129,"categoryName":130,"taxonomyType":126,"taxonomyTypeDesc":127},{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},[139,33,173,137,138,140,141,104,143,107,144,145,146,147,148,149,150,151,152],"zerion api mcp",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":37},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000040","财务",[184,185,186,187,188,189,190,191,192,193,30,194,195,196,197,198,199,200,201,202],"finance","yahoo finance","forex","yahoo","yahoo finance forex","github","https","sentiment","real-time","python3","Market","usd","news","time","currency","gbp","pip","market data","for",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":210,"publishedAt":37},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[209],{"categoryNo":181,"categoryName":182,"taxonomyType":134,"taxonomyTypeDesc":135},[184,185,187,211,35,212,213,31,214,194,25,24,215,216,217,218,219,220,152,201],"cli","find","check","up","stock","link","trending","sf","quotes","ln"]