This skill should be used when the user wants to "run the restaurant engine", "find restaurant leads", "enhance food photos", "scrape restaurants", "generate food photos with AI", "restaurant outreach", or needs to identify restaurants with bad photography and replace them with AI-generated premium food images.
Two flows that work together to find restaurants with bad food photography, enhance their images with AI, and create outreach-ready assets.
Flow 1 — Prospecting: Scrapes Google Maps → Gemini Vision filters food images → Uploads leads to Airtable
Flow 2 — Photo Editing: Pulls Food leads from Airtable → Generates 2 premium shots with Nano Banana Pro via Gemini API → Uploads results back to Airtable
Set these in .agent/.env:
GOOGLE_API_KEY=your_gemini_api_key
AIRTABLE_TOKEN=your_airtable_personal_access_token
AIRTABLE_BASE_ID=your_airtable_base_id
KIE_API_KEY=your_kie_api_key # for optional Kling video
python3 -m venv .venv && source .venv/bin/activate
pip install playwright pyairtable requests python-dotenv google-genai pillow
playwright install chromium
Creates the "Restaurant Leads" table with all required fields:
python tools/setup_leads_table.py
Scrapes Google Maps, filters images with Gemini Vision, and uploads curated leads to Airtable.
python tools/rest_prospecting_flow.py --location "Sydney" --limit 5
What it does:
Arguments:
--location — City or area to target (e.g., "Italian restaurants in Brooklyn")--limit — Max number of restaurants to prospect (default: 3)For all Airtable leads with Analysis Status = Food, generates 2 premium AI food shots via Nano Banana Pro.
python tools/rest_photo_editor.py --limit 5
What it does:
Reference Photo URLnano-banana-pro-preview via Gemini API with two distinct prompts:
AI Enhanced Photo 1 and AI Enhanced Photo 2Arguments:
--limit — Max leads to process (default: all)Table: Restaurant Leads
| Field | Type | Purpose |
|---|---|---|
| Restaurant Name | Text | Business name |
| Website | URL | Restaurant website |
| Instagram Handle | URL | IG profile |
| Reviews | Text | Google rating |
| Google Maps Photos | Attachment | Raw scraped photos |
| Reference Photo URL | URL | Top photo URL (plain text for reliable API reads) |
| Analysis Status | Select | Pending / Food / Non-Food |
| AI Enhanced Photo 1 | Attachment | Premium food shot |
| AI Enhanced Photo 2 | Attachment | Angle-shifted shot |
| Video Promo | Attachment | (Optional) Kling video |
| Script | Purpose |
|---|---|
tools/setup_leads_table.py | One-time Airtable schema creation |
tools/rest_google_scraper.py | Playwright-based Google Maps scraper |
tools/rest_filter_images.py | Gemini Vision image classifier |
tools/rest_prospecting_flow.py | Flow 1 orchestrator |
tools/rest_airtable.py | Airtable helper for Restaurant Leads table |
tools/rest_photo_editor.py | Flow 2 orchestrator |
playwright install chromium once before first use.inline_data (raw image bytes). The photo editor extracts these and uploads to Catbox for public permanent URLs.gemini-2.5-flash. Ensure your API key has access to this model.