{"id":20210432,"url":"https://github.com/classicoldsong/widecar","last_synced_at":"2025-07-28T11:05:05.017Z","repository":{"id":247148551,"uuid":"825124535","full_name":"ClassicOldSong/Widecar","owner":"ClassicOldSong","description":"Sidecar for Windows - with Sunshine and Moonlight","archived":false,"fork":false,"pushed_at":"2024-09-05T18:48:08.000Z","size":59,"stargazers_count":135,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-25T04:02:53.727Z","etag":null,"topics":["display","moonlight","multimonitortool","sidecar","streaming","sunshine","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClassicOldSong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-06T21:11:24.000Z","updated_at":"2025-04-23T23:57:49.000Z","dependencies_parsed_at":"2025-01-13T16:10:37.835Z","dependency_job_id":"6cbad896-5a62-447e-a804-044e79f8af30","html_url":"https://github.com/ClassicOldSong/Widecar","commit_stats":{"total_commits":21,"total_committers":1,"mean_commits":21.0,"dds":0.0,"last_synced_commit":"6042f52f569176b3b5d63c8e65f54261685731dd"},"previous_names":["classicoldsong/widecar"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ClassicOldSong/Widecar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassicOldSong%2FWidecar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassicOldSong%2FWidecar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassicOldSong%2FWidecar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassicOldSong%2FWidecar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClassicOldSong","download_url":"https://codeload.github.com/ClassicOldSong/Widecar/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClassicOldSong%2FWidecar/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267505099,"owners_count":24098346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["display","moonlight","multimonitortool","sidecar","streaming","sunshine","windows"],"created_at":"2024-11-14T05:47:44.364Z","updated_at":"2025-07-28T11:05:04.991Z","avatar_url":"https://github.com/ClassicOldSong.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Widecar\n\nWidecar is a tiny helper designed to enhance your streaming experience with Sunshine by automatically managing virtual screens. This app seamlessly integrates with ParsecVDD to create and destroy virtual screens based on your connection status, and it ensures your virtual display matches the Moonlight device resolution settings.\n\n`Widecar` is basically `Sidecar for Windows`, it is especially useful when you have an Android tablet with high refresh rate and a stylus. If you connect a keyboard and mouse to the tablet, it's no different from a Windows tablet but with much powerful CPU/GPU power when streaming.\n\n\u003e [!WARNING]\n\u003e ## This project is sunsetting as [Apollo](https://github.com/ClassicOldSong/Apollo) is in development.\n\u003e You can find a preview release of Apollo [here](https://github.com/ClassicOldSong/Apollo/releases).\n\u003e Apollo works best in conjunction with [Artemis](https://github.com/ClassicOldSong/moonlight-android), providing loads of optimizations and feature improvements.\n\n## Features\n\n1. **Automatically create a new virtual screen on connect**: When you start streaming, Widecar will automatically create a new virtual display.\n2. **Automatically destroy the virtual screen on exit**: Upon exiting, Widecar will remove the virtual display to keep your system clean.\n3. **Automatically match the Moonlight device resolution settings**: Widecar adjusts the virtual display settings to match your Moonlight device resolution for a smooth streaming experience.\n4. **Easy to use**: Simply execute the app upon connection and exit. See the screenshot below for configuration.\n5. **Multi-instances support**: Widecar supports multiple Sunshine instances running simultaneously for multiple sidecar screen configuration.\n\nAlso checkout https://github.com/ClassicOldSong/moonlight-android/releases for a much improved Moonlight Android client with much better touch pad support and several other improvements, since the official one hasn't been updated for months...\n\n## Requirements\n\n### Sunshine Streaming\n- [Sunshine Streaming](https://github.com/LizardByte/Sunshine)\n  - **Important**: Leave the `Output Name` configuration blank, or the newly added virtual display won't be picked up.\n\n### ParsecVDD\n- [ParsecVDD](https://github.com/nomi-san/parsec-vdd)\n  - The ParsecVDA driver must be installed.\n  - Install first, **run it**, then put it in the background. You don't need to do anything more.\n  - Read [here](https://github.com/nomi-san/parsec-vdd#design-notes) for explaination of why a daemon is needed:\n    \u003e You have to ping to the driver periodically to keep added displays alive, otherwise all of them will be unplugged after a second.\n\n## Configuration\n\nTo use Widecar, simply configure it to run upon connection and exit in your desired app. Elevated must be checked. Below is an example configuration screenshot:\n\n![Configuration Screenshot](https://github.com/ClassicOldSong/Widecar/assets/10512422/20331aa5-9372-43f3-b79c-4e84a61e843d)\n\nYou can find a pre-built version in the [release page](https://github.com/ClassicOldSong/Widecar/releases).\n\n## Advanced usage\n\nYou can copy the `sunshine.conf` in your Sunshine installation, name it like `sunshine_widecar.conf`, and start a second Sunshine instance with it by executing `sunshine.exe path\\to\\sunshine_widecar.conf` with SYSTEM privilege.\n\nThe [start-widecar.ps1](start-widecar.ps1) should help you with that.\n\nYou can then create a shortcut to that script, setting target to `powershell -ExecutionPolicy Bypass -File \"path\\to\\start-widecar.ps1\"`\n\nYou need to execute the script with Administrator privilege. Starting the instance with only Administrator privilege is fine, but you won't be able to access UAC dialog or enter lock screen password through streaming.\n\nAdd/change the following parts to `sunshine_widecar.conf` in order to run parallel with the original instance:\n\n```ini\n# Change the port according to your situation\nport = 48989\n# You can change the name as you wish\nsunshine_name = Widecar\n# A separate state file must be created in order to distinguish between the original Sunshine instance\nfile_state = sunshine_state_widecar.json\n# Change to a different log path to prevent conflicts\nlog_path = sunshine_widecar.log\n# Change the path to where you actually put the widecar.exe\nglobal_prep_cmd = [{\"do\":\"D:\\\\Tools\\\\widecar.exe\",\"undo\":\"D:\\\\Tools\\\\widecar.exe\",\"elevated\":\"true\"}]\n```\n\nThen you need to ensure `Global Prep Commands` is enabled for all of your apps. In this configuration, the `Widecar` instance share all apps from the main instance, but all apps started here are in a separated virtual screen.\n\nYou can start even more Sunshine instances by doing the above steps multiple times, then you'll be able to connect multiple Moonlight clients at the same time for even more virtual mointors.\n\n## Troubleshooting\n\n- **No virtual display added**\n  - Ensure the ParsecVDA driver is installed\n  - Ensure the ParsecVDD application or similar services that constantly poll the driver is running\n- **Shows the same screen as main screen**\n  - If you're using an external display for the first time, Windows might configure it as \"Mirror mode\" by default. Press \u003ckbd\u003eMeta + P\u003c/kbd\u003e (or known as \u003ckbd\u003eWin + P\u003c/kbd\u003e) and select \"Extended\", then **exit the app** (not only the stream) and start the app again. You only need to do this once.\n- **Primary display changed to the virtual display after connection. I don't want that.**\n  - Setting the virtual display to primary **before** the stream starts is a must for Sunshine to use the virtual screen for streaming.\n    You can set the primary display back **after** the stream starts manually or using MultiMonitorTool to automate the process.\n\n    https://www.nirsoft.net/utils/multi_monitor_tool.html\n\n    Add to the **`Detatched Command`** like this with the proper display name to your \"Desktop\" app:\n\n    ![image](https://github.com/user-attachments/assets/a29fca73-ca52-4651-9cdf-87dd6bf71da4)\n\n    You can change the timeout accordingly. If changing the primary display back to the built-in display too quickly, Sunshine might still capture the built-in display.\n- **Resolution can't match client side anymore**\n  - ***NEVER*** set screen rotation on virtual displays! Widecar can handle vertical display normally, there's no need to manually set screen rotatition if you're using [Moonlight Noir](https://github.com/ClassicOldSong/moonlight-android) with Widecar.\n  - If you happen messed up with your monitor config:\n    1. Disconnect ALL Moonlight sessions\n    2. Remove ALL virtual displays using ParsecVDD, or simply quit ParsecVDD or whatever service you're using to keep the driver alive\n    3. \u003ckbd\u003eMeta(Win) + R\u003c/kbd\u003e, then type `regedit`, hit enter\n    4. Delete ALL entries under\n        - `HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers\\Configuration`\n        - `HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers\\Connectivity`\n        - `HKEY_LOCAL_MACHINE\\SOFTWARE\\Widecar\\sessions`\n\n    This will clear your monitor configuration cache and Widecar connection cache.\n\n    Then you're good to go!\n- **Stream failed to start with 2 or more graphics card**\n  - When your system has more than 2 graphic cards, ParsecVDA might got confused with which card to use as backend. \n\n    Follow the `Select Parent GPU` section of [this instruction](https://support.parsec.app/hc/en-us/articles/4423615425293-VDD-Advanced-Configuration) to manually set your desired GPU to use with the virtual display.\n\n    \u003e Visit the following Registry path on your system and add the specified key and value.\n    \u003e\n    \u003e```\n    \u003eHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WUDF\\Services\\ParsecVDA\\Parameters\n    \u003e```\n    \u003e\n    \u003eInsert new `DWORD` with name `PreferredRenderAdapterVendorId`, then depending on your system hardware enter the following Vendor ID as hexadecimal in the Registry key value field.\n    \u003e\n    \u003e| Vendor |  ID  |\n    \u003e|--------|------|\n    \u003e| NVIDIA | 10DE |\n    \u003e| AMD    | 1002 |\n    \u003e\n    \u003eTo apply this change to the Parsec Virtual Display Adapter, either reboot the host or disable and enable the Virtual Display Adapter inside device manager.\n\n    You might also want to set `DisablePreferredRenderAdapterChange` to `0` if it exists in the registry path. [[Source](https://github.com/ClassicOldSong/Widecar/issues/2#issuecomment-2254636625)]\n\n    If you have done the above steps and still got no image, try set `Adapter Name` in your Sunshine's `Audio/Video` config to the same video card's name of which you're using with the VDA driver.\n\n## Disclaimer\n\nI got kicked from Moonlight and Sunshine's Discord server and banned from Sunshine's GitHub repo literally for helping people out.\n\n![image](https://github.com/user-attachments/assets/f01fc57f-5199-4495-9b96-68cfa017b7ff)\n\nThis is what I got for finding a bug, opened an issue, getting no response, troubleshoot myself, fixed the issue myself, shared it by PR to the main repo hoping my efforts can help someone else during the maintainance gap.\n\nYes, I'm going away. I have started [a fork of Sunshine called Apollo](https://github.com/ClassicOldSong/Apollo) and will add useful features that will never get merged by the main repo shortly. [Apollo](https://github.com/ClassicOldSong/Apollo) and [Artemis](https://github.com/ClassicOldSong/moonlight-android) will no longer be compatible with OG Sunshine and OG Moonlight eventually, but they'll work even better with much more carefully designed features.\n\nThe Moonlight repo had stayed silent for 5 months, with nobody actually responding to issues, and people are getting totally no help besides the limited FAQ in their Discord server. I tried to answer issues and questions, solve problems within my ablilty but I got kicked out just for helping others. The funniest thing is, the repo starts updating after they got me banned!\n\n**PRs for feature improvements are welcomed here unlike the main repo, your ideas are more likely to be appreciated and your efforts are actually being respected. We welcome people who can and willing to share their efforts, helping yourselves and other people in need.**\n\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassicoldsong%2Fwidecar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclassicoldsong%2Fwidecar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclassicoldsong%2Fwidecar/lists"}