with one click
index-photos
Create a markdown index of property photos with AI-generated descriptions. Use when you have a folder of site photos that need cataloging.
Menu
Create a markdown index of property photos with AI-generated descriptions. Use when you have a folder of site photos that need cataloging.
| name | index-photos |
| description | Create a markdown index of property photos with AI-generated descriptions. Use when you have a folder of site photos that need cataloging. |
| argument-hint | [path/to/photos/folder] |
| allowed-tools | Read, Write, Bash(ls*), Bash(find*), Bash(wc*), Bash(date*), Glob, Task, TaskCreate, TaskUpdate, TaskList |
Generate a markdown index file that catalogs property photos with factual, appraisal-focused descriptions for each image.
Start the elapsed time tracker:
source /workspaces/appraisal-automation/.claude/utils/timing.sh && start_timer "index-photos"
List all image and video files in the provided folder:
ls -1 "$ARGUMENTS"/*.jpg "$ARGUMENTS"/*.jpeg "$ARGUMENTS"/*.png "$ARGUMENTS"/*.JPG "$ARGUMENTS"/*.JPEG "$ARGUMENTS"/*.PNG 2>/dev/null | head -200
List video files:
ls -1 "$ARGUMENTS"/*.mov "$ARGUMENTS"/*.mp4 "$ARGUMENTS"/*.MOV "$ARGUMENTS"/*.MP4 "$ARGUMENTS"/*.avi "$ARGUMENTS"/*.AVI 2>/dev/null
CRITICAL: Create one task per file. If there are 100 photos and 2 videos, create 102 tasks (plus 1 for generating the index).
For each photo file, create a task:
TaskCreate:
subject: "Describe: [filename.jpg]"
description: "Read and describe photo: [full path to file]"
activeForm: "Describing [filename.jpg]"
For each video file, create a task:
TaskCreate:
subject: "Review: [filename.mov]"
description: "Review video file: [full path to file]"
activeForm: "Reviewing [filename.mov]"
Create a final task for generating the index:
TaskCreate:
subject: "Generate photo index file"
description: "Compile all descriptions into final markdown index"
activeForm: "Writing index file"
For each photo task:
in_progresscompletedYour goal is to document property characteristics relevant to valuation. Focus on building condition, materials, site improvements, functional utility, and any observable deficiencies or deferred maintenance.
Colors & Materials:
Equipment & Brands (read labels!):
Dimensions & Quantities (estimate):
Condition & Age:
Spatial Relationships:
Deferred Maintenance & Deficiencies:
Functional Utility:
DO NOT include:
Instead, focus on: What would an appraiser note during a site inspection? Condition, materials, dimensions, access, deficiencies, improvements.
| Rating | Definition |
|---|---|
| Good | No visible deficiencies, well-maintained, no immediate repairs needed |
| Average | Normal wear for age, minor maintenance items only |
| Fair | Visible deficiencies, moderate repairs needed within 1-3 years |
| Poor | Significant deficiencies, major repair or replacement required |
When multiple photos show the same feature or condition:
Example - Key Photo (full detail):
"KEY PHOTO - Rear service yard condition. Asphalt in Poor condition - extensive alligator cracking covering 60%+ of surface, multiple patches, and large areas of standing water indicating base failure and drainage deficiency. Significant deferred maintenance: Full pavement replacement required, estimated $50,000-$75,000. Approximately 12-15 employee vehicles parked. White box truck at right indicates active shipping/receiving."
Example - Subsequent photo (reference + unique details):
"Additional rear yard view - asphalt condition consistent with Photo 12. This angle shows extent of deterioration across full yard width. Standing water pooled in multiple low spots. Phragmites along railway easement at left. Adjacent industrial buildings visible beyond perimeter."
NOT this (too stripped down):
"Rear yard - same as Photo 12."
Explicitly flag these when observed:
Mark photos as KEY PHOTO when they best document:
Key photos get full detailed descriptions. Subsequent photos showing the same issue should reference the key photo number while adding any unique details visible in that specific image.
Target length: 2-4 sentences, approximately 40-60 words per photo.
Include:
Avoid:
The test: Could an appraiser who didn't visit the site understand the property's physical characteristics, condition, and any deficiencies from these descriptions alone?
BAD (too vague): "Interior manufacturing area with equipment visible."
TOO SPARSE: "Production floor with presses. Concrete floor. CMU walls Fair condition."
GOOD: "Main production floor approximately 8,000 SF with 20-foot clear height to exposed bar joist structure. Three mechanical stamping presses (Danly) with yellow safety guarding arranged in row. Concrete floor shows oil staining and wear patterns from forklift traffic - consistent with heavy industrial use. Painted CMU walls in Fair condition with minor scuffing."
BAD (too vague): "Electrical room with panels."
GOOD: "Electrical room with 400-amp Square D main service panel. Multiple generations of infrastructure visible with added sub-panels and bank of eight knife-blade disconnects with red handles. Hand-written labels identify circuits: '30HP Compressor', 'Can Machine', 'Air Compressor'. Adequate capacity for current industrial use. Room approximately 10x12 feet."
BAD (too vague): "Break room with tables."
GOOD: "Employee break room approximately 400 SF with white ceramic tile floor and 2x4 fluorescent drop ceiling. Four rectangular laminate tables with black plastic stacking chairs - seating for approximately 16 workers. Stainless steel commercial refrigerator and dual microwaves along back wall. Walls and ceiling in Good condition. Adequate amenity space for building size."
BAD (too artistic): "Front elevation viewed from the parking lot on an overcast winter day with dramatic sky reflecting in puddles creating a mirror image of the building."
GOOD: "Front elevation - single-storey CMU construction with painted light beige finish in Good condition. Main entrance with glass door and one 12-foot overhead door at right. Building signage 'TORONTO GUARD METALS' in dark green letters above entrance. Yellow gas meter and riser visible at corner. Asphalt parking area in Average condition with some cracking near entrance."
BAD (too artistic): "Railway corridor stretching dramatically into the distance under grey winter skies, with tall phragmites creating a natural buffer and the building's imposing form looming at left."
GOOD: "Railway spur curving along rear property boundary - active track on crushed granite ballast with wooden ties. Subject building visible at right with white/grey painted CMU exterior in Fair condition. Rail easement (EB387062) registered on title provides potential rail access. Environmental note: Dense phragmites reeds (6-8 feet tall) on both sides of corridor indicate potential wetland/TRCA regulated area."
BAD (too artistic): "Large puddle occupying the foreground reflects the grey winter sky, creating a mirror of the building facade. The composition shows the transition from active service area to undeveloped easement."
GOOD: "Southeast corner of rear yard - building corner with one overhead door, red scrap dumpster below, and yellow propane storage cage visible. Transition from paved service yard to unpaved easement strip at right. Tall phragmites reeds (7-8 feet) mark rail corridor boundary - environmental note per Photo 3. Standing water in settled asphalt confirms drainage issues (Photo 12)."
Still describe what you CAN see, then note the quality issue:
For each video task:
in_progresssubagent_type: "general-purpose":
Task tool parameters:
subagent_type: "general-purpose"
description: "Review video [filename]"
prompt: |
Review this property video file and provide a 3-5 sentence appraisal-focused description:
Video path: [full path to video]
Use the Read tool to view the video. Describe:
- What areas of the property are shown (specific rooms, spaces, features)
- Building/site conditions observed (materials, maintenance, deficiencies)
- Key improvements visible (equipment, fixtures, upgrades)
- Approximate dimensions or areas if determinable
Focus on facts relevant to property valuation. Avoid artistic or atmospheric language.
Return ONLY the description text, nothing else.
completedNote: Launch video subagents in parallel when possible to improve performance.
in_progressOutput Location: /workspaces/appraisal-automation/Output/
Filename Format: [TIMESTAMP]_Photo_Index_[FolderName].md
Timestamp: TZ='America/New_York' date '+%Y-%m-%d_%H%M%S_EST'
completed# Photo Index: [Property/Folder Name]
**Generated:** [Date and Time]
**Total Photos:** [N] images
**Source Folder:** [Path]
---
## Photo Inventory
| # | Filename | Description |
|---|----------|-------------|
| 1 | [filename1.jpg] | [2-4 sentence appraisal-focused description] |
| 2 | [filename2.jpg] | [2-4 sentence appraisal-focused description] |
| 3 | [filename3.jpg] | [2-4 sentence appraisal-focused description] |
...
---
## Video Inventory
| # | Filename | Description |
|---|----------|-------------|
| 1 | [video1.mov] | [3-5 sentence appraisal-focused description] |
---
## Photo Categories
### Exterior Views
- [List filenames showing building exterior]
### Interior Views
- [List filenames showing interior spaces]
### Site/Parking
- [List filenames showing parking, landscaping, site access]
### Loading/Shipping
- [List filenames showing loading docks, shipping areas]
### Details/Other
- [List filenames showing signage, equipment, details]
---
*Index generated by Claude Code Photo Indexer*
After writing the index file, stop the timer and append elapsed time:
source /workspaces/appraisal-automation/.claude/utils/timing.sh && end_timer "index-photos"
Then append the $ELAPSED_TIME_TEXT to the end of the generated markdown file.
Batch Processing: Process photos in batches of 10-15 at a time to manage context, but each photo still gets its own task.
File Types: Support common image formats: .jpg, .jpeg, .png (and uppercase variants).
Naming Patterns: Photos are often timestamped (e.g., 2020-01-28 15.00.01.jpg). Extract dates if useful for sorting.
Duplicates: Note if photos appear to be duplicates or very similar angles.
Quality Issues: Still describe what's visible, then note the quality issue.
Read Labels: Always try to read any visible text - equipment brands, warning signs, room numbers, company names, capacity ratings, etc.
This skill should be used when the user asks to "abstract a lease", "extract lease terms", "summarize a commercial lease", "analyze a CRE lease", "review lease provisions", "identify lease risks", "extract critical dates from a lease", "generate a critical dates calendar", "create an ICS file from a lease", "export lease dates to CSV", or needs to apply REIXS methodology, the 258-field Domain Data Dictionary, or REIXS-LA-NA-001 extraction standards to a commercial real estate lease document.
Use when the user asks to run a competitive positioning analysis, rank a subject property against market comparables using MCDA, determine how competitive a listing is, calculate what rent reduction is needed to achieve Top 3 positioning, analyze a CoStar or broker package for competitive ranking, or generate a relative valuation report. Trigger phrases include: "relative valuation", "competitive positioning", "rank this property", "how competitive is this listing", "run relative valuation", "/mcda-lease-comparison".
Use when evaluating a roofing contractor bid's mandatory pass/fail gates — WSIB clearance, CGL insurance, bonding, working-at-heights training, addenda, references, years in business. Populates `mandatory_gates` and contributes qualification-related red flags and sub-scores.
Use when evaluating a roofing bid's technical content against the RFP and Ontario codes — materials adequacy, warranty validity, OBC compliance, manufacturer system compatibility, wind uplift, insulation R-value compliance, and cover-board presence. Produces raw sub-scores and technical red flags.
Use when the user asks to parse, extract, or normalize an owner's roof replacement RFP or tender document PDF into a structured schema. Works on Ontario commercial (OBC Part 3) and residential (OBC Part 9) roof projects.
Use when the user asks to parse, extract, or normalize a roofing contractor's bid or tender submission PDF against a previously-parsed RFP. Captures pricing, scope response, materials, warranty, qualifications, schedule, and technical approach, with page-level evidence citations.