Releases: AndyP2/yt-levelr
Release list
v1.3.5
v1.3.5 — 2026-05-30
-
Use orhun/git-cliff-action@v4 instead of v3
-
Use git-cliff on github release to generate changelog.md and release notes
-
Code style
-
Add comment for startup sequence: four cases, do not simplify without reading CLAUDE.md
-
Fix content script not injecting on direct page load
Switch run_at from document_idle to document_start so the script injects before YouTube's SPA initialisation fires yt-navigate-finish and yt-page-data-updated. Add a DOMContentLoaded fallback for the document_start case where the DOM is not yet ready, falling back to a direct call on re-injection into a live page.
Previously, temporary extension installs would race the tab opening and lose, leaving the script uninjected until the popup was clicked.
- Fix AudioContext not starting until popup opened
AudioContext created on autoplay was left suspended due to browser autoplay policy. Add immediate resume attempt after construction plus click/keydown gesture listeners as fallback, so processing starts on first user interaction with the page rather than requiring the popup.
- Coding style fixes
remove unused pollInterval variable
wrap long line
naked if clauses have curly brackets and new lines
- Fix: add timeout and error reporting to waitForVideo
Previously waitForVideo polled indefinitely with no exit condition, so if YouTube's DOM never produced a
Add a 10s timeout that rejects with a descriptive error, and add a catch in onNewVideo to surface it via console.warn rather than swallowing it.
- Fix: replace URL-guard navigation detection with maybeStartForCurrentPage
The previous approach used a shared currentUrl variable updated by both
yt-navigate-finish and yt-page-data-updated handlers. When yt-navigate-finish fired before location.href had updated (a known YouTube SPA race), it set currentUrl to the stale home URL, then the subsequent yt-page-data-updated guard suppressed onNewVideo() because the URL appeared unchanged.
Replace with a dedicated lastInitiatedUrl flag and a single
maybeStartForCurrentPage() function shared by both listeners. This checks
location.pathname directly so onNewVideo() only fires on watch/shorts pages,
and the dedup guard only blocks true double-fires for the same URL. Removes
the now-redundant currentUrl variable.
Fixes autostart failure when navigating to a video from the YouTube home page in a new tab.
-
Manifest to 1.3.5
-
Document files for llm usage
-
Exclude markdown docs from build - not needed at runtime
-
Fix intermittent startup on direct page load and Shorts
yt-navigate-finish can fire before document_idle injection on a direct page load, causing the content script to miss the initial navigation event. Add a yt-page-data-updated listener as a fallback; it fires later in the page lifecycle and is caught reliably. The existing href guard prevents double-initialisation if both events fire.
Also extend the initial pathname check to cover /shorts/ in addition to /watch.
v1.3.4
fixed issue with popup not finding the current window on firefox
Full Changelog: v1.3.3...v1.3.4
v1.3.3
v1.3.2
analyse the input of the gain adjustment stage, not the output, to avoid applying the correction twice
Full Changelog: v1.3.1...v1.3.2
v1.3.1
v1.3.0
This release changes the strategy to gradually increase the permitted adjustment range as confidence builds, instead of doing it in steps.
Gain limits start narrow and widen linearly until full adjustment range is available at 30s, allowing the algorithm to make small initial corrections before committing to its final decision.
Full Changelog: v1.2.2...v1.3.0
v1.2.2
v1.2.1
v1.2.0
Now works for Chrome as well as Firefox
Full Changelog: v1.1.2...v1.2.0
v1.1.2
This release makes the gain calculation and display independent of the volume control, and treats mute or <5% volume as paused.
Some error handling and logging added, and polling reduced to ease load on the system.
Full Changelog: v1.1.1...v1.1.2