{"adoption": {"forks": 115, "observed_at": "2026-08-28T04:06:40.760769+00:00", "stars": 2362}, "canonical_url": "https://ross.abutalabs.com/products/snapotter", "card": {"archived": false, "artifact_type": "application", "description": "Open-source, self-hosted file-processing tool. Convert, compress, OCR, transcribe & run local AI across image, video, audio, PDF & documents, via UI, REST API & pipelines. Your files never leave your network.", "domain": ["files", "media", "pdf", "self-hosted", "privacy", "developer-tools"], "enriched": true, "function": ["image-processing", "video-processing", "audio-processing", "ocr", "pdf", "speech-recognition", "file-upload", "http-server", "workflow-automation", "machine-learning"], "health_score": 100, "homepage": "https://snapotter.com", "language": "TypeScript", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["snapotter-hq/SnapOtter"], "name": "snapotter-hq/SnapOtter", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-24T15:10:07+00:00", "repo": "snapotter-hq/SnapOtter", "stars": 2362, "tags": ["file-conversion", "media-processing", "homelab", "air-gap", "compliance", "rest-api", "cloudconvert-alternative", "on-premise", "transcription", "metadata-stripping", "automation", "docker", "web-server", "linux"], "topics": ["ai", "docker", "homelab", "image-editor", "image-processing", "open-source", "self-hosted", "privacy", "audio-processing", "file-conversion", "media-processing", "pdf", "typescript", "video", "video-processing", "airgap", "compliance", "file-processing", "on-premise", "rest-api"], "urls": [], "use_cases": ["convert and compress images, video, and audio without uploading to cloud services", "run OCR on scanned PDFs and images locally", "transcribe audio and generate video subtitles on my own server", "strip metadata from files for privacy compliance", "batch-process files through automated pipelines via REST API", "self-hosted CloudConvert or Smallpdf alternative for an air-gapped network", "remove backgrounds, upscale, or colorize photos with local AI", "process sensitive documents on-premise for compliance"], "what_it_is": "SnapOtter is an open-source, self-hosted file-processing suite offering 200+ tools across image, video, audio, PDF, and document modalities, including conversion, compression, OCR, transcription, metadata stripping, and local AI features. It is deployed as a single Docker container and operated through a web UI, REST API, and automated pipelines, keeping all files on your own infrastructure.", "when_to_avoid": ["you only need PDF-specific workflows and prefer a lighter, PDF-only tool", "you need a managed cloud service with no self-hosting overhead", "you lack the hardware for local AI features like transcription or image enhancement", "AGPL-3.0 licensing is incompatible with your usage or distribution model"], "when_to_choose": ["you need a wide range of file-processing tools behind one self-hosted UI and API", "data privacy, air-gapping, or compliance rules forbid sending files to third-party cloud converters", "you want a homelab-friendly single Docker container with optional GPU acceleration", "you want to replace multiple SaaS tools (CloudConvert, Smallpdf, TinyPNG, Otter.ai) with one stack"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/snapotter", "repo": "snapotter-hq/SnapOtter", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "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:06:40.760769+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:40.760769+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:36:04.896938+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3538d95741f527bd380f21ae2bac1a69c9e4c82a537e992d9fcce5c2a8a3e8fb", "fetched_at": "2026-08-28T04:06:40.760769+00:00", "kind": "readme", "missing": false, "url": "https://github.com/snapotter-hq/SnapOtter"}, {"content_hash": "9be289350041b2ca0e580e04bb920df4bf9a0993275913ed8be8208ed0f1ab19", "fetched_at": "2026-08-29T10:17:00.749744+00:00", "kind": "homepage", "missing": false, "url": "https://snapotter.com"}, {"content_hash": "c614cd2797140025d403e5f68935f1337c90fe2aec259281f0bd2296783e2159", "fetched_at": "2026-08-29T10:17:00.752405+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com"}, {"content_hash": "3f8979173dd590e38c7797f162d44ce0b54dd137fa4563b5c87484e2c20a60e4", "fetched_at": "2026-08-29T10:17:00.754195+00:00", "kind": "site_page", "missing": false, "url": "https://docs.snapotter.com/guide/getting-started.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 11, "rhythm": 95}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 157, "days_push": 9, "days_rel": 35, "gap_med": 0.0, "n_releases_24m": 47}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}