{"adoption": {"forks": 114, "observed_at": "2026-08-28T04:05:42.743926+00:00", "stars": 1837}, "canonical_url": "https://ross.abutalabs.com/products/virtscreen", "card": {"archived": false, "artifact_type": "application", "description": "Make your iPad/tablet/computer into a secondary monitor on Linux.", "domain": ["desktop-applications", "operating-systems", "developer-tools"], "enriched": true, "function": ["gui", "cli", "networking"], "health_score": 20, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["kbumsik/VirtScreen"], "name": "kbumsik/VirtScreen", "platform": ["python"], "pushed_at": "2022-07-01T00:54:08+00:00", "repo": "kbumsik/VirtScreen", "stars": 1837, "tags": ["vnc", "virtual-display", "second-monitor", "xrandr", "pyqt5", "ipad-as-monitor", "linux", "x11"], "topics": ["monitor", "linux", "vnc", "ipad", "second-screen", "python", "qml", "qt5"], "urls": [], "use_cases": ["use an iPad as a second monitor for my Linux laptop", "create a virtual display and share it over VNC", "extend my Linux desktop screen to a tablet without buying hardware", "set up a second screen on Linux with a GUI instead of xrandr commands", "run a headless virtual monitor from the command line", "share a HiDPI or portrait virtual screen to another device"], "what_it_is": "VirtScreen is a Linux GUI application that creates a virtual secondary display using XRandR and shares it over VNC, letting you use an iPad, tablet, or another computer as an extra monitor. It is built with PyQt5 and asyncio, offers both a system-tray GUI and a CLI mode, and works on any Linux distribution running Xorg.", "when_to_avoid": ["you use Wayland instead of Xorg, since it relies on XRandR and x11vnc", "you need low-latency, high-refresh-rate display mirroring like dedicated hardware solutions", "you are on macOS or Windows", "you need an actively developed project with recent updates"], "when_to_choose": ["you run Linux with Xorg and want a simple GUI to create a virtual second screen", "you want to repurpose an iPad or tablet as an external monitor over VNC", "you need both GUI and CLI ways to manage virtual displays", "you want configurable resolutions, portrait mode, and HiDPI support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/virtscreen", "repo": "kbumsik/VirtScreen", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "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:42.743926+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:42.743926+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:18:26.401820+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7d641e638cf2593c72802ba3606d28221059631e479e047f2c1c55b636694957", "fetched_at": "2026-08-28T04:05:42.743926+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kbumsik/VirtScreen"}, {"content_hash": "7550e5ea445c6d8c8841827f1202d2e580623c6725e7a4a8710330d6a091795b", "fetched_at": "2026-08-29T10:57:47.226845+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/virtscreen/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 3052, "days_push": 1525, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}