{"adoption": {"forks": 76, "observed_at": "2026-08-28T04:03:28.210917+00:00", "stars": 1071}, "canonical_url": "https://ross.abutalabs.com/products/scrcpy-mask", "card": {"archived": false, "artifact_type": "application", "description": "A Scrcpy client in Rust, Bevy and React, aimed at providing mouse and key mapping to control Android device, similar to a game emulator", "domain": ["mobile-development", "gaming-tools", "cross-platform"], "enriched": true, "function": ["gui", "sdk"], "health_score": 98, "homepage": null, "language": "Rust", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["AkiChase/scrcpy-mask"], "name": "AkiChase/scrcpy-mask", "platform": ["windows", "cross-platform"], "pushed_at": "2026-08-16T01:51:10+00:00", "repo": "AkiChase/scrcpy-mask", "stars": 1071, "tags": ["scrcpy", "android-control", "key-mapping", "screen-mirroring", "bevy", "react", "mobile-gaming", "adb", "automation", "linux", "macos"], "topics": ["rust", "scrcpy", "bevy", "react"], "urls": [], "use_cases": ["control android device from pc with mouse and keyboard", "play mobile games on computer with key mapping", "mirror android screen to desktop", "map keyboard keys to android touch gestures", "emulate multi-touch on android device", "automate android taps and swipes with scripts", "control android device wirelessly from desktop"], "what_it_is": "Scrcpy Mask is a cross-platform desktop client built with Rust, Bevy, and React for controlling Android devices from a computer. It provides visual mouse and keyboard key mapping with multi-touch emulation, scrcpy-based screen mirroring, and scripting support, similar to an Android emulator experience.", "when_to_avoid": ["you need game controller mapping, which is not yet supported", "you only need basic screen mirroring without input mapping (plain scrcpy suffices)", "you need iOS device control"], "when_to_choose": ["you want emulator-style keyboard and mouse control of a real Android device", "you need low-latency screen mirroring plus visual key mapping configuration", "you want scripting or external HTTP/WebSocket control of Android input"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/scrcpy-mask", "repo": "AkiChase/scrcpy-mask", "role": "main", "score": 88}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "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:03:28.210917+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.210917+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:44.511411+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d8cbcb7dadd15e66a8f382537db95ab2310c6e746f85e9097a3161b5c6ec3533", "fetched_at": "2026-08-28T04:03:28.210917+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AkiChase/scrcpy-mask"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 64, "rhythm": 90}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 902, "days_push": 18, "days_rel": 66, "gap_med": 29.0, "n_releases_24m": 7}, "score": 88, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}