- Added features:
- π΅ Automatically scroll to the active song in the queue on page load or video change
- π΅ Make the player container use all available space on /watch
- New configurable hotkeys:
- π΅ Skip forwards/backwards by a frame (. / ,)
- Like/dislike video/song (ShiftL / ShiftD)
- π΅ Open lyrics of current song (O)
- Skip to last remembered video/song time (AltR)
- Reconfigurable skip to beginning & previous/next video/song (ShiftN / ShiftP, disabled by default)
- Reconfigurable play/pause (Pause, disabled by default)
- Changes and improvements:
- Song/video volume will now be restored after BYTM reloads the tab by using the new common
reloadTab() function
- Added an adornment icon to identify which features work only on YTM, versus on both sites
- π΅ Thumbnail overlay improvements:
- Overlay now prefers to use a high res album artwork from Apple Music if the current song is in an album
- Fixed image not being updated while in fullscreen
- π΅ Made above-queue button container's sticky positioning toggleable with a feature
- Made the resolution of the browser-preferred locale more reliable
- Implemented a more powerful translation system
- Removed the thumbnail overlay fitting option in favor of automatically switching based on the media type
- Fixes:
- Sped up installation time by loading all resources except stylesheets via regular
fetch() and the external CDN instead of using @resource directives
- Bumped z-index of dialog elements to display them correctly after a recent page update
- Fixed white font color for BYTM config option on YT in light theme
- π΅ Fixed volume label not being fully hidden along with the slider
- Config menu will now be correctly set as inert when a BytmDialog is opened over top
- π΅ Fixed "remove from queue" button sometimes deleting playlist entries instead of queue items
Click to expand internal and plugin changes
- Plugin Changes:
- See contributing guide for full documentation
- API changes:
- β οΈ BREAKING: Renamed
createRipple()'s speed prop values:
- From
faster to fastest
- From
slower to slowest
- β οΈ BREAKING: Made
hasKey() and hasKeyFor() return a Promise to load the given locale if it's not found
- β οΈ π΅ BREAKING: Removed
sideBarMini observer instance
- Made
getCurrentMediaType() return "video" on YT instead of throwing an error
- Added property
additionalProps to the RippleProps argument in createRipple(), to assign extra props to the created or passed ripple element
- New API functions:
- Added
reloadTab() as a better way to reload the page by keeping the same video time and volume and disabling BYTM features like initial tab volume
- Added
getVideoElement() to get the video element (if available) on the current page, on both YT and YTM
- Added
getVideoSelector() to get the CSS selector for the video element on the current page, on both YT and YTM
- Added
getDefaultFeatures() (callable without registering the plugin) to return the default / fallback feature configuration object
- Added
getLikeDislikeBtns() to return the like and dislike buttons on both domains, including the like/dislike state
- Added
isIgnoredInputElement() to check if the given or currently focused element is an input element, upon which all other keypress event listeners should be ignored
- Added
fetchITunesAlbumInfo() to fetch album info objects from the Apple Music / iTunes API, given an artist and album name
- New API constants:
- Added
initialParams (URLSearchParams), the search params at the initial point of loading BYTM
- Added
sessionStorageAvailable (boolean), whether the browser supports sessionStorage
- Internal Changes:
- Improved asset caching by using JSDelivr instead of GitHub as a CDN
- Fixed problems with the translation system by implementing UserUtils v9's new system
- Added JSON schemas for all JSON files in
assets

See pull request for more info