YouTube Music 8.40.54 validation

September 16, 2026 · View on GitHub

Ratings, repeat and queue clicks — 2026-09-15

Current local artifacts (not a published release):

  • APK: .local/music-8.40.54-controls.apk
  • APK SHA-256: bd91c5ffa15c667b75f3da49d3e04280674cb4e96ed375f15d326eb4337b8edf
  • Bundle: patches/build/libs/music-telemetry-0.1.1.rvp
  • Bundle SHA-256: 1f4eb1d1eed605a17dc5083c7285987882f036341bdf2e7e1846287d13b270ef
CheckResult
Kotlin patch tests35 passed, including 11 new repeat/selection tests
Exporter/receiver integration tests10 passed
Patch helper tests8 passed
Android strict compilation and instrumentationPassed, including new control/extraction fixtures
Actual supplied APK patching and hook auditAll eight telemetry patches plus GmsCore support passed
APK signature verificationv2 and v3 verified
Focused independent code reviewNo blockers

Existing like/dislike/remove-rating callbacks were revalidated with exact request targets distinct from player context. Repeat tests cover all three modes, unknown/disabled rejection, matched/stale playlist context and disabled telemetry. Queue selection tests cover precise 64-bit occurrence IDs, duplicate song IDs, selected-vs-current targets, rejected click branches, non-queue rows and extraction failures. HTTP integration verifies these actions are stored privately, retain metadata and deduplicate upload retries without affecting now-playing.

The receiver's existing repeatMode field is numeric: 0 off, 1 one, 2 all. Readable repeatModeName and repeatScope fields accompany it. Native enum ordinals differ and are deliberately not exported as receiver mode codes. Repeat hooks run after the two native UI control commands return; automatic repeat changes are excluded. Queue hooks run before dispatch only after the native Up Next click gate accepts the action; menu/remove/reorder and rejected callbacks are excluded. Request/command observation does not claim Google acceptance or audible playback. Signed-in live UI payloads remain unverified.

Queue and opened-playlist capture — 2026-09-15

Previously validated queue/playlist artifacts:

  • APK: .local/music-8.40.54-queue-playlists.apk
  • APK SHA-256: 673d6b076d7619d12477d6d0dd071048aae723e78d5725ccdccfe39884fe4426
  • Bundle: patches/build/libs/music-telemetry-0.1.1.rvp
  • Bundle SHA-256: d61b2c8da4a848407066d6df65830267749f08c08cfd2d5da314b0d24a091e7b
CheckResult
Kotlin patch tests24 passed
Exporter/receiver integration tests9 passed
Python patch helper tests8 passed
Companion Listen regression suite68 passed; SQLite connection ResourceWarnings emitted
Strict Android Java compilation-Xlint:all -Werror passed
Android instrumentationPassed; .local/android-queue-tests/result.txt
Actual supplied APK patchingAll six telemetry patches plus GmsCore support succeeded
Emitted DEX auditQueue capture, playlist open/bind, existing telemetry/settings hooks present
APK signature verificationv2 and v3 verified

The Android harness covers native queue extraction beyond the framework's 25-item window, ordered duplicates and unresolved positions, immutable capture, rich metadata normalization, chunk byte bounds, SQLite persistence/retries, disabled capture and destination resets. Playlist tests cover loaded rows, occurrence and browse IDs, header descriptions/text/artwork, playlist-entry deduplication, empty-queue reset, reopening, and sanitized extraction-failure diagnostics. Patch fixtures reject changed anchors and serialize the resulting DEX.

playback_queue captures the entire loaded native queue. Opened playlist_snapshot events capture the supported playlist detail renderer's loaded rows and carry complete: false; they do not force pagination or claim the full remote playlist. Unknown/opaque Elements fields are not decoded. The playlist_playback_started action matches a current playlist descriptor to a loaded track, with observation: "track_loaded", not proof of audible playback. Reassembly preserves partial-source scope separately from transport completeness.

The patch helper now selects the current 0.1.1 bundle instead of the stale 0.1.0 path. The companion ../listen/server/listen_server.py changes accept playback_queue privately and exclude it from now-playing. No production receiver was deployed. Signed-in live playlist UI/queue payloads and playback remain unverified; actual-app installation/settings evidence below belongs to the prior settings build. The current APK was built, audited and signature-verified locally.

Prior settings build — 2026-09-07

Validated locally on 2026-09-07. The current build configures telemetry through Settings → Listen telemetry. No collector URL or write token is embedded.

Previous release artifacts

  • Supplied input: com.google.android.apps.youtube.music_8.40.54-84054240_minAPI26(arm64-v8a)(nodpi)_apkmirror.com.apk
  • Input SHA-256: d5b44919a5cd5648b01e392115fe68b9569b1c7847f3cdf65b1ace1302d005d2
  • Release patch bundle: patches/build/libs/music-telemetry-0.1.1.rvp
  • Published release bundle SHA-256: e2d1b138eab46116128f4c865c9ff26e313e47d6d3663c7813598e75a2638072
  • Output: .local/music-8.40.54-listen.apk
  • Output SHA-256: 7c1de7fb6b279d839cbfbdc4330d13f855466930f3c4be405e918c913bbab4ab
  • Installed package: app.revanced.android.apps.youtube.music, version 8.40.54.

The release bundle includes all four local telemetry patches and the dependent native settings entry. The locally validated APK also includes official v6.0.0 GmsCore support; it was built with the functionally identical 0.1.0 patch code before public release metadata was added. Retain one APK signing identity for updates. APKs, downloads, private keys and screenshots are ignored by Git.

Settings validation

CheckResult
Kotlin injection and settings-resource tests17 passed
Python patch helper tests8 passed; credential flags rejected
Android UI/runtime harnessPassed
Actual APK patching and DEX auditAll selected patches and required settings hook passed
APK signingv2 and v3 verified
ARM64 emulator update installationSuccess
Native Music settings integrationAccount → Settings → Listen telemetry opens the form without sign-in
Default stateEmpty URL/token, masked token field, telemetry disabled
ART bytecode verificationSuccess
Former embedded configuration scanPrevious collector host, localhost URL and disposable token absent from all APK DEX

The Android harness exercises the actual settings form and configuration files, with an in-memory HTTPS transport substituted for networking. It verifies:

  • Invalid URL/header input is rejected before persistence.
  • Saved configuration drives the uploader without rebuilding or restarting.
  • A rejected request retries with a rotated token and the same event ID.
  • Token rotation preserves the current song/session for subsequent progress.
  • Disabled telemetry does not capture or upload events.
  • Changing destinations deletes the previous server's backlog.
  • Runtime initialization restores saved configuration, and credentials can be cleared.
  • Existing SQLite durability, queue bounds, callback payload, rating, player and carousel checks continue to pass.

Harness evidence: .local/android-queue-tests/result.txt. Actual Music settings entry screenshot: .local/music-settings-entry.png; final form accessibility evidence: .local/music-settings-form.xml. The form prevents screen capture and masks the token. Configuration lives in the app's private no-backup directory.

The 8 exporter/integration and 62 companion Listen regression tests passed before this settings change; their source was not changed or retested for this update. No production token was used, no Google account was signed in, and no receiver was deployed during these checks.

Evidence boundaries

  • Rating hooks read the request's actual target video ID, independently of the current player ID. They observe request serialization, not Google's acceptance; retries may cause repeated observations with distinct event IDs.
  • In-app next/previous hooks occur immediately before accepted player commands in both traced player-control implementations. They do not infer skips from track changes.
  • Carousel hooks capture a supported two-row item callback, its WatchEndpoint video ID and the visible section heading. Fixtures include Quick picks; a signed-in server-provided Quick picks feed has not been exercised. Other renderers and selection gestures may need additional hooks.
  • Media-session hooks observe framework dispatch, not a proven headset or UI source.
  • Authentication and live playback, real rating requests, account playlist pagination, production HTTP delivery and deployment remain untested.
  • Automated playlist export is a separate authenticated server-side command; there is no claim of complete live radio/Quick Play queue export from the app.

Base bundle provenance

The official v6.0.0 bundle has SHA-256 3d3b17720f0a3a40de850e4f41dea8e3628686dfd5aaca5ae76aedd6a0fbb29f. scripts/bootstrap_base.py verifies the pinned checksum and detached signature, including the signing subkey's binding to pinned ReVanced root A7835DFCACA14BDA3CD6EDD3633C6920FBE6A2FF. The signature verifies locally. The mirrored release's GitHub Sigstore build attestation was unavailable; this build does not claim that attestation was verified. Source and transport links are in the README and bootstrap script.