{"adoption": {"forks": 94, "observed_at": "2026-08-28T04:05:35.733635+00:00", "stars": 1783}, "canonical_url": "https://ross.abutalabs.com/products/damselfly", "card": {"archived": false, "artifact_type": "application", "description": "Damselfly is a server-based Photograph Management app. The goal of Damselfly is to index an extremely large collection of images, and allow easy search and retrieval of those images, using metadata such as the IPTC keyword tags, as well as the folder and file names. Damselfly includes support for object/face detection.", "domain": ["photography", "image-processing", "self-hosted", "web-development", "machine-learning"], "enriched": true, "function": ["image-processing", "search-engine", "machine-learning", "computer-vision", "web-framework"], "health_score": 97, "homepage": null, "language": "C#", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["Webreaper/Damselfly"], "name": "Webreaper/Damselfly", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-24T16:13:15+00:00", "repo": "Webreaper/Damselfly", "stars": 1783, "tags": ["photo-management", "face-recognition", "exif", "iptc", "blazor", "digital-asset-management", "keyword-tagging", "docker", "web-server"], "topics": ["photography", "docker", "image", "image-processing", "exif", "iptc-metadata", "blazor", "efcore", "face-detection"], "urls": [], "use_cases": ["manage a large folder-based photo collection on a home server", "search hundreds of thousands of photos by keyword, date, camera, or lens", "tag people once and automatically find them in other photos", "keyword-tag photos non-destructively via EXIF/IPTC metadata", "find visually similar images", "export or download selected photos with watermarks for social media", "browse photos on a map using geolocation metadata", "share a photo library across multiple devices and users"], "what_it_is": "Damselfly is a server-based photograph management application designed to index and search very large image collections using metadata such as IPTC keywords, EXIF data, and file/folder names. It includes AI-powered face detection, face recognition, and object detection, with a web-based Blazor UI inspired by Google Picasa.", "when_to_avoid": ["you only need a simple desktop photo viewer for a small collection", "you want heavy RAW editing or photo retouching features", "you cannot run a Docker/server-based deployment", "you need a fully polished consumer product rather than a self-hosted tool"], "when_to_choose": ["you have a very large (100k+) image library that desktop tools handle poorly", "you want fast server-side search and tagging accessible from multiple devices", "you need automated face detection/recognition and object tagging", "you prefer non-destructive EXIF keyword updates without re-encoding JPEGs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/damselfly", "repo": "Webreaper/Damselfly", "role": "main", "score": 88}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.733635+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:24:17.993713+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4cb6b25c6fd93cf79b6f4f16ba811e803e9e45d32dc1cdba8ac78b1fc4dafd43", "fetched_at": "2026-08-28T04:05:35.733635+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Webreaper/Damselfly"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 66}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2530, "days_push": 9, "days_rel": 231, "gap_med": 4.0, "n_releases_24m": 5}, "score": 88, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}