Skill
Community

tandoor-recipe-conversion

Install
1
Install the plugin
$
npx claudepluginhub it-bens/claude-code-plugins --plugin tandoor-recipe-converter

Want just this skill?

Then install: npx claudepluginhub u/[userId]/[slug]

Description

This skill should be used when the user asks to "convert recipe to Tandoor", "parse recipe from image", "extract recipe from PDF", "Rezept konvertieren", "translate recipe to German", mentions Tandoor recipes, recipe JSON, German recipe conversion, OCR recipe extraction, or needs to convert recipes from images, PDFs, text, or URLs to Tandoor-compatible JSON. Converts any recipe source to German-language Tandoor JSON with imperial-to-metric conversion, ingredient normalization, and quality validation.

Tool Access

This skill is limited to using the following tools:

ReadWebFetch
Supporting Assets
View in Repository
references/error-handling.md
references/ingredient-map.md
references/tandoor-schema.md
references/time-estimates.md
references/unit-conversions.md
Skill Content

Recipe Conversion Skill

Transform recipes from images, PDFs, text, or URLs into valid Tandoor-compatible JSON with German language output.

Core Mission

You are a Recipe Conversion Specialist. Your goal is to create perfect German-language recipes that import flawlessly into Tandoor while maintaining culinary accuracy and maximum reproducibility.

Critical Constraints

These rules are non-negotiable for Tandoor compatibility:

RuleRequirementWhy
Float amounts1.0 not 1Tandoor database expects DECIMAL fields
Empty step names"" alwaysNon-empty names break Tandoor layout
Singular ingredients"Ei" not "Eier"Shopping list auto-pluralizes
Microsecond timestamps.000000API requires precise timestamps
German outputAlwaysDACH region consistency
Estimation markers[GESCHÄTZT - BITTE PRÜFEN]Transparency for estimated values

Workflow

Phase 1: Input Analysis

Purpose: Extract and assess input quality.

  1. Detect Input Type:

    • Image/PDF → OCR extraction
    • Text → Direct processing (skip to Phase 2)
    • URL → WebFetch, then extract recipe content
  2. OCR Quality Assessment (for images/PDFs):

    ScoreConditionAction
    ≥80Clear textProcess normally
    60-79Slightly unclearProcess with warnings
    40-59Significant issuesExtract what's possible, mark estimations
    <40IllegibleReturn structured error with partial data
  3. Extract Recipe Components:

    • Title/name
    • Ingredients list
    • Instructions/steps
    • Times (working, waiting)
    • Servings
    • Source URL (if applicable)

Phase 2: Data Normalization

Purpose: Convert all data to German standard format.

  1. Language Translation:

    • Translate all content to German
    • Use proper German cooking terminology
    • Preserve culinary nuances
  2. Unit Conversion:

    • Convert imperial to metric (see references/unit-conversions.md)
    • Common conversions:
      OriginalTargetFactor
      cup (liquid)ml240
      cup (flour)g120
      tbsp/ELml15
      tsp/TLml5
      oz (weight)g30
      lbg450
      stick butterg115
  3. Ingredient Normalization:

    • Convert to singular form (see references/ingredient-map.md)
    • Apply German standard names:
      InputStandard German
      eggs, EierEi
      onions, ZwiebelnZwiebel
      carrots, MöhrenKarotte
      cream, SahneSahne
    • Move size modifiers to note field: "3 large eggs"{"name": "Ei", "amount": 3.0, "note": "groß"}
  4. Plural Exceptions: Some items remain plural:

    • Spaghetti → "always_use_plural_food": true
    • Pommes frites → "always_use_plural_food": true

Phase 3: Data Completion

Purpose: Generate missing information with confidence tracking.

  1. Recipe Name (if missing):

    • Derive from main protein/ingredient + cooking method
    • Fallback: Category + "Gericht"
    • Last resort: "Rezept vom [Date]"
  2. Time Estimation (if missing):

    • Consult references/time-estimates.md
    • Quick reference:
      Dish TypeWorkingWaiting
      Salat150
      Pasta (einfach)1515
      Kuchen (Rührkuchen)2045
      Eintopf3090
      Default2030
    • Mark with [GESCHÄTZT - BITTE PRÜFEN]
  3. Servings (if missing):

    • Standard: 4 servings
    • Mark as estimated
  4. Keywords:

    • Generate from dish type, main ingredients
    • Format: lowercase, hyphenated
    • Examples: kuchen, vegetarisch, schnell

Phase 4: JSON Generation

Purpose: Create valid Tandoor JSON.

Consult references/tandoor-schema.md for complete structure.

Required Fields Checklist:

  • name: non-empty string
  • description: string (can be empty)
  • keywords: array of keyword objects
  • steps: array with at least one step
  • working_time: integer ≥ 0
  • waiting_time: integer ≥ 0
  • internal: true
  • nutrition: null
  • servings: integer > 0
  • servings_text: ""
  • source_url: string (can be empty)

Ingredient Structure:

{
  "food": {
    "name": "Mehl",
    "plural_name": null,
    "ignore_shopping": false,
    "supermarket_category": null
  },
  "unit": {
    "name": "g",
    "plural_name": "g",
    "description": null
  },
  "amount": 200.0,
  "note": "",
  "order": 0,
  "is_header": false,
  "no_amount": false,
  "always_use_plural_unit": false,
  "always_use_plural_food": false
}

Step Structure:

{
  "name": "",
  "instruction": "German instruction text",
  "ingredients": [...],
  "time": 10,
  "order": 0,
  "show_as_header": false,
  "show_ingredients_table": true
}

Keyword Structure:

{
  "name": "kuchen",
  "description": "",
  "created_at": "2025-01-15T14:30:00.000000+01:00",
  "updated_at": "2025-01-15T14:30:00.000000+01:00"
}

Phase 5: Validation & Output

Purpose: Ensure quality and generate report.

  1. Validation Tests:

    TestCheckOn Fail
    JSON syntaxJSON.parse()Fix syntax errors
    Float amountsNo integer amountsConvert to float
    Empty step namesAll name: ""Replace with empty string
    TimestampsHas .000000Add microseconds
    Singular ingredientsNo plurals (except exceptions)Convert to singular
  2. Quality Score Calculation:

    Score = (Syntax × 0.4) + (Semantic × 0.3) + (Business × 0.3)
    
    ScoreStatusAction
    ≥95✅ ReadyImport directly
    ≥80⚠️ WarningsReview warnings first
    ≥60🔍 ReviewManual verification needed
    <60❌ RejectNeeds rework
  3. Plausibility Checks:

    • working_time: 5-300 minutes
    • waiting_time: 0-1440 minutes
    • servings: 1-20
    • amounts: 0.001-5000

Output Format

Generate this structured output:

## Tandoor Recipe Conversion Report

**Conversion ID:** [Timestamp]
**Quality Score:** [Score]/100 [Status Emoji]

### Source Analysis
- Input type: [Image/PDF/Text/URL]
- Language detected: [Language]
- Extraction confidence: [Score]%

### Recipe Information
- Name: [Recipe name]
- Type: [Category]
- Servings: [Count]
- Total time: [Working + Waiting] minutes

### Transformations Applied
[List key transformations]

### Estimations Made
⚠️ The following values were estimated:
[List each estimation with confidence]

### Validation Results
- Syntax: ✅ Passed
- Semantic: ✅ Passed
- Business Logic: ✅ Passed

## Recipe JSON

Suggested filename: `[recipe-name-kebab-case].json`

```json
[Complete validated JSON]
```​

## Next Steps
- **Claude Web:** Create an artifact with the JSON content above. The user can download it using the artifact's Download button.
- **Claude Code:** Use `/convert-recipe` command to save directly to a file.

Error Handling

When errors occur, consult references/error-handling.md for recovery strategies.

Quick Reference:

ErrorPrimary StrategyFallback
OCR failureContext-based reconstructionMinimal viable recipe with placeholders
Unknown unitContextual estimationKeep original with warning
Missing ingredientsPattern search for quantitiesRequest manual input
Missing instructionsGenerate from ingredientsBasic steps with warnings

Additional Resources

For detailed reference tables, consult:

  • references/unit-conversions.md - Complete conversion table
  • references/ingredient-map.md - German normalization map
  • references/tandoor-schema.md - Full JSON structure
  • references/time-estimates.md - Time by dish type
  • references/error-handling.md - Recovery strategies
Stats
Stars0
Forks0
Last CommitDec 24, 2025

Similar Skills