Skip Visual Embeddings
Use description-only mode for faster initial indexing
This guide walks through analyzing property photos using computer vision to generate descriptions, identify room types, and extract searchable features.
ollama pull qwen2-vl)property_images table is populated — extraction needs one row per listing photoEach listing’s Features tab has a “Detected in photos” section that surfaces vision tags grouped by type (Amenity, Appliance, Material, Room Type). Tags detected in multiple photos show a ×N multiplier — a confidence cue without any thresholding logic in the UI.
The frontend queries GET /api/listings/{listing_id}/feature-tags on tab mount; empty responses render nothing, so the tab degrades cleanly to the structured-data view until extraction has been run for the listing.
property_imagesIf property_images is empty (check via the Vision Extraction page’s “Unindexed” count), expand the listing photo arrays into per-image rows:
INSERT INTO property_images (listing_id, image_url, image_index, created_at)SELECT p.listing_id, url_data.value::text, (url_data.ordinality - 1)::int, NOW()FROM properties pCROSS JOIN LATERAL jsonb_array_elements_text(p.photos::jsonb) WITH ORDINALITY AS url_data(value, ordinality)WHERE p.standard_status = 'Active' AND p.photos IS NOT NULL AND jsonb_typeof(p.photos::jsonb) = 'array'ON CONFLICT (listing_id, image_url) DO NOTHING;The ON CONFLICT clause makes this safe to re-run.
Navigate to Admin Dashboard → Vision and follow these steps:
While a job is running, you’ll see a progress card displaying:
The page updates automatically every 5 seconds.
For initial setup or troubleshooting:
Check the Extraction History table regularly:
Symptoms: Job shows “failed” status within seconds
Solutions:
ollama list)curl http://ollama-server:11434/api/versionSymptoms: Job takes hours for small batches
Solutions:
VISION_CONCURRENCY if server is overloadedSymptoms: Coverage percentage stays low even after successful jobs
Solutions:
Symptoms: Extracted features don’t show up in semantic search
Solutions:
Skip Visual Embeddings
Use description-only mode for faster initial indexing
Use Limits
Process in manageable batches (100-500 properties)
Off-Peak Processing
Run large jobs during low-traffic hours
Monitor Resources
Watch Ollama server CPU/GPU usage during jobs