{
  "schemaVersion": "1.0",
  "item": {
    "slug": "clawdbites",
    "name": "ClawdBites",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/kylelol/clawdbites",
    "canonicalUrl": "https://clawhub.ai/kylelol/clawdbites",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/clawdbites",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=clawdbites",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/clawdbites"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/clawdbites",
    "agentPageUrl": "https://openagent3.xyz/skills/clawdbites/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawdbites/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawdbites/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Instagram Recipe Extractor",
        "body": "Extract recipes from Instagram reels using a multi-layered approach:\n\nCaption parsing — Instant, check description first\nAudio transcription — Whisper (local, no API key)\nFrame analysis — Vision model for on-screen text\n\nNo Instagram login required. Works on public reels."
      },
      {
        "title": "When to Use",
        "body": "User sends an Instagram reel link\nUser mentions \"recipe from Instagram\" or \"save this reel\"\nUser wants to extract recipe details from a video post"
      },
      {
        "title": "How It Works (MANDATORY FLOW)",
        "body": "ALWAYS follow this complete flow — do not stop after caption if instructions are missing:\n\nUser sends Instagram reel URL\nExtract metadata using yt-dlp (--dump-json)\nParse the caption for recipe details\nCheck completeness: Does caption have BOTH ingredients AND instructions?\n\n✅ YES: Present the recipe\n❌ NO (missing instructions or incomplete): Automatically proceed to audio transcription — do NOT stop or ask the user\n\n\nIf audio transcription needed:\n\nDownload video: yt-dlp -o \"/tmp/reel.mp4\" \"URL\"\nExtract audio: ffmpeg -y -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav\nTranscribe: whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp\nMerge caption ingredients with audio instructions\n\n\nPresent clean, formatted recipe (combining caption + audio as needed)\nUser decides what to do (save to notes, add to wishlist, etc.)\n\nCompleteness check heuristics:\n\nHas ingredients = contains 3+ quantity+item patterns (e.g., \"1 cup flour\", \"2 lbs chicken\")\nHas instructions = contains action verbs (blend, cook, bake, mix, pour, add) + sequence OR numbered steps"
      },
      {
        "title": "Extraction Command",
        "body": "yt-dlp --dump-json \"https://www.instagram.com/reel/SHORTCODE/\" 2>/dev/null\n\nKey fields from JSON output:\n\ndescription — The caption containing the recipe\nuploader — Creator's name\nchannel — Creator's handle\nwebpage_url — Original URL\nlike_count — Popularity indicator"
      },
      {
        "title": "Recipe Parsing",
        "body": "Look for these patterns in the caption:\n\nMacros:\n\n\"X Calories | Xg P | Xg C | Xg F\"\n\"Macros per serving\"\n\"Cal/Protein/Carbs/Fat\"\n\nIngredients:\n\nLines starting with quantities (1 cup, 2 tbsp, 24oz)\nLines with measurement units\nEmoji bullet points (🥩 🌽 🧀 etc.)\n\nSections:\n\n\"For the [component]:\"\n\"Ingredients:\"\n\"Instructions:\"\n\"Directions:\""
      },
      {
        "title": "Output Format",
        "body": "Present extracted recipe cleanly:\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]"
      },
      {
        "title": "User Actions After Extraction",
        "body": "Let the user decide what to do:\n\n\"Save to my recipes\" → Save to Apple Notes (if meal-planner skill available)\n\"Add to wishlist\" → Save to memory/recipe-wishlist.json\n\"Just show me\" → Display only, no save\n\"Plan this for next week\" → Hand off to meal-planner skill"
      },
      {
        "title": "Wishlist Storage",
        "body": "Optional storage for recipes user wants to try later:\n\nmemory/recipe-wishlist.json:\n\n{\n  \"recipes\": [\n    {\n      \"name\": \"Recipe Name\",\n      \"source\": \"instagram\",\n      \"sourceUrl\": \"https://instagram.com/reel/...\",\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}"
      },
      {
        "title": "Error Handling",
        "body": "If yt-dlp fails:\n\nCheck if URL is valid Instagram reel format\nMay be a private account — inform user\nSuggest user paste caption text manually as fallback\n\nIf no recipe found in caption (IMPORTANT):\n\nAfter extracting, scan the caption for recipe indicators:\n\nIngredient quantities (numbers + units like oz, cups, tbsp, lbs)\nRecipe sections (\"For the...\", \"Ingredients:\", \"Instructions:\")\nCooking verbs (bake, cook, sauté, mix, combine)\nMacro information (calories, protein, carbs, fat)\n\nIf 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[show caption]\nA few options:\n\nCheck the comments — sometimes creators post recipes there\nCheck their bio link — might lead to the full recipe\nDescribe what you saw in the video and I can help find a similar recipe\"\n\nRecipe 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/bulleted instructions\n\nNO_RECIPE if caption is:\n- Mostly hashtags\n- Just a description/teaser\n- Under 100 characters\n- No quantities or measurements"
      },
      {
        "title": "Integration with meal-planner",
        "body": "The meal-planner skill can reference this skill:\n\nWhen planning meals, check wishlist for untried recipes\nSuggest wishlist recipes that match pantry items\nMark recipes as \"tried\" after they're used in a meal plan"
      },
      {
        "title": "Audio Transcription (V2) — MANDATORY FALLBACK",
        "body": "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\nStep 1: Download video\n\nyt-dlp -o \"/tmp/reel.mp4\" \"https://instagram.com/reel/XXX\"\n\nStep 2: Extract audio\n\nffmpeg -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav\n\nStep 3: Transcribe with Whisper\n\n/Users/kylekirkland/Library/Python/3.14/bin/whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp\n\nStep 4: Parse transcript for recipe\nLook for cooking instructions, ingredients mentioned verbally."
      },
      {
        "title": "Inference for Missing Measurements",
        "body": "ALWAYS infer quantities when not provided. Never present a recipe without amounts — estimate based on context and standard package sizes."
      },
      {
        "title": "Vague Language → Specific Amounts",
        "body": "What they sayInfer\"some chicken\"~1 lb\"a bit of garlic\"2-3 cloves\"handful of spinach\"~2 cups\"drizzle of oil\"1-2 tbsp\"season to taste\"½ tsp salt, ¼ tsp pepper\"splash of soy sauce\"1-2 tbsp\"a few tablespoons\"2-3 tbsp\"some rice\"1 cup dry\"cheese on top\"½ - 1 cup shredded\"diced onion\"1 medium onion\"bell peppers\"2 peppers"
      },
      {
        "title": "Standard Package Sizes (when item mentioned without amount)",
        "body": "IngredientStandard PackageInferPuff pastry17oz sheet1 sheetGround beef/turkey1 lb pack1 lbChicken breast~1.5 lb pack1.5 lbsSausage links14oz / 4-5 links1 packageBacon12oz / 12 slices½ package (6 slices)Shredded cheese8oz bag1-2 cupsTortillas8-10 count1 packageCanned beans15oz can1 canBroth/stock32oz carton1-2 cupsPasta16oz box8oz (half box)Rice2 lb bag1-2 cups dry"
      },
      {
        "title": "Context-Aware Scaling",
        "body": "By recipe type:\n\nStir fry for 2 → 1 lb protein, 4 cups veggies\nSoup/stew → 1.5-2 lbs protein, 4 cups broth\nSheet pan meal → 1.5 lbs protein, 3-4 cups veggies\nAppetizers → smaller portions, estimate ~12-15 pieces per batch\n\nBy servings mentioned:\n\n\"Serves 4\" → Scale standard amounts for 4\n\"Meal prep for the week\" → Assume 5-8 servings\nNo servings mentioned → Default to 4 servings\n\nBy protein target (if user has macro goals):\n\n40-50g protein per serving → ~6-8oz cooked meat per portion\nScale recipe protein accordingly"
      },
      {
        "title": "Output Format",
        "body": "Always 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\nMark inferred quantities with (estimated) so user knows what came from the source vs inference."
      },
      {
        "title": "Combined Extraction Flow",
        "body": "1. TRY CAPTION (instant)\n   └── yt-dlp --dump-json → parse description\n   └── Recipe found? → DONE ✅\n   └── Check for \"pinned\" / \"in comments\" / \"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/video\"\n   └── Offer: search for similar recipe based on video title/description"
      },
      {
        "title": "Frame Analysis",
        "body": "Extract key frames and analyze with vision model.\n\nExtract frames:\n\n# Extract 1 frame every 5 seconds\nffmpeg -i /tmp/reel.mp4 -vf \"fps=1/5\" /tmp/frame_%02d.jpg\n\n# Or extract specific number of frames evenly distributed\nffmpeg -i /tmp/reel.mp4 -vf \"select='not(mod(n,30))'\" -vsync vfr /tmp/frame_%02d.jpg\n\nSend to vision model:\nUse Claude's image analysis to read each frame:\n\nRecipe cards / title screens\nIngredient lists shown on screen\nMeasurements in text overlays\nStep-by-step instructions displayed\n\nVision 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 / macros\n- Any other recipe-related text shown\n\nIf no recipe text is visible, respond with \"No recipe text found.\"\n\nMerge strategy:\n\nAudio transcript = primary source (spoken instructions)\nFrame analysis = supplement (exact measurements, recipe cards)\nCombine both, prefer specific measurements from visual over inferred from audio"
      },
      {
        "title": "Pinned Comment Detection",
        "body": "Scan caption for these phrases (case-insensitive):\n\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.\nI got what I could from the audio, but yt-dlp can't access pinned comments\nwithout login. If you want the exact recipe, copy the pinned comment and\nsend it to me — I'll format it properly.\""
      },
      {
        "title": "Requirements",
        "body": "yt-dlp — brew install yt-dlp\nffmpeg — brew install ffmpeg\nwhisper — pip3 install openai-whisper (runs locally, no API key)\nNo Instagram login required for public reels"
      }
    ],
    "body": "Instagram Recipe Extractor\n\nExtract recipes from Instagram reels using a multi-layered approach:\n\nCaption parsing — Instant, check description first\nAudio transcription — Whisper (local, no API key)\nFrame analysis — Vision model for on-screen text\n\nNo Instagram login required. Works on public reels.\n\nWhen to Use\nUser sends an Instagram reel link\nUser mentions \"recipe from Instagram\" or \"save this reel\"\nUser wants to extract recipe details from a video post\nHow It Works (MANDATORY FLOW)\n\nALWAYS follow this complete flow — do not stop after caption if instructions are missing:\n\nUser sends Instagram reel URL\nExtract metadata using yt-dlp (--dump-json)\nParse the caption for recipe details\nCheck 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\nIf audio transcription needed:\nDownload video: yt-dlp -o \"/tmp/reel.mp4\" \"URL\"\nExtract audio: ffmpeg -y -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav\nTranscribe: whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp\nMerge caption ingredients with audio instructions\nPresent clean, formatted recipe (combining caption + audio as needed)\nUser decides what to do (save to notes, add to wishlist, etc.)\n\nCompleteness check heuristics:\n\nHas ingredients = contains 3+ quantity+item patterns (e.g., \"1 cup flour\", \"2 lbs chicken\")\nHas instructions = contains action verbs (blend, cook, bake, mix, pour, add) + sequence OR numbered steps\nExtraction Command\nyt-dlp --dump-json \"https://www.instagram.com/reel/SHORTCODE/\" 2>/dev/null\n\n\nKey fields from JSON output:\n\ndescription — The caption containing the recipe\nuploader — Creator's name\nchannel — Creator's handle\nwebpage_url — Original URL\nlike_count — Popularity indicator\nRecipe Parsing\n\nLook for these patterns in the caption:\n\nMacros:\n\n\"X Calories | Xg P | Xg C | Xg F\"\n\"Macros per serving\"\n\"Cal/Protein/Carbs/Fat\"\n\nIngredients:\n\nLines starting with quantities (1 cup, 2 tbsp, 24oz)\nLines with measurement units\nEmoji bullet points (🥩 🌽 🧀 etc.)\n\nSections:\n\n\"For the [component]:\"\n\"Ingredients:\"\n\"Instructions:\"\n\"Directions:\"\nOutput Format\n\nPresent extracted recipe cleanly:\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\nUser Actions After Extraction\n\nLet the user decide what to do:\n\n\"Save to my recipes\" → Save to Apple Notes (if meal-planner skill available)\n\"Add to wishlist\" → Save to memory/recipe-wishlist.json\n\"Just show me\" → Display only, no save\n\"Plan this for next week\" → Hand off to meal-planner skill\nWishlist Storage\n\nOptional storage for recipes user wants to try later:\n\nmemory/recipe-wishlist.json:\n\n{\n  \"recipes\": [\n    {\n      \"name\": \"Recipe Name\",\n      \"source\": \"instagram\",\n      \"sourceUrl\": \"https://instagram.com/reel/...\",\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\nError Handling\n\nIf yt-dlp fails:\n\nCheck if URL is valid Instagram reel format\nMay be a private account — inform user\nSuggest user paste caption text manually as fallback\n\nIf no recipe found in caption (IMPORTANT):\n\nAfter extracting, scan the caption for recipe indicators:\n\nIngredient quantities (numbers + units like oz, cups, tbsp, lbs)\nRecipe sections (\"For the...\", \"Ingredients:\", \"Instructions:\")\nCooking verbs (bake, cook, sauté, mix, combine)\nMacro information (calories, protein, carbs, fat)\n\nIf 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\nA few options:\n\nCheck the comments — sometimes creators post recipes there\nCheck their bio link — might lead to the full recipe\nDescribe what you saw in the video and I can help find a similar recipe\"\n\nRecipe 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/bulleted instructions\n\nNO_RECIPE if caption is:\n- Mostly hashtags\n- Just a description/teaser\n- Under 100 characters\n- No quantities or measurements\n\nIntegration with meal-planner\n\nThe meal-planner skill can reference this skill:\n\nWhen planning meals, check wishlist for untried recipes\nSuggest wishlist recipes that match pantry items\nMark recipes as \"tried\" after they're used in a meal plan\nAudio Transcription (V2) — MANDATORY FALLBACK\n\nWhen 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\nStep 1: Download video\n\nyt-dlp -o \"/tmp/reel.mp4\" \"https://instagram.com/reel/XXX\"\n\n\nStep 2: Extract audio\n\nffmpeg -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav\n\n\nStep 3: Transcribe with Whisper\n\n/Users/kylekirkland/Library/Python/3.14/bin/whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp\n\n\nStep 4: Parse transcript for recipe Look for cooking instructions, ingredients mentioned verbally.\n\nInference for Missing Measurements\n\nALWAYS infer quantities when not provided. Never present a recipe without amounts — estimate based on context and standard package sizes.\n\nVague Language → Specific Amounts\nWhat they say\tInfer\n\"some chicken\"\t~1 lb\n\"a bit of garlic\"\t2-3 cloves\n\"handful of spinach\"\t~2 cups\n\"drizzle of oil\"\t1-2 tbsp\n\"season to taste\"\t½ tsp salt, ¼ tsp pepper\n\"splash of soy sauce\"\t1-2 tbsp\n\"a few tablespoons\"\t2-3 tbsp\n\"some rice\"\t1 cup dry\n\"cheese on top\"\t½ - 1 cup shredded\n\"diced onion\"\t1 medium onion\n\"bell peppers\"\t2 peppers\nStandard Package Sizes (when item mentioned without amount)\nIngredient\tStandard Package\tInfer\nPuff pastry\t17oz sheet\t1 sheet\nGround beef/turkey\t1 lb pack\t1 lb\nChicken breast\t~1.5 lb pack\t1.5 lbs\nSausage links\t14oz / 4-5 links\t1 package\nBacon\t12oz / 12 slices\t½ package (6 slices)\nShredded cheese\t8oz bag\t1-2 cups\nTortillas\t8-10 count\t1 package\nCanned beans\t15oz can\t1 can\nBroth/stock\t32oz carton\t1-2 cups\nPasta\t16oz box\t8oz (half box)\nRice\t2 lb bag\t1-2 cups dry\nContext-Aware Scaling\n\nBy recipe type:\n\nStir fry for 2 → 1 lb protein, 4 cups veggies\nSoup/stew → 1.5-2 lbs protein, 4 cups broth\nSheet pan meal → 1.5 lbs protein, 3-4 cups veggies\nAppetizers → smaller portions, estimate ~12-15 pieces per batch\n\nBy servings mentioned:\n\n\"Serves 4\" → Scale standard amounts for 4\n\"Meal prep for the week\" → Assume 5-8 servings\nNo servings mentioned → Default to 4 servings\n\nBy protein target (if user has macro goals):\n\n40-50g protein per serving → ~6-8oz cooked meat per portion\nScale recipe protein accordingly\nOutput 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\nCombined Extraction Flow\n1. TRY CAPTION (instant)\n   └── yt-dlp --dump-json → parse description\n   └── Recipe found? → DONE ✅\n   └── Check for \"pinned\" / \"in comments\" / \"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/video\"\n   └── Offer: search for similar recipe based on video title/description\n\nFrame Analysis\n\nExtract key frames and analyze with vision model.\n\nExtract frames:\n\n# Extract 1 frame every 5 seconds\nffmpeg -i /tmp/reel.mp4 -vf \"fps=1/5\" /tmp/frame_%02d.jpg\n\n# Or extract specific number of frames evenly distributed\nffmpeg -i /tmp/reel.mp4 -vf \"select='not(mod(n,30))'\" -vsync vfr /tmp/frame_%02d.jpg\n\n\nSend to vision model: Use Claude's image analysis to read each frame:\n\nRecipe cards / title screens\nIngredient lists shown on screen\nMeasurements in text overlays\nStep-by-step instructions displayed\n\nVision 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 / macros\n- Any other recipe-related text shown\n\nIf no recipe text is visible, respond with \"No recipe text found.\"\n\n\nMerge strategy:\n\nAudio transcript = primary source (spoken instructions)\nFrame analysis = supplement (exact measurements, recipe cards)\nCombine both, prefer specific measurements from visual over inferred from audio\nPinned Comment Detection\n\nScan caption for these phrases (case-insensitive):\n\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. I got what I could from the audio, but yt-dlp can't access pinned comments without login. If you want the exact recipe, copy the pinned comment and send it to me — I'll format it properly.\"\n\nRequirements\nyt-dlp — brew install yt-dlp\nffmpeg — brew install ffmpeg\nwhisper — pip3 install openai-whisper (runs locally, no API key)\nNo Instagram login required for public reels"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kylelol/clawdbites",
    "publisherUrl": "https://clawhub.ai/kylelol/clawdbites",
    "owner": "kylelol",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/clawdbites",
    "downloadUrl": "https://openagent3.xyz/downloads/clawdbites",
    "agentUrl": "https://openagent3.xyz/skills/clawdbites/agent",
    "manifestUrl": "https://openagent3.xyz/skills/clawdbites/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/clawdbites/agent.md"
  }
}