Skip to content

Instant parallel race with lossless priority and list-time videoId pinning - #283

Merged
ajisth69 merged 3 commits into
mainfrom
feat/instant-playback-race
Oct 9, 2026
Merged

ajisth69 merged 3 commits into
mainfrom
feat/instant-playback-race

Conversation

@ajisth69

@ajisth69 ajisth69 commented Oct 8, 2026

Copy link
Copy Markdown
Member

Tap-to-play goes limusic-style: pure-parallel fast path (stagger 0) as stage 0, lossless-first via 800ms head start with instant YT fallback, auditioned background hot-swap untouched. Known videoIds never re-search (fail loud, no substitution); ids pinned at list time across reco/search/radio/home/playlists plus one-shot backfill; 500ms first-frame buffer. Matching is the 4.2.3/4.2.4 hybrid (60/35, no second chance) with script-aware multilingual normalization; feed Heavy Rotation gets taste-weighted jitter. Manifest/MPD pipeline untouched. Unbuilt: run :app:testDebugUnitTest and a device pass before merging.

…-time videoId pinning

- limusic-style fast path goes pure-parallel (stagger 0), stage 0
- lossless keeps first priority via 800ms head start, YT instant fallback,
  auditioned background hot-swap unchanged
- tap never searches known videoIds; fail loud instead of substituting
- pin ids at list time everywhere (reco, search, radio, home, playlists)
  plus one-shot backfill; buffer 500ms first frame
- 4.2.3/4.2.4 hybrid match gate (60/35, no second chance), script-aware
  multilingual matching, feed heavy-rotation taste jitter
…g test

- NON_WORD now allows marks: Latin-only diacritic stripping left Hindi
  matras and Thai vowels to be nuked into spaces by the word splitter
- keepsPinnedTracksWithoutNetwork uses a bare video id: android.net.Uri
  throws on plain JVM unit tests, misclassifying pinned rows
Resolve conflicts in InnerTubeMusicApi.kt and MusicPlayer.kt. Main's playback resolver (#285) landed after this branch forked and deliberately supersedes its parallel fast-path race (single POST per client, sequential, with a whole-path budget and maxAttempts=1), the lossless head-start race in resolveRemoteTrackAudioStream (lossless now promotes via background upgrade), and focus-aware buffer durations. Keep main's implementation for those paths; retain this branch's non-conflicting changes: findBestMatch hybrid gate and stricter stream-upgrade/audition duration guards.
@ajisth69
ajisth69 merged commit 84ba3d6 into main Oct 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant