2.1.0
- Features:
- Auto-like videos and songs of channels where you have enabled this feature
- Changes / Fixes:
- Welcome menu is shown on YT too now
- Changed default settings for these features:
- Remember Song Time Sites: from
YTM only
to both sites
- Volume Slider Scroll Sensitivity: from
10%
to 4%
- Internal Changes:
- Removed
compareVersions()
and compareVersionArrays()
in favor of including the compare-versions
library
- Added advanced feature to change the startup timeout
- A blue logo is shown instead of the red BetterYTM logo when the script was compiled in development (preview) mode
- In development mode, missing configuration keys will now be set to their default value instead of potentially breaking the script
- Plugin Changes:
- Added new components:
createLongBtn()
to create a button with an icon and text (works either as normal or as a toggle button)
The design matches that of the subscribe button on YTM's channel pages, but the consistent class names make it easy to style it differently.
showToast()
to show a custom toast notification with a message string or element and duration
showIconToast()
to show a custom toast notification with a message string or element, icon and duration
createRipple()
to create a click ripple animation effect on a given element (experimental)
- Added new SelectorObserver instance
browseResponse
for pages like /channel/{id}
- Renamed event
bytm:initPlugins
to bytm:registerPlugins
to be more consistent
- Added events
bytm:featureInitStarted
- emitted when the feature initialization process starts
bytm:featureInitialized
- emitted every time a feature has been initialized and is passed the feature's identifier string
bytm:siteEvent:pathChanged
- emitted whenever the URL path (location.pathname
) changes
- Event
bytm:siteEvent:fullscreenToggled
will now only emit once per fullscreen change
- Changed
event
property returned by registerPlugin()
from nanoevents Emitter to NanoEmitter instance (see src/utils/NanoEmitter.ts
)
In practice this changes nothing, but it benefits from having the additional methods once()
for immediately unsubscribing from an event after it was emitted once and unsubscribeAll()
to remove all event listeners.
## 2.0.0
- **Added features:**
- Keep the volume synced between tabs
- Set an initial volume level once per tab
- Hide the cursor after a set amount of inactivity while hovering over the video
- Show a thumbnail overlay over the video element (or open the thumbnail in a new tab) automatically and/or manually, depending on configuration
- `?si` parameter is removed in YT's share menu too now
- Added an "above-queue" button to clear the currently playing queue / playlist
- Fix rendering issues when using HDR
- Disable the Dark Reader extension on both pages (because it messes up the layout)
- **Changes / Fixes:**
- Improved the config menu
- Created new toggle input (because checkboxes don't come close to looking as good)
- Added an `advanced mode` option that reveals a set of hidden settings, and lots of new settings that were previously not configurable
- Improved styling and layout of menu substantially, especially when using different languages
- Now an option to open the config menu is shown on YT too
- Made a bunch of features not require a page reload anymore
- Fixed tooltip that is set on the wrong element
- Fixed queue buttons not being shown when navigating with tab key
- Tons of accessibility improvements for screenreader users (feedback regarding this is strongly welcome!)
- **Internal Changes:**
- Improved script performance
- Implemented new [SelectorObserver](https://github.com/Sv443-Network/UserUtils#selectorobserver) instances to improve overall performance by quite a lot
- Implemented rising-edge debounce for SelectorObserver instances to massively improve responsiveness
- Added a cache to save lyrics in. Up to 1000 of the most listened to songs are saved throughout sessions for 30 days to save time and reduce server load.
- Implemented new class BytmDialog for less duplicate code, better maintainability, the ability to make more menus easier and for them to have better accessibility
- Expanded plugin interface
- Added function to register plugins (see [contributing guide](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#registerplugin))
All plugins that are not registered will have restricted access to the BetterYTM API (subject to change in the future).
- Plugins are now given access to the classes [`BytmDialog`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#bytmdialog) and [`NanoEmitter`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#nanoemitter), and the functions [`onInteraction()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#oninteraction), [`getThumbnailUrl()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#getthumbnailurl), [`getBestThumbnailUrl()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#getbestthumbnailurl) [`createHotkeyInput()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#createhotkeyinput), [`createToggleInput()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#createtoggleinput) and [`createCircularBtn()`](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#createcircularbtn)
- Added an experimental fuzzy filtering algorithm when fetching lyrics to eventually yield more accurate results (hidden behind advanced mode because it's far from perfect)
- Resource URL versioning was improved, so all versions from now on will still work in the future when the URLs potentially change
## 1.1.1
- **Features / Changes:**
- A new version notification dialog is now shown with the latest version's changes
- Menus are now only created when needed
- Moved dependencies to `
@require` to reduce script size
- Improved UX of the hotkey input in the config menu
- **Fixes:**
- Fixed fatal error when cookies / session storage was unavailable or disabled
- Fixed spacing around thumbnails in search results being inconsistent
- Fixed queue button container alignment
- Fixed Chinese translations
- **Internal Changes:**
- Removed React JSX support
- Small utility function refactoring
## 1.1.0
- **Features / Changes:**
- The userscript is now available in 9 languages! To submit or edit translations, please [view this guide](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#submitting-translations)
- Added an interface for user-created plugins ([see contributing guide for more info](https://github.com/Sv443/BetterYTM/blob/main/contributing.md#maining-a-plugin-that-interfaces-with-betterytm))
- Made site switch hotkey customizable
- Userscript will now show a welcome page after first install / update
- Feature to restore last song's time on page reload
- Made interval of arrow key skip configurable
- A hint is now sent to Dark Reader to disable itself (see [this](https://github.com/darkreader/darkreader/discussions/6868#discussioncomment-3109841))
- Made volume slider scroll sensitivity configurable
- Added details / help dialog to menu feature list
- Added queue buttons to all types of song list
- Added manual version check (can be disabled in config menu)
- **Fixes:**
- BetterYTM now uses a more reliable way to skip to a certain time
- Fixed resources not loading in Chrome
- Fixed album list spacing getting messed up by anchor improvements styling
- Fixed "Start at" option in share menu making tracking parameter reappear
- Fixed selector for player queue that was changed by a YTM update
- **Internal Changes:**
- The license of the source code has been changed from MIT to [AGPL-3.0](https://github.com/Sv443/BetterYTM/blob/main/LICENSE.txt)
- Migrated to the Rollup bundler
- Now multiple versions of the script are compiled for the different hosts (GitHub, GreasyFork, OpenUserJS) with slight compatibility fixes each
- Target branch can now be specified while compiling instead of being tied to the bundler mode
- Added support for React JSX
- Added support for external libraries through `
@require`
## 1.0.2
- **Changes:**
- Script is now published to OpenUserJS!
- Added an OpenUserJS link to the configuration menu
## 1.0.1
- **Changes:**
- Script is now published to GreasyFork!
- Added a GreasyFork link to the configuration menu
## 1.0.0
- **Added Features:**
- Added configuration menu to toggle and configure all features
- Added lyrics button to each song in the queue
- Added "remove from queue" button to each song in the queue
- Use number keys to skip to a specific point in the song
- Added feature to make volume slider bigger and volume control finer
- Added percentage label next to the volume slider & title on hover
- Improvements to link hitboxes & more links in general
- Permanent toast notifications can be automatically closed now
- Remove tracking parameter `&si` from links in the share menu
- Fix spacing issues throughout the site
- Added a button to scroll to the currently active song in the queue
- Added an easter egg to the watermark and config menu option :)
- **Changes & Fixes:**
- Now the lyrics button will directly link to the lyrics (using my API [geniURL](https://github.com/Sv443/geniURL))
- Video time is now kept when switching site on regular YT too
- Fixed compatibility with the new site design
- A loading indicator is shown while the lyrics are loading
- Images are now smaller and cached by the userscript extension
- Song names with hyphens are now resolved better for lyrics lookup
- Site switch with F9 will now keep the video time
- Moved lots of utility code to my new library [UserUtils](https://github.com/Sv443-Network/UserUtils)
## 0.2.0
- **Added Features:**
- Switch between YouTube and YT Music (with F9 by default)
- Search for song lyrics with new button in media controls
- Remove "Upgrade to YTM Premium" tab
0.1.0
- Features:
- Added support for arrow keys to skip forward or backward (currently only by fixed 10 second interval)