clawdbitesExtract 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.
Install via ClawdBot CLI:
clawdbot install kylelol/clawdbitesInstall yt-dlp via Homebrew:
brew install yt-dlpInstall ffmpeg via Homebrew:
brew install ffmpegInstall Whisper (local, no API key):
Install Whisper (local, no API key)Requires:
Extract recipes from Instagram reels using a multi-layered approach:
No Instagram login required. Works on public reels.
ALWAYS follow this complete flow β do not stop after caption if instructions are missing:
--dump-json)yt-dlp -o "/tmp/reel.mp4" "URL"ffmpeg -y -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wavwhisper /tmp/reel.wav --model base --output_format txt --output_dir /tmpCompleteness check heuristics:
yt-dlp --dump-json "https://www.instagram.com/reel/SHORTCODE/" 2>/dev/null
Key fields from JSON output:
description β The caption containing the recipeuploader β Creator's namechannel β Creator's handlewebpage_url β Original URLlike_count β Popularity indicatorLook for these patterns in the caption:
Macros:
Ingredients:
Sections:
Present extracted recipe cleanly:
## [Recipe Name]
*From @[handle]*
**Macros (per serving):** X cal | Xg P | Xg C | Xg F
### Ingredients
- [ingredient 1]
- [ingredient 2]
...
### Instructions
1. [step 1]
2. [step 2]
...
---
Source: [original URL]
Let the user decide what to do:
memory/recipe-wishlist.jsonOptional storage for recipes user wants to try later:
memory/recipe-wishlist.json:
{
"recipes": [
{
"name": "Recipe Name",
"source": "instagram",
"sourceUrl": "https://instagram.com/reel/...",
"handle": "@creator",
"addedDate": "2026-01-26",
"tried": false,
"macros": {
"calories": 585,
"protein": 56,
"carbs": 25,
"fat": 28,
"servings": 3
},
"ingredients": [...],
"instructions": [...]
}
]
}
If yt-dlp fails:
If no recipe found in caption (IMPORTANT):
After extracting, scan the caption for recipe indicators:
If none found, tell the user clearly:
"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:
[show caption]
A few options:
1. Check the comments β sometimes creators post recipes there
2. Check their bio link β might lead to the full recipe
3. Describe what you saw in the video and I can help find a similar recipe"
Recipe detection heuristics:
HAS_RECIPE if caption contains:
- 3+ ingredient-like patterns (quantity + food item)
- OR "recipe" + ingredient list
- OR macro breakdown + ingredients
- OR numbered/bulleted instructions
NO_RECIPE if caption is:
- Mostly hashtags
- Just a description/teaser
- Under 100 characters
- No quantities or measurements
The meal-planner skill can reference this skill:
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.
Step 1: Download video
yt-dlp -o "/tmp/reel.mp4" "https://instagram.com/reel/XXX"
Step 2: Extract audio
ffmpeg -i /tmp/reel.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/reel.wav
Step 3: Transcribe with Whisper
/Users/kylekirkland/Library/Python/3.14/bin/whisper /tmp/reel.wav --model base --output_format txt --output_dir /tmp
Step 4: Parse transcript for recipe
Look for cooking instructions, ingredients mentioned verbally.
ALWAYS infer quantities when not provided. Never present a recipe without amounts β estimate based on context and standard package sizes.
| What they say | Infer |
|--------------|-------|
| "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 |
| Ingredient | Standard Package | Infer |
|------------|------------------|-------|
| Puff pastry | 17oz sheet | 1 sheet |
| Ground beef/turkey | 1 lb pack | 1 lb |
| Chicken breast | ~1.5 lb pack | 1.5 lbs |
| Sausage links | 14oz / 4-5 links | 1 package |
| Bacon | 12oz / 12 slices | Β½ package (6 slices) |
| Shredded cheese | 8oz bag | 1-2 cups |
| Tortillas | 8-10 count | 1 package |
| Canned beans | 15oz can | 1 can |
| Broth/stock | 32oz carton | 1-2 cups |
| Pasta | 16oz box | 8oz (half box) |
| Rice | 2 lb bag | 1-2 cups dry |
By recipe type:
By servings mentioned:
By protein target (if user has macro goals):
Always present inferred amounts clearly:
### Ingredients
- 1 lb ground turkey *(estimated)*
- 1 medium onion, diced *(estimated)*
- 2 cups broth *(estimated based on typical soup)*
Mark inferred quantities with (estimated) so user knows what came from the source vs inference.
1. TRY CAPTION (instant)
βββ yt-dlp --dump-json β parse description
βββ Recipe found? β DONE β
βββ Check for "pinned" / "in comments" / "check comments" β FLAG
2. IF FLAGGED: CHECK FOR CREATOR COMMENT
βββ Look through comments for creator's username
βββ If creator comment found with recipe β DONE β
βββ If not found β continue + notify user
3. TRY AUDIO (30-60 sec)
βββ Download video
βββ Extract audio with ffmpeg
βββ Transcribe with Whisper (base model)
βββ Parse transcript for recipe
βββ Infer missing measurements
βββ Recipe found? β DONE β
4. PRESENT RESULTS + PROMPT IF NEEDED
βββ Show what was extracted from audio
βββ If "pinned" was flagged, tell user:
"The creator mentioned the full recipe is pinned in the comments.
I extracted what I could from the audio, but if you want the
exact measurements, paste the pinned comment here and I'll
merge it with what I found."
5. TRY FRAME ANALYSIS (if audio incomplete)
βββ Extract 5-8 key frames with ffmpeg
βββ Send to Claude vision
βββ Ask: "Extract any recipe text, ingredients, or measurements shown"
βββ Merge findings with audio transcript
6. FALLBACK (nothing found)
βββ Inform user: "Recipe wasn't in caption or audio/video"
βββ Offer: search for similar recipe based on video title/description
Extract key frames and analyze with vision model.
Extract frames:
# Extract 1 frame every 5 seconds
ffmpeg -i /tmp/reel.mp4 -vf "fps=1/5" /tmp/frame_%02d.jpg
# Or extract specific number of frames evenly distributed
ffmpeg -i /tmp/reel.mp4 -vf "select='not(mod(n,30))'" -vsync vfr /tmp/frame_%02d.jpg
Send to vision model:
Use Claude's image analysis to read each frame:
Vision prompt:
Analyze this frame from a cooking video. Extract any:
- Recipe name or title
- Ingredients with quantities
- Cooking instructions
- Nutritional information / macros
- Any other recipe-related text shown
If no recipe text is visible, respond with "No recipe text found."
Merge strategy:
Scan caption for these phrases (case-insensitive):
If detected, flag and notify user after extraction:
"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."
yt-dlp β brew install yt-dlpffmpeg β brew install ffmpegwhisper β pip3 install openai-whisper (runs locally, no API key)AI Usage Analysis
Analysis is being generated⦠refresh in a few seconds.
Search and suggest recipes by ingredients, cuisine, or dietary preferences using TheMealDB API with detailed meal info and instructions.
Access recipes, meal plans, and grocery lists from Paprika Recipe Manager. Use when user asks about recipes, meal planning, or cooking.
Order food, groceries, and book restaurants in India via Swiggy's MCP servers. Food delivery, Instamart groceries, and Dineout restaurant bookings with safety-first confirmation workflow.
Manage recipes and grocery lists from your Plan2Meal React Native app. Add recipes from URLs, search, view, and manage your grocery lists.
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/).
Help users cook better β recipe adaptation, substitutions, troubleshooting, and skill building.