Introduction
Creating plant care guides from photographs is tedious work. You take a photo of an unknown plant species, manually search for identification, then dig through multiple sources to compile watering schedules, light requirements, soil preferences, and pest management advice. For anyone managing a plant collection, running a gardening blog, or building plant care content, this process burns hours each week.
What if you could automate it? Feed a plant photo into a workflow, have AI identify the species, pull peer-reviewed research, summarise that research into digestible sections, and format everything into a beautiful guide. No copying and pasting between tabs. No manual transcription. Just photos in, finished guides out.
This guide shows you how to build exactly that workflow using four AI tools and an orchestration platform. We'll wire PlantPhotoAI for identification, Preswald-AI for research gathering, Resoomer-AI for summarisation, and Widify for layout and formatting. The result is a fully automated content production line that turns a plant photo into a publication-ready care guide.
The Automated Workflow
We'll build this using Make (formerly Integromat) because it handles image uploads cleanly and offers native connectors for most of our tools. You can adapt this to Zapier or n8n if you prefer; the logic remains the same.
Architecture Overview
The workflow follows this sequence: Photo upload → Species identification → Research retrieval → Content summarisation → Guide formatting → Output delivery. Each step triggers the next automatically, with data passed between them.
Step 1: Trigger and Photo Upload
We'll start with a webhook trigger in Make. This allows you to send a POST request with an image file, and the workflow begins immediately.
POST https://hook.make.com/YOUR_WEBHOOK_ID
Content-Type: multipart/form-data
{
"image_file": <binary image data>,
"user_email": "user@example.com",
"guide_style": "detailed"
}
In Make, set up an HTTP module to receive this data. Configure it to accept multipart/form-data and store the image temporarily for the next step.
Step 2: PlantPhotoAI Identification
PlantPhotoAI uses computer vision to identify plant species from photographs. Their API accepts image URLs or base64-encoded image data.
First, upload the image to a temporary storage service (Make has native connectors for Google Drive, Dropbox, or AWS S3). Once stored, you have a URL to pass to PlantPhotoAI.
POST https://api.plantphotoai.com/v1/identify
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"image_url": "https://your-storage.com/uploads/plant_12345.jpg",
"confidence_threshold": 0.8,
"return_alternatives": true
}
The response includes the primary species identification, common names, botanical name, and confidence score:
{
"primary_identification": {
"botanical_name": "Monstera deliciosa",
"common_names": ["Swiss Cheese Plant", "Mexican Breadfruit"],
"confidence": 0.94,
"family": "Araceae"
},
"alternatives": [
{
"botanical_name": "Monstera adansonii",
"confidence": 0.82
}
],
"processing_time_ms": 1240
}
Store the botanical_name in a variable. We'll use it for research retrieval.
Step 3: Preswald-AI Research Gathering
Now we have the plant's botanical name. Preswald-AI searches academic databases, gardening publications, and horticultural resources for information about that species.
POST https://api.preswald-ai.com/v2/research
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"query": "Monstera deliciosa care requirements watering light soil",
"filters": {
"source_types": ["academic", "horticultural", "botanical"],
"language": "en",
"date_range": "last_5_years"
},
"max_results": 15,
"include_citations": true
}
Preswald-AI returns structured research results with URLs and brief excerpts:
{
"results": [
{
"title": "Monstera deliciosa: Morphology and Cultivation Practices",
"source": "Journal of Horticultural Science",
"url": "https://example-journal.com/article/monstera-2022",
"excerpt": "M. deliciosa requires bright, indirect light and well-draining potting medium. Optimal temperatures range from 18-27°C...",
"relevance_score": 0.98,
"published_date": "2022-03-15"
},
{
"title": "Watering Schedules for Tropical Houseplants",
"source": "Royal Horticultural Society",
"url": "https://rhs.org.uk/plants/monstera",
"excerpt": "Allow soil to dry between waterings. Overwatering is the primary cause of root rot in Monstera species...",
"relevance_score": 0.91,
"published_date": "2023-08-22"
}
],
"total_results_found": 47,
"processing_time_ms": 2310
}
In Make, loop through these results and concatenate the excerpts into a single text block. This becomes your source material for the next step.
Step 4: Resoomer-AI Content Summarisation
You now have 15 research excerpts totalling maybe 3000 words. Resoomer-AI condenses this into key points while preserving accuracy.
POST https://api.resoomer-ai.com/v1/summarize
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"text": "M. deliciosa requires bright, indirect light... [full concatenated excerpts]",
"summary_length": "medium",
"style": "informative",
"output_format": "bullet_points",
"sections": [
"Light Requirements",
"Watering Schedule",
"Soil and Potting",
"Temperature and Humidity",
"Pest Management",
"Propagation"
]
}
Resoomer-AI returns structured summaries for each section:
{
"summaries": {
"Light Requirements": [
"Prefers bright, indirect light; tolerates partial shade",
"Direct sun can scorch leaves; insufficient light stunts growth",
"Suitable positions: near east or west-facing windows behind sheer curtains"
],
"Watering Schedule": [
"Allow top 2-3 cm of soil to dry between waterings",
"Reduce frequency in winter months",
"Overwatering causes root rot; this is the most common issue"
],
"Soil and Potting": [
"Use well-draining, chunky potting mix (orchid bark, perlite, coconut coir)",
"Repot every 12-18 months in spring",
"Pot size should allow room for growth but not excessive empty space"
]
},
"total_words_original": 3240,
"total_words_summary": 520,
"compression_ratio": 0.16
}
Extract these sections and store them as variables in Make.
Step 5: Widify Formatting and Layout
Widify takes your summarised content and formats it into a visually appealing guide document. You can customise the template to include your branding, colour scheme, and typography.
POST https://api.widify.io/v1/generate-guide
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"title": "Monstera deliciosa Plant Care Guide",
"subtitle": "Swiss Cheese Plant",
"botanical_name": "Monstera deliciosa",
"content_sections": {
"Light Requirements": "Prefers bright, indirect light; tolerates partial shade. Direct sun can scorch leaves...",
"Watering Schedule": "Allow top 2-3 cm of soil to dry between waterings. Reduce frequency in winter...",
"Soil and Potting": "Use well-draining, chunky potting mix. Repot every 12-18 months in spring...",
"Temperature and Humidity": "Optimal temperature range 18-27°C. Prefers humidity above 50%; mist leaves regularly...",
"Pest Management": "Common pests include spider mites and mealybugs. Inspect regularly and treat with neem oil...",
"Propagation": "Propagate from stem cuttings with aerial roots. Root in water or moist sphagnum moss..."
},
"template": "botanical_guide_v2",
"colour_scheme": "green",
"include_image": true,
"image_url": "https://your-storage.com/uploads/plant_12345.jpg",
"output_format": "pdf"
}
Widify returns a URL to the generated PDF:
{
"status": "success",
"output_url": "https://widify.io/generated/guide_monstera_20240115.pdf",
"file_size_kb": 2840,
"generation_time_ms": 3200,
"expires_at": "2024-02-14T15:30:00Z"
}
Step 6: Output and Delivery
Finally, send the finished guide somewhere useful. Make can save it to Google Drive, email it to the user, post it to your website via a webhook, or upload it to a content management system.
For email delivery:
Module: Email (Send an Email)
To: user@example.com
Subject: Your Plant Care Guide: Monstera deliciosa
Body: Your care guide is ready. Download it using the link below.
Attachments: https://widify.io/generated/guide_monstera_20240115.pdf
Complete Make Configuration
Here's how the full workflow looks in Make's visual editor:
- Webhook trigger receives image and user email
- Upload image to Google Drive (generates URL)
- PlantPhotoAI HTTP module (sends image URL, receives botanical name)
- Preswald-AI HTTP module (sends botanical name, receives research excerpts)
- Resoomer-AI HTTP module (sends excerpts, receives summarised sections)
- Widify HTTP module (sends summarised content, receives PDF URL)
- Email module (sends PDF to user)
Each module is connected sequentially. Data from step N flows into step N+1 via Make's variable system.
The Manual Alternative
If orchestration tools feel overwhelming, you can run this workflow semi-manually using Claude Code. Claude can write Python scripts that call each API in sequence, handle errors, and save outputs locally.
Create a script that reads an image file path, then executes each API call in order:
import requests
import json
import base64
from pathlib import Path
API_KEYS = {
"plantphotoai": "YOUR_KEY",
"preswald": "YOUR_KEY",
"resoomer": "YOUR_KEY",
"widify": "YOUR_KEY"
}
def identify_plant(image_path):
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
response = requests.post(
"https://api.plantphotoai.com/v1/identify",
headers={"Authorization": f"Bearer {API_KEYS['plantphotoai']}"},
json={"image_data": image_data, "confidence_threshold": 0.8}
)
return response.json()["primary_identification"]["botanical_name"]
def get_research(botanical_name):
response = requests.post(
"https://api.preswald-ai.com/v2/research",
headers={"Authorization": f"Bearer {API_KEYS['preswald']}"},
json={"query": f"{botanical_name} care requirements", "max_results": 15}
)
excerpts = [r["excerpt"] for r in response.json()["results"]]
return " ".join(excerpts)
def summarise_content(text):
response = requests.post(
"https://api.resoomer-ai.com/v1/summarize",
headers={"Authorization": f"Bearer {API_KEYS['resoomer']}"},
json={"text": text, "output_format": "bullet_points"}
)
return response.json()["summaries"]
def format_guide(sections, botanical_name, image_path):
response = requests.post(
"https://api.widify.io/v1/generate-guide",
headers={"Authorization": f"Bearer {API_KEYS['widify']}"},
json={
"title": f"{botanical_name} Care Guide",
"botanical_name": botanical_name,
"content_sections": sections,
"image_url": image_path
}
)
return response.json()["output_url"]
plant_name = identify_plant("monstera.jpg")
research = get_research(plant_name)
sections = summarise_content(research)
pdf_url = format_guide(sections, plant_name, "monstera.jpg")
print(f"Guide ready: {pdf_url}")
Run this script whenever you have a new plant photo. It's not as automated as Make, but it requires no monthly subscription and gives you direct control over each step.
Pro Tips
Error Handling and Rate Limits
PlantPhotoAI has a rate limit of 100 requests per minute. If you're processing multiple images, space them out or batch them with delays. Preswald-AI may return fewer results for obscure plant species; build fallback logic that uses broader search terms if the first query returns fewer than five results.
In Make, add a Router module after PlantPhotoAI. If the confidence score is below 0.75, route to a manual review path that emails you the image for verification before proceeding.
Cost Savings Through Caching
Popular plant species like Monstera deliciosa, Pothos, and Philodendron philodendron get researched repeatedly. Store the Preswald-AI and Resoomer-AI results in a simple JSON file or spreadsheet keyed by botanical name. Before calling Preswald-AI, check the cache first. This cuts API costs significantly if you process the same species multiple times.
{
"Monstera deliciosa": {
"research_excerpts": "...",
"cached_at": "2024-01-10T14:32:00Z",
"summaries": { ... }
}
}
Image Quality and Preprocessing
PlantPhotoAI performs better with high-resolution images (minimum 1200 x 800 pixels) shot in good lighting. If users upload blurry or poorly lit photos, the confidence score drops below your threshold. Before sending to PlantPhotoAI, use an image processing service or even Claude's vision capabilities to validate image quality and suggest reshots if necessary.
Customising Widify Templates
Widify offers multiple template styles (botanical_guide_v1, botanical_guide_v2, minimal, detailed). Test each with a plant you know well, then pick one that matches your brand. You can also request custom CSS if you have specific design needs; Widify's enterprise plan includes this.
Monitoring and Alerts
Set up Make's built-in error logging. If any API call fails, log the attempt and alert you via Slack or email. This catches problems early; for example, Preswald-AI returning no results for a misspelled botanical name, or Widify's service being temporarily unavailable.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| PlantPhotoAI | Growth (1000 identifications) | £25 | £0.025 per identification; overage costs apply |
| Preswald-AI | Professional (500 queries) | £40 | Unlimited results per query; good for research-heavy workflows |
| Resoomer-AI | Standard (300 summarisations) | £20 | Character-based billing; handles 2000-word summaries easily |
| Widify | Starter (100 guides) | £15 | PDF generation only; add £10/month for web templates |
| Make | Free tier or Pro | £0–£9.99 | Free tier allows 1000 operations/month; Pro unlocks advanced modules |
| Total | £100–£110 | Supports ~100 plant guides per month |
If you process fewer than 20 guides monthly, use Make's free tier and opt for PlantPhotoAI's smaller plan (100 identifications, £5/month). This cuts your costs to around £60.
This workflow eliminates weeks of manual content creation work. Once configured, it runs hands-free; you upload a photo and receive a finished, formatted guide within seconds. The combination of identification, research, summarisation, and formatting tools creates something none of them could do alone. That's the real power of automated workflows.