* 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
Improve [Xbox Cloud Gaming (xCloud)](https://www.xbox.com/play/) experience on web browser.
The main target of this script is mobile 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.
Give this project a 🌟 if you like it. Thank you.
> [!TIP]
> The Android app is in development at [redphx/better-xcloud-android](https://github.com/redphx/better-xcloud-android)
> [!IMPORTANT]
> I don't accept pull requests at the moment (except PR for custom touch controls)
**Supported platforms:**
- Windows
- macOS
- Linux, SteamOS (including Steam Deck)
- Android, Android TV (including Meta Quest VR Headsets)
- iOS, iPadOS
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 🙏.
- For the full details please visit: https://better-xcloud.github.io
- [Demo video](https://youtu.be/hyp69Jrb2sQ)
⚠️ 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.
## Table of Contents
- [**How to install**](#how-to-install)
- [**Features**](#features)
- [**Donation**](#donation)
- [**Acknowledgements**](#acknowledgements)
- [**Disclaimers**](#disclaimers)
## How to install
Visit [this page](https://better-xcloud.github.io/browsers) to know how to install Better xCloud on your device.
> Connect to another server instead of the default one. Check [FAQ section](#faq) for some notes.
- **Prefer IPv6 streaming server**
> Might reduce latency
- **Force high quality stream**
> Force xCloud to use the best streaming codec profile (same as desktop). You don't have to change User-Agent anymore.
> Some browsers (like Firefox) don't support this feature. Check [the full list](https://caniuse.com/?search=setCodecPreferences).
> If you're on Android and want to use it, try [Hermit](https://hermit.chimbori.com).
- **Disable bandwidth checking**
> xCloud won't reduce quality when the internet speed is slow
- **Skip Xbox splash video**
> Save 3 seconds
- **Hide Dots icon while playing**
> You can still click on it, but it doesn't block the screen anymore
- **Reduce UI animations**
> Disable `transition` CSS property in some elements. The smooth scrolling cannot be disabled.
- **Stretch video to full sctreen**
> Useful when you don't have a 16:9 screen
- **Adjust video filters**
> Brightness/Contrast/Saturation
- **Disable social features**
> Features like friends, chat... Disable these will make the page load faster.
- **Disable xCloud analytics**
> The analytics contains statistics of your streaming session, so I'd recommend to allow analytics to help Xbox improve xCloud's experence in the future.
- **Hide footer and other UI elements**
## How to use
1. Install [Tampermonkey extension](https://www.tampermonkey.net/) on suppported browsers. It's also available for Firefox on Android.
To update manually, just install the script again (you won't lose your settings).
## Donation
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.
## Compatibility
✅ = confirmed to be working
❓ = not yet tested
❌ = not supported (mostly because of lacking Userscript/extension support)
<sup>3</sup> NOT RECOMMENDED at the moment since its Userscript implementation is not working properly. Non-network related features (skip splash video, video settings...) still work. It's still my favorite app to play xCloud on because it's lightweight, supports Userscript (premium features, only $1.99) without having to install anything else. I built **Better xCloud** just so I could use it with Hermit.
## FAQ
1.**Will I get banned for using this?**
I think it's very unlikely that you'll get banned for using this. Most of the features only affect client-side, except for switching region of streaming server (you'll connect to another server instead of the default one). If you want to be safe just avoid using that. As always, use as your own risk.
2.**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).
3.**I see "???" button instead of server's name**
That means Tampermonkey is not working properly. Please make sure you're using the latest version or switch to a well-known browser.
4.**Can I use this with the Xbox Android app?**
No you can't. You'll have to modify the app.
5.**Will you able to enable "Clarity Boost" feature on non-Edge browsers?**
No. "Clarity Boost" feature uses an exclusive API (`Video.msVideoProcessing`) that's only available on Edge browser for desktop at the moment.
## 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.
## Acknowledgements
- The mouse controlling feature is heavily inspired by the "Mouse spinning" feature in [Yuzu emulator](https://github.com/yuzu-emu/yuzu-mainline)
- [n-thumann/xbox-cloud-server-selector](https://github.com/n-thumann/xbox-cloud-server-selector) for the idea of IPv6 feature
- Icons by [Adam Design](https://www.iconfinder.com/iconsets/user-interface-outline-27)
## User-Agent
> You're no longer needed to change User-Agent since you can just use the **Force high quality stream** setting.
> I'll still keep this section because it has some interesting info.
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.
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.
- Icons by [Phosphor Icons](https://phosphoricons.com)
- [PromptFont](https://shinmera.com/promptfont) by Yukari "Shinmera" Hafner
## Disclaimers
- Use as your own risk.
- Use it at your own risk.
- This project is not affiliated with Xbox in any way. All Xbox logos/icons/trademarks are copyright of their respective owners.
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.