Pinned Tweet
Are you interested in using Grayjay? Here are some quick video tutorials to help you get started so that you can start enjoying content across the whole internet in one place! 🧵
1/ How do you install Grayjay?
Grayjay Desktop v19 is out! Get it now at grayjay.app/desktop/
Added:
- Newly supported plugins (Soundcloud, Crunchyroll, NicoNico TedTalks, CuriosityStream, Mixcloud, RadioBrowser, RedbullTv, FOSDEM, NASA+ and InternetArchive)
Improvements:
- Implement native UMP ([#963](github.com/futo-org/Grayjay.…), [985](github.com/futo-org/Grayjay.…), [#890](github.com/futo-org/Grayjay.…))
- Implemented Widevine support
- Add channel playlists support ([#581](github.com/futo-org/Grayjay.…))
- Improve live chat implementation ([#779](github.com/futo-org/Grayjay.…), [#464](github.com/futo-org/Grayjay.…))
- Added linux sandbox support ([#416](github.com/futo-org/Grayjay.…))
- Added support for FCast protocol version 4
- Expanded browser shims
- Bumped Chromium version
- Improved download recovery for interrupted streams ([#613](github.com/futo-org/Grayjay.…))
- Improved official plugin dialog to make it more responsive
- Open the captcha window when a video or post needs a captcha
- Offer every primary language in the player settings
- Submit a text input once when Enter is pressed
- Hide settings tabs that only have advanced fields while Advanced is off
- Make the official plugins dialog responsive and keep the install button visible
- Play DASH manifest sources with quality and audio track menus
Fixes:
- Fix missing details date when there is no views
- Fixed direct audio/video URL source casting by passing local IP to the proxy
- Show content duration only when it's positive value
- Prefer hls.js over native playback for HLS sources
- Fix playing a public playlist from Youtube ([#1001](github.com/futo-org/Grayjay.…))
- Fix permanent loading spinner after adding a video to a playlist from the playlist page ([#980](github.com/futo-org/Grayjay.…)) - Thank you **@wilsonbirch**
- Fix download queue getting stuck after canceling an item ([#981](github.com/futo-org/Grayjay.…))
- Fix playlist export reporting success without exporting files ([#967](github.com/futo-org/Grayjay.…))
- Fix flatpak crashing when pressing `Ctrl+T` or using a middle mouse button ([#808](github.com/futo-org/Grayjay.…))
- Twitch livestreams gradually dropping stream quality ([#395](github.com/futo-org/Grayjay.…))
- Minor zoom fixes and scroll fixes
- Fixed MacOS illibidin2 issue
- Fixed downloaded content sometimes not playing as expected
- Fixed app icon in window titlebar showing Wayland logo ([#32](github.com/flathub/app.grayj…))
- Fixed Chromium client-side decorations ([#39](github.com/flathub/app.grayj…))
- Fixed exporting with subtitles
- Fixed casting device state becoming invalid
- Fixed casting with subtitles on some sources
- Fix player progress and volume handles rendering above modal dialogs
- Fix download HLS qualities when non-downloadable sources come first
- Fix playlist shuffle order and skip duplicates when adding to queue
- Fix post card thumbnails rendering above modal dialogs
- Fix more HLS downloads
Grayjay retweeted
March 14th, Austin, FUTO Conference #3. Featuring Scott Aaronson, @annakhachiyan, @dash_eats and @perrymetzger (and more!)
Link in reply for conference registration and after-party registration!
Grayjay retweeted
Grayjay is almost available on Steamdeck, our listing just went live! Feel free to wishlist it if you want to an alert when it releases. It has full controller compatibility.
Grayjay Android v347 is out !
Features:
- Library Support (On-device music and video playback)
- Polycentric moderation options
- Automatic language subtitles settings
- Copy comment button
- Reset settings button in sources
- Share settings button for sources
- HttpImp package for more reliable http requesting in some situations
- Double tap for play/pause
- Support 3x playback speed
Improvements:
- Subtitles can now be language tagged more reliably
- New menu style
- New menu highlighting
- Improved live stream playback recovery
- Converted some activities to fragments, should result in more reliable navigation
- More reliable auto-resume
- Keep screen on for shorts player
- Ignore unsupported devices in experimental casting backend
- Stop video playback before disconnecting from device
- No longer prompt for encrypted auto backup (phasing out)
- Request modifiers are better applied to certain scenarios (casting, downloading)
- Last queue playlist improvements
- Improved HLS downloading
- Moving to 16KB page size
Fixes:
- Fix false positive session unauthorized
- Fix allow PiP during loader game
- Fix export download video progress
- Fix castview scaling
- Fix loop/autoplay with casting
- Fix possible crash on polycentric comment failures
And probably more :)
We’ve ended support for the Spotify plugin and removed it from the official Grayjay plugin repository. Spotify ended up taking a lot of time and we chose to allocate our resources differently and want to focus on making what exists better. The source code is still available in case a new maintainer wants to pick it up.
Desktop release v11!
Features:
- Added native wayland support.
- Conditional mobile emulation for auth/captcha.
- Added new experimental casting backend.
- New key bindings:
o Added CTRL+Left/Right Arrow for navigating chapters.
o Added Shift + n/p for navigating queue.
o Added j/l for jumping 10s instead of 5s with arrows.
o Added c for toggling subtitles.
o Added / for opening search.
o Added </> for changing playback speed.
o Added ,/. for skipping single frames when paused.
o Space/k for pausing video (already existed).
o f for full screen toggle (already existed).
o Arrows up/down for controlling volume (already existed).
Improvements:
- Added LoginButton support for auth.
- Improved size/speed estimation for UMP downloads.
- Added copy settings to clipboard option on plugin.
- Sync pairing will now always happen in parallel for direct and relayed.
Fixes:
- Fixed issue with plugin dialog staying open after install succeeded.
- DevPortal fix for when there are no settings.
- Added separate desktop auth config.
- Fix download completion, and overflow for big files.
- Fixed sources page toggle states.
- Search history toggle now works.
- Fixed issue where headless would not have key events work on login screen.
- Gamepad polling loop now only active during focus and connected gamepad.
- Fixed overflow for chapter overlay.
- Fixed icons double clicking cause fullscreen on player.
- Search bar now hides whenever scrolling down on ChannelPage and no longer wrongly overlays.
- Added stop propagation to all dialogs that did not have it yet.
- Fixed bug where i when comments are open would cause minimized view to be incorrect.
- Removed arrow keys from being able to navigate elements, instead WASD is used for this. Arrow keys now function globally to control the video player like they used to. Remapped space to uniquely work for globally controlling playback state (play/pause).
- Fixed dialog background not closing dialog.
- Fixed checkbox list not changing properly when interacted with mouse.
- Fixed issue where arrow left/right would skip/not skip depending on editable state.
- File picker now works with windows network paths and additional improvements.
- Fixed issue where file dialog would not work when you have a bad hard drive connected on windows.
Version 340 is out!
Play Store release is still in review so you will have to wait a bit more before updating.
Fixes:
- Fixed issue where pausing in PiP would cause queue to get lost.
- Fixed UI issues on Android 15/16.
- Fixed a crash where TextView would crash during drag and drop.
- Possible fix for DownloadService that caused it to crash under certain edge cases.
Improvement:
- Promises exceptions are now properly propagated, resulting in correct exception handling and UI.
We’ve seen some reports about playback issues in Grayjay. To clarify: recent updates have included fixes for all known playback problems. However, the Play Store version is still in review and may take a few more days to go live. We highly recommend using the sideloaded version.
A few users mentioned that updates themselves caused issues, from what we’ve observed, that hasn’t been the case. More often, differences come from YouTube’s A/B testing, which can change behavior per session, region, or even plugin restart. We’ve been releasing daily fixes to keep up with YouTube’s changes, and those should resolve the issues you’re seeing.
Version 337 is out
Features:
- Can now open local media files with Grayjay (more to come)
- New experimental casting backend (off by default)
Fixes:
- Fix async promises not resolving if result is immediate
- Fix async promises getting disposed too soon
- Fix some translations
Desktop release v9
YouTube playback issues should be fixed now on desktop.
Changelog
Features
- Desktop livechat now uses local UI instead of (failing) iframes.
- Desktop now implements additional video loading animation and game (for longer waits)
- Plugins can now use websockets
- Plugins can now use Async (Only using timeouts right now)
- Plugins can now use sleep (not recommended)
- Plugins can now use live chat events
- Plugins can now use ReloadRequired exceptions in specific locations
Improvements
- Dash generation is now done async when possible
- Database now uses pooling (may fix db locked error)
Fixes
- Fix crash when deleting history while playing a video
- Fix issue where certain view/dialog ui would get stuck on some operating systems (eg. Import dialog).
- Various scroll container fixes
- Fix issue with Chromecast not proxying properly, may fix playback.
- Fix ChromeCast timestamp not updating properly.
- Dash manifests are now cached in case of (same) re-requests.
Android release v330 and Youtube v262
Youtube playback issues should be fixed now on Android. Desktop is next.
Features:
- Async support for plugins methods, currently only practically usable for setTimeout
- Livestream raids now properly support incoming/outgoing, which should be visualized correctly.
- Player will now properly show loader in cases of asynchronous loading (with progress bar if known time)
- Plugin promises can now add an estimated duration of a task
- Add player loader animation+game in situations where backoff is requested
Improvements:
- DashRaw.generate will now be called asynchronously if possible
- Livestream event colors now use RGBA instead of ARGB
Fixes:
- Fix possible crash for starting a service
- Fix possible crash related to an image view
- Fix possible crashes during import
- Fix issue where shared networked imports could crash
- Minor locking improvements
Youtube:
- Fix: Cipher fix
- Improvement: Backoff always if less than 5 seconds
- Improvement: Reusing tokens if possible for backoff
- Improvement: Reload once instead of twice
- Improvement: isInlinePlaybackNoAd off by default
Version 312 deployed.
Features
- Added article support.
- Added web content support.
- Add Crunchyroll.
- Downloads size ordering.
- Added view license in settings.
Improvements
- Fixed playback stutter when switching between background (audio only) and foreground play.
- Improved spacing consistency in bottom bar.
- Audio is now saved as m4a instead of mp4.
- Made chromecast more robust.
- Improvements to IPv6 handling of casting devices.
- Casting to a link local address it will now use a most likely candidate IP.
- Improved channel search to be more intuitive.
- Added separate error status code for transport rejection.
- Improve messaging and warnings for sync feature.
- Button incognito is now visible but translated when minimized.
- Added missing checks for polycentric enabled.
- Keep live chat open when minimizing. #2227
- Improved sync send efficiency.
- Added client sided sync ping loops to prevent inactive channels.
- Fix link typo for Script Signing.
- Add a setting to adjust player seek duration.
- Made HLS downloading more robust.
- Self update is not less verbose for specific android versions.
- Brightness restore on app close.
- Some settings are now hidden under advanced settings.
- Subscription is now removed from sub groups when unsubscribing.
Fixes
- Removed drag handles when searching in playlist.
- Tab changes no longer fill up navigation history.
- Potential fix for WebSocket not being closed in time when unloading plugins
- Potential fix for crash that happens in ShapeableImageView.
- Fixed typo in download error by.
- Fixed issue where plugins could not use a new http client (due to ReturnType).
- Theoretical crashfix for the case where activity does not successfully resume before handleUrl is invoked #2245.
- Fixed UI mode changes causing app restarts.
- Improved exception handling for sync relay loop.
- Fixed issue where loop video would not reset when opening a playlist, causing the video to loop without being able to disable it.
- Check to see if an HLS playlist is a master playlist before parsing it, fixing some HLS audio downloads.
- Fix for throttled networks (airplane wifi) freezing app opening downloaded content.
- Updated default price.
- Fix "previous song" button playing always from unshuffled queue, even when shuffle is used
- Fixed app restart when keyboard|keyboardHidden config changes happen.
- Fixed issue where private mode would not re-appear after closing the video.
- Fixed fullscreen UI glitch
- Fixed Chromecast position not updating on Grayjay side.
- Fixed Chromecast not reconnecting properly.
- Fixed AirPlay/Chromecast position not being reflected in history.
- Made task handler and retry dialogs more robust.
- Fix for duplicate playlists after sync.
- Playlist id saving for exports, fixing duplicates when you first import and then sync (only works for new backups).
- Crashfix on stopping StateSync #2302.
- Crashfix related to PiP #2041.
Android Release v306
Features
- Implemented a button on picture in picture allowing you to switch to background play.
- History now has a list of filters to filter specific plugins.
- Added Curiosity Stream plugin.
Improvements
- History now filters out videos of plugins that are not enabled.
- History now shows an icon of which platform a specific history video is on.
- Confirming sync now brings you back to the device list.
- Added progress bar to playlist items.
Fixes
- Added insensitivity to base64 formats for sync.
- Fixed datetime checking related to playlists on android.
- Private mode visibility no longer overlays pip/minimized video.
- Fixed issue where video was removed from watch later when delete from watch later was false.
- Prevent going into picture in picture when clicking add sources.
- Fixed device vanishing while still being there in the case the device is blacklisted from starting a relay.
- Fixed crash in SyncHome whenever recovering from screen timeout.
- Migrate stores is now performed asynchronously.
- StateSync connect using remote connection info now uses IPv4 over IPv6.
Desktop v7 is out!
Improvements:
- Improved sync UI and feedback
- Improved base64 robustness solving several encryption related issues
- Sync is now disabled by default and users are prompted to enable it on the sync page
- Show a warning when the sync server socket failed to start
- Improved HLS byte range parsing to be able to work with larger numbers
- Added UI to indicate when the public key is corrupt in the pairing UI
- More robust Directories and Logger initialization
- Subtitles for merged dash sources
Fixes:
- Fixed login for some edge cases
- Fixed issue for casting to a IPv6 device with a scope id
- Fixed flow to connect pair sync from desktop
- Hide download button on live content
- Implemented backoff for sync server connection
- Fixed send as Gzip
- Fix race condition causing watch later to be re-added when removed when using sync
- Fixed Headless mode not working
- Hide bitrate when bitrate is unknown
and Android 302 is out!
Improvements
- Sync is now disabled by default and the user will be prompted to enable it when using the feature
- Improved sync pairing UI
- Added toggle to be able to disable local functionality for sync
- Sync pairing dialog now automatically closes when pairing is successful
- Casting devices more clearly communicate when not ready
- Implemented backoffs for SyncServer
Fixes
- IPv6 casting now works properly when the IP contains a scope id
- Various fixes to Sync protocol
- Fixed synced ImageVariables showing black images
- Fixed sync gzip compression
- Fix race condition causing watch later to be re-added when removed when using sync
Android version 298 is out!
Features
- Remote Sync Support
- Upgraded Sync protocol (Requires update of all devices)
- Casting dialog overhauled (more similar to Grayjay Desktop UI)
Improvements
- Overhauled search to have a shared interface
- FCast will now ping to verify if the connection is still good
- (mDNS) Casting, sync device discovery has improved (Utilizing NsdManager)
- Download now notifies you if you start a download on a metered connection (when disabled)
- QR Code scanner now shows a loader indicating its starting the camera
Fixes
- Fix crash edgecase when the main activity is closed within 5 sec of starting
- Fix error on some login scenarios (SLD, countries like Australia)
- Downloads will now check for unstarted downloads if not already started when entering downloads UI.
- Fix crash on subscriptions sync changes on creator tab.
- Subscriptions removals not always syncing properly
Grayjay desktop v6 has been released!
Features:
- Remote Sync Support
- Upgraded Sync protocol (Requires update of all devices)
- Experimental SubsExchange now available opt-in on desktop
- Add to Queue quick button on content feeds (Home/Subs/etc)
- Subtitles are now exported for download unmuxed streams (eg. Youtube)
- About page implemented
- Watchtime metrics setting now implemented (can be enabled in settings)
- Subscriptions channel details are now slowly updated in background, this may fix outdated images, names, and such overtime.
- Player now shows a thumbnail when playing audio-only media
- Playlist view now has filtering
- Playlists page now has filtering/sorting
- Setting to prioritise original audio now available in desktop
Improvements:
- Improved download stability
- Improved toast system, showing multiple at the same time
- Improved plugin compatibility for request modifiers (fixes some plugins)
- Improved threading
- Improved subscription group image handling
- Improved image loading
- Plugins are now checked for updates on enable if they weren't already
- Downloads are now cleaned up on startup (delete unused files)
- Plugin order is now properly enforced, and can now be changed by dragging on sources page
- Hiding unused settings
- Sidebar more responsive
- Improved ability to find required files for startup.
- Subscriptions page is now loaded more lazily to improve responsiveness api
- Casting disconnect now shows a reconnection dialog
- FCast disconnects now if the device stops responding to pings (make sure your receivers are updated)
- Upgraded to .NET 9
Fixes:
- Serialization fixes for sync
- Fix export open issue for exports with spaces (properly escape args)
- Fix plugin compatibility regarding content types that broke some plugins
- Fix issue where subs cache not shown while loading
- Playback tracking fix (wrong magnitude)
- Fixes to live chat, disabled livechat for some platforms (as it requires a bit more work, eg. Kick).
- Download page layout fixes
- Fix issue where plugin default settings were not properly being applied



