* Create DATA_CHANNEL_CREATED event
* Add BxEvent.dispatch()
* Dispatch STREAM_WEBRTC_CONNECTED event
* Fix not being able to hide touch control in Remote Play
* Fix touch bar again
* Listen to STREAM_LOADING & STREAM_STARTING events
* Add setupEvents() functions
* Show/hide touch controller using CSS instead
* Fix exception in LoadingScreen class
* Fix Remote Play stopped working
* Read layout from "layouts" property
* Support schema version 2
* Support switching custom layouts
* Fix custom touch layouts not working in Remote Play
* Fix game's layout not working when switching between games
* Fix loading custom layout before touch_layout_manager is ready
* Fix game's custom layout not working sometimes
* Set USE_DEV_TOUCH_LAYOUT to false
* Expose Layout Manager
* Test layout
* Update better-xcloud.user.js
* Fix custom layout not being applied after switching off "Basic controls" setting
* Support custom layout in Remote Play
* Fix bug when showing/hiding touch controller
* Fix Remote Play
* Wait for 1s before displaying custom layout
* Support dev layouts
* Update translations
* Show notes in Settings
* Fix not being able to show touch controller
* Add initial support for MKB
* Refactor icons
* Enable native MKB support for some games
* Move Stream settings & stats buttons to Stream HUD bar
* Split stream settings into tabs
* Use bx-gone class to show/hide Settings sidebar
* Update translations
* Update Toast class
* Press F9 to toggle MKB feature
* Disable Gamepad Disconnected screen
* Change from F9 key to F8 key
* Reverse back to F9 key + disable "disableGamepadDisconnectedScreen" patch
* Fix "disableGamepadDisconnectedScreen" patch
* Add fade in/out animations for Toast
* Fix Settings tabs not showing
* Fix touch controller not showing sometimes
* Add basic remapping screen
* Update MKB layout
* Add edit/save states
* Add borders to highlight Quick Settings tabs
* Get key name from key code
* Move the Dots button to the beginning
* Disable non-working native MKB games
* Optimize Patcher class: only apply "playing" patches when needed
* Refactor renderMkbSettings() to MkbRemapper class
* Refactor the rendering process of MkbRemapper
* Implement new method to control analog stick using mouse
Heavily inspired by Yuzu's "Mouse panning" feature
* Update README.md
* Refactor setting elements
* Reduce button prompt's font size
* Render mouse settings
* Add a warning in MKB remapper
* Update preset's structure
* Disable "contextmenu" event of dialog & its overlay
* Fix bug in MkbPreset.convert()
* Detect scrolling events while binding
* Convert wheel events to button press
* Fix minor bugs in Stream settings
* Fix RT mapping
* Add setValue() method to SettingElement
* Update preset after binding new key
* Update preset after changing mouse's settings
* Update UI of mouse's settings
* Update style
* Fixed action buttons at the bottom
* Add support for "exactTicks" param to Number Stepper element
* Don't render first & last markers
* Add basic LocalDb class
* Allow switching between presets
* Enable/disable elements when editing preset
* Update translations
* Refactor code
* Define "CE = createElement" globally
* Add createButton()
* Add icons to buttons
* Implement the "Cancel" button
* Implement the "Rename" button
* Add styling for disabled buttons
* Implement "New" & "Copy" buttons
* Implement "Delete" button
* Refactor code
* Fix exception when creating Default preset
* Set default name when copying preset
* Implement "Save" button
* Implement "Activate" button
* Implement switching preset data
* Pre-calculate mouse's sensitivities + fix not converting preset before using
* Fix mouse buttons not working
* Remove "not working" line
* Show "right-click-to-unbind" text
* Bug fixes
* Add ENABLE_NATIVE_MKB_BETA flag
* Update styling
* Add mention to Yuzu emu
* Pre-calculate mouse's sensitivities in MkbPreset.convert()
* Update translations
* Add donation link
* Update translations
* Add "Map mouse to" setting
* Fix styling
* Bug fixes
* Implement requestPointerLock()
* Hide pointerLock message when StreamMenu is being shown
* Fix bugs in Chrome
* Fix a bug causing Remote Play not working
* Remove "Disable bandwidth checking" feature as it's useless
* Update README.md
* Update styling
* Add URL to document
* Temporary disable the "Controller shortcuts" feature as it conflicts with the MKB feature
* Update translations
* Update README.md
* Try to fix remote play not working when not using local network
* Fix Server badge reporting incorrect info
* Refactor remote play requests in window.fetch
* Fix exceptions
* Stop overriding WebSocket class
* Fix not connecting to IPv6 server as expected
* Redesign Quick Settings bar
* Move stream stats settings to quick settings bar
* Add "for" attributes to labels
* Minor optimization
* Stop rendering Toast
* Don't render UI elements when not playing
* Test remote play
* Add a link to dev-tools page
* Add Remote Play dialog
* Bug fixes
* Fix URL
* Fix header
* Path xHome domain
* Remote Remote Play config from window.location while playing
* Update style of the Remote Play button
* Add dialog overlay
* Hide Settings when opening the Remote Play dialog
* Update styles
* Path /direct-connect link
* Fix bind() monkey-patching
* Stop patching when it's done
* Fix exception with GAME_TITLE_ID
* Add resolution setting
* Add Patcher class
* Stop storing Remote Play config in location.hash
* Apply resolution
* Display state's label
* Fix IPv6
* Update translations
* Move Patcher class to the top
* Add "disableTelemetry" and "disableTrackEvent" patches
* Add Layout setting
* Add setting to adjust controller polling rate
* Add Mouse & Keyboard support
* Add Italian translations
* Basic code for GamepadHandler
* Take screenshot using Home + RB
* Enable shortcuts using setting
* Only poll gamepad when playing
* Toogle stats using Home + Select
* Add basic Toast class
* Update translations
* Define CSS variables
* Shorten CSS prefix "better-xcloud-" to "bx-"
* Move Safari's workaround code to the end of the script
* Add setting to change Better xCloud's language
* Support Vietnamese language
* Use the same language as browser
* Minor fixes
* Add Portuguese (Brazilian)
* Update BR translation
* Adjust CSS of Settings' reload button
* Reload the page after changing language
* Fix setting locale on first run
* Replace "Force high-quality codec" option with "Visual quality"
* Add Italian translation
* Update texts
* Deprecate "Prefer high-quality codec" setting
* Show stat's abbr. in slection box
* Reduce border size in stats bar from 2px to 1px
* Remove unused texts
* Remove Italian translation (because it's unfinised) + update Brazillian + Vietnamese translations
* Move Video settings box from bottom to the right side
* Rename "Video Settings" to "Stream Settings"
* Volume booster
* Fix volume booster not working
* Typo
* Fix not working in Kiwi
* Show input range
* Update monkey patching method for AudioContext
* Refactor Preferences
* Add tick markers
* Add Audio & Video headers
* Reduce stats bar size
* Show warning when Clarity Boost mode is ON
* Increase max volume to 600
* Try to fix audio problem on iOS/iPadOS
* Pause <audio>
* Fix crashing when enabling touch controller
* Fix touch controller not working
* Fix volume booster not working on iOS/iPadOS
* Make Game Pass' app version easier to read
* Replace numberPicker with NumberStepper
* Replace "Stretch Video" setting with "Video Ratio"
* Make number stepper's buttons a little bit bigger
* Rename "RTT" to "PNG"
* Show select box to select stats items
* Toggle stats
* Prevent select box from jumping around
* Put Ping before FPS & remove "ms" suffix from Ping
* Show game's art in the loading screen
* Fade in/out game's art
* Enable UI_GAME_ART_LOADING_SCREEN by default
* Check PREF_UI_GAME_ART_LOADING_SCREEN
* Fix touch controller setting
* Show estimated time
* Show countdown time on web title
* Rename PREF_UI_GAME_ART_LOADING_SCREEN to UI_LOADING_SCREEN_GAME_ART
* Add setting to show/hide the wait time
* Add time zone offset to end time
* Store APP_CONTEXT
* Add setting to hide the rocket animation
* Add Video clarity setting
* Disable Clarity feature in Safari
* Make the Video settings bar smaller
* Stop loading the page when running into the "We are sorry..." error message
* Fix problems with named parameters
* Add "Enable microphone on game launch" setting
* Stream menu: clone the second last button instead of the first one (usually the mic button)
* Close the HUD when clicking clicking on the Video Settings button
* Use a different CSS for the Stream Stats button when it's ON
* Reload the page until the script is loaded first
* Trying to fix the issue with error page
* Show a message when reloading the page
* Minor refactoring in overrides.inputConfiguration
* Automatically reload the page when running into the "We are sorry..." error message
* Double-tap anywhere at the bottom of the screen to show/hide touch controller
* Update CSS
* Update the size of the screenshot button
* Update screenshot button's CSS
* Update screenshot button's opacity
* Update README.md
* Fix sometimes the touch controller layout doesn't show at the beginning
* Restore GAME_TITLE_ID
* Update README.md
* Bump version to 1.10
* Bump version to 1.10
* Add "Enable touch controller for all games" feature
* Minor fixes
* Disable STREAM_ENABLE_TOUCH_CONTROLLER when STREAM_ENABLE_TOUCH_CONTROLLER is enabled
* Combine STREAM_ENABLE_TOUCH_CONTROLLER & STREAM_HIDE_TOUCH_CONTROLLER into STREAM_TOUCH_CONTROLLER
* Add "Simplify Stream's menu" setting
* Fix Smart TV layout
* Fix not able to hide Video bar if the "Disable touch controller" is on
* Combine Region + Server badges into one
* Reduce badge's font-size from 16 to 14px
* Fix battery level showing .99999
* Don't show battery badge when it's 100%
* Fix showing incorrect Audio codec in Safari
* Add "Safari on macOS" User-Agent profile
* Fix showing incorrect Video codec in Safari
* Use "-webkit-user-select" for Safari
* Update Video badge's color
* Refactor class names
* Move Quick settings bar's CSS to addCss()
* Adjust Stream menu button's size
* Add shadow to Video settings bar
* Put "Stream Stats" button before "Video Settings" button
* Get video and audio info from RTCPeerConnection.getStats()
* Show stream's stats bar
* Make Stream menu icon's size smaller
* Add shadow to stream badges
* Show bitrate
* Add button to toggle Stream Stats
* Rename StreamStatus to StreamBadges
* Show '???' then currentRoundTripTime is undefined
* Remove work-around for browsers with no setCodecPreferences() support as it's not working
* Remove updateVideoPlayerPreview()
* Disable USE_DESKTOP_CODEC setting on unsupported browsers
* Add a button to test screenshot feature
* Update CSS of the screenshot button
* Prevent screenshot button from blocking UI
* Add setting to change screenshot button's position
The main target of this script is Android users, but it should work great on desktop too.
Improve Xbox Cloud Gaming (xCloud) experience on [xbox.com/play](https://www.xbox.com/play). It also allows you to use Remote Play on the xCloud website.
## Features:
**Supported platforms:**
- Windows
- macOS
- Linux, SteamOS (including Steam Deck)
- Android, Android TV (including Meta Quest VR Headsets)
This script makes me spend more time with xCloud, and I hope the same thing happens to you.
If you like this project please give it a 🌟. Thank you 🙏.
- Switch region of streaming server.
- Prefer IPv6 streaming server (might improve latency).
- Force HD stream by disabling bandwidth checking -> xCloud always tries to use the best possible quality.
- Skip Xbox splash video.
- Make the top-left dots icon invisible while playing. You can still click on it, but it doesn't block the screen anymore.
- Adjust video filters (brightness/contrast/saturation).
- Hide footer and other UI elements.
- Reduce UI animations (the smooth scrolling cannot be disabled).
- Disable social features (friends, chat...).
- Disable xCloud analytics. The analytics contains statistics of your streaming session, so I'd recommend to enable analytics to help Xbox improve xCloud's experence in the future.
1. Install [Tampermonkey extension](https://www.tampermonkey.net/) on suppported browsers. It's also available for Firefox on Android.
2. Install **Better xCloud**:
- [Directly on Github](https://github.com/redphx/better-xcloud/releases/latest/download/better-xcloud.user.js)
4. Refresh [xCloud web page](https://www.xbox.com/play/).
5. Click on the new "SERVER NAME" button next to your profile picture to adjust settings.
6. Optional but recommended: change your browser's User-Agent. Check the [User-Agent section](#user-agent) below for more info.
7. Don't forget to reload the page after changing settings.
## Full documentations
- For the full details please visit: https://better-xcloud.github.io
- [Demo video](https://youtu.be/hyp69Jrb2sQ)
## User-Agent
Optional, as changing User-Agent won't guarantee a better streaming experience, but it's worth a try. You might need to install an external extension to do that.
⚠️ Please DO NOT report **Better xCloud**'s bugs on [/r/xcloud subreddit](https://reddit.com/r/xcloud/). Report bugs in [Issues](https://github.com/redphx/better-xcloud/issues) or [Telegram channel](https://t.me/betterxcloud) instead.
It's recommended to change User-Agent to:
```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67
```
This will trick xCloud into thinking you're using Edge browser on desktop.
## Table of Contents
- [**How to install**](#how-to-install)
- [**Features**](#features)
- [**Donation**](#donation)
- [**Acknowledgements**](#acknowledgements)
- [**Disclaimers**](#disclaimers)
Other options (only do one of these):
- Add ` smarttv` to switch to Smart TV layout.
- Add ` Xbox;` to become an Xbox console.
- Add ` 36102dd3-6953-45f6-8b48-031fb95e0e0d` to become a Logitech G Cloud device.
- Add ` 0ed22b6f-b61d-41eb-810a-a1ed586a550b` to become a Razer Edge device.
## How to install
Visit [this page](https://better-xcloud.github.io/browsers) to know how to install Better xCloud on your device.
## Tested on:
- Chrome on macOS.
- Firefox for Android with Tampermonkey add-on.
- *(NOT RECOMMENDED at the moment since its Userscript implementation is not working properly)* [Hermit Browser](https://hermit.chimbori.com) on Android. It supports custom User-Agent and has built-in Userscript support (premium features, only $7.99) so you don't have to install anything else. I built **Better xCloud** just so I could use it with Hermit.
## Features
## FAQ
1.**Why is it an Userscript and not extension?**
It's because not many browsers on Android support installing extensions (and not all extensions can be installed).
If you think this project is useful and want to support future developments, please consider making a donate via [my Ko-fi page](https://ko-fi.com/redphx).
Or you can give this project a star, that's also helpful.
Thank you.
## Translation
Help translating **Better xCloud** to another languagues using [Crowdin](https://crowdin.com/project/better-xcloud).
Use [this post](https://github.com/redphx/better-xcloud/discussions/131) for discussion.
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.