LibreTube
com.github.libretube
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Aug 20, 2026 32.1> [!NOTE] > ## Release Highlights > This release fixes the recent video playback issues and that playlists contain no videos. > > To overcome the video playback issues, we implemented YouTube's new, custom streaming protocol (called SABR). YouTube started to progressively remove support for traditional streaming protocols, so LibreTube's support for the new protocol should make video playback much more reliable. > > Apart from this, the release includes support for podcasts and courses tabs on channels, a "resume all" option for downloads, as well as many minor bug fixes and small improvements. ### :bug: Bug Fixes - [`a74565b`](https://github.com/libre-tube/LibreTube/commit/a74565bac4666410dc987db88c8d5bc33c66d839) - fullscreen button hidden whenever auto-fullscreen is enabled *(commit by @prefixFelix)* - [`a2b30e1`](https://github.com/libre-tube/LibreTube/commit/a2b30e17a696e0326c5686c6df3c3804beba6c9a) - database migration crashes app on Android 13 and below *(commit by @Bnyro)*
More…
- [`1f21b72`](https://github.com/libre-tube/LibreTube/commit/1f21b728fcdc4b5409c9a4ab811b2f05d592610d) - navigation bar order setting stopped working *(commit by @Bnyro)* ### :wrench: Chores - [`6a861f4`](https://github.com/libre-tube/LibreTube/commit/6a861f4282c3de73b840793365d8ac7114b5a80f) - bump version to v32.1 *(commit by @Bnyro)* - Aug 20, 2026 32.0> [!NOTE] > ## Release Highlights > This release fixes the recent video playback issues and that playlists contain no videos. > > To overcome the video playback issues, we implemented YouTube's new, custom streaming protocol (called SABR). YouTube started to progressively remove support for traditional streaming protocols, so LibreTube's support for the new protocol should make video playback much more reliable. > > Apart from this, the release includes support for podcasts and courses tabs on channels, a "resume all" option for downloads, as well as many minor bug fixes and small improvements. ### :sparkles: New Features - [`dde430c`](https://github.com/libre-tube/LibreTube/commit/dde430ce844524816acf76d44480f205bdaf91d2) - use more user-friendly terms for audio tracks *(commit by @FineFindus)* - [`151098f`](https://github.com/libre-tube/LibreTube/commit/151098f052c91a3a9ddeaa4f3aa1931a7d4fc45b) - sort available audio tracks by type *(commit by @FineFindus)*
More…
- [`fca9b83`](https://github.com/libre-tube/LibreTube/commit/fca9b834f78b0ab7778101a4125bee5243eee768) - retrieve SABR streaming data from extractor *(commit by @FineFindus)* - [`1875129`](https://github.com/libre-tube/LibreTube/commit/18751295aefc1e2a103d700a2c70a48c0be84199) - **sabr**: add protobuf files *(commit by @FineFindus)* - [`07169aa`](https://github.com/libre-tube/LibreTube/commit/07169aaf3f481284ed87ff8d0b47d421319fb16f) - **sabr**: add UMP parser *(commit by @FineFindus)* - [`8faf98a`](https://github.com/libre-tube/LibreTube/commit/8faf98a00280fc2a64d5ac97e636845558aa8945) - **sabr**: add SABR client *(commit by @FineFindus)* - [`203c864`](https://github.com/libre-tube/LibreTube/commit/203c86458c2ab508d62c9190281416621c6f01b8) - **sabr**: add Representation *(commit by @FineFindus)* - [`27b419f`](https://github.com/libre-tube/LibreTube/commit/27b419f9f7091e63575182d512cfdd2c839468b1) - **sabr**: add AdaptationSet *(commit by @FineFindus)* - [`8c3f34d`](https://github.com/libre-tube/LibreTube/commit/8c3f34d68dbc4901e02fa7759e984bed678abb30) - **sabr**: add manifest *(commit by @FineFindus)* - [`778f4dc`](https://github.com/libre-tube/LibreTube/commit/778f4dcf67fa4f3e9faa770ea0572a33b09dfc2d) - **sabr**: store and re-use sabr exception *(commit by @FineFindus)* - [`d00105c`](https://github.com/libre-tube/LibreTube/commit/d00105c9ccf1f09670c405056027e33761ca5c80) - **sabr**: support retrieving DRC audio *(commit by @FineFindus)* - [`80dbae9`](https://github.com/libre-tube/LibreTube/commit/80dbae9a7a3d22431c46dc2b3f0b961f36f31aec) - **sabr**: implement data source *(commit by @FineFindus)* - [`746078f`](https://github.com/libre-tube/LibreTube/commit/746078f39e86e9375541e206f4022b263604ed19) - **sabr**: implement support for poTokens *(commit by @FineFindus)* - [`18e8796`](https://github.com/libre-tube/LibreTube/commit/18e879628a1c58f1c1c779c591523f080299c71e) - **sabr**: only log unhandled UMP parts *(commit by @FineFindus)* - [`8214f0f`](https://github.com/libre-tube/LibreTube/commit/8214f0f45f1399930d82ccc8108c382b198b1e12) - **sabr**: build and send BufferedRanges *(commit by @FineFindus)* - [`d7b24c5`](https://github.com/libre-tube/LibreTube/commit/d7b24c59e9c464be15e95d9f06466cf46a263ad5) - **sabr**: handle formats supporting voice boost *(commit by @FineFindus)* - [`74b44fb`](https://github.com/libre-tube/LibreTube/commit/74b44fb7f1b79ccb4e0405729fc07be0b4bef3be) - **sabr**: allow discontinuous playback *(commit by @FineFindus)* - [`1c26249`](https://github.com/libre-tube/LibreTube/commit/1c26249fc97554519af0236dc072e62d2b33f1a4) - **sabr**: synchronize buffered segments with chunksource queue *(commit by @FineFindus)* - [`c5deccb`](https://github.com/libre-tube/LibreTube/commit/c5deccbe98541d3150adc19b4a03f38be2a5ecb1) - **sabr**: store init segment *(commit by @FineFindus)* - [`d623543`](https://github.com/libre-tube/LibreTube/commit/d62354373a7fffbd1ebd1f2fdc9c1b37940d7ec9) - **sabr**: assert that we never load segments past the end of stream *(commit by @FineFindus)* - [`932b721`](https://github.com/libre-tube/LibreTube/commit/932b721ad320d88b0ae6f122294bf16647628fdf) - **sabr**: set `Origin` and `Referer` header *(commit by @FineFindus)* - [`08bef5e`](https://github.com/libre-tube/LibreTube/commit/08bef5e333607f745264aebc14a872e3a57dcd96) - **sabr**: set `elapsedWallTimeMs` *(commit by @FineFindus)* - [`8a50eca`](https://github.com/libre-tube/LibreTube/commit/8a50eca9e94435cd972b3b8b19e57370b36c2132) - **sabr**: avoid retrieving segments from buffered segments *(commit by @FineFindus)* - [`467a3ac`](https://github.com/libre-tube/LibreTube/commit/467a3accdcadcbfbea789dc5c772cfd58a53e75a) - **sabr**: inform server about last seek timestamp *(commit by @FineFindus)* - [`0a20a77`](https://github.com/libre-tube/LibreTube/commit/0a20a77a78d2ec605fdcb9501bd48b360bbbaba9) - **sabr**: explicitly handle player reload request *(commit by @FineFindus)* - [`684c3ea`](https://github.com/libre-tube/LibreTube/commit/684c3ea094f457e8ac267e918801d8f582186994) - **sabr**: inform server about manual format selection *(commit by @FineFindus)* - [`eda9cfb`](https://github.com/libre-tube/LibreTube/commit/eda9cfbb9a2716899547e717733b8bc7d1ac1181) - **sabr**: informat server about estimated bandwidth *(commit by @FineFindus)* - [`254e205`](https://github.com/libre-tube/LibreTube/commit/254e2054a2e7660820a447d882c5785b6469dd69) - **sabr**: experimentally cache generated PoToken *(commit by @FineFindus)* - [`fc1ce48`](https://github.com/libre-tube/LibreTube/commit/fc1ce481439fb877ed79fb5747c459312dee102c) - **SABR**: skip re-selecting already selected format *(commit by @FineFindus)* - [`1f933d1`](https://github.com/libre-tube/LibreTube/commit/1f933d19675fd7bfd7d5c03073140d90db70dd0f) - **SABR**: clear formats on media refresh *(commit by @FineFindus)* - [`55122ea`](https://github.com/libre-tube/LibreTube/commit/55122ea9de3a4d252b16c0d1143b2a4e3a6f03c3) - **SABR**: support external subtitles *(commit by @FineFindus)* - [`0203dbe`](https://github.com/libre-tube/LibreTube/commit/0203dbee809edd44c51490f6bd993b7a6ff06b32) - **SABR**: enable lazy-loading of subtitle streams *(commit by @FineFindus)* - [`86b2f68`](https://github.com/libre-tube/LibreTube/commit/86b2f681330edde05e14adf3ac9cb373a84462fa) - **SABR**: extract language from Xtags *(commit by @FineFindus)* - [`7fe7f75`](https://github.com/libre-tube/LibreTube/commit/7fe7f7537b73f48d7467447700d3f9f6c34aceb4) - implement "Resume All" functionality for downloads *(commit by @bermount)* - [`3708d9c`](https://github.com/libre-tube/LibreTube/commit/3708d9c6c83b0e7af1997959d7ae89ce27a1d777) - **Comments**: keep scroll position when loading new data *(commit by @FineFindus)* - [`e8599cb`](https://github.com/libre-tube/LibreTube/commit/e8599cbafe9f56de8b630c59670e235a2ca260c0) - **Comments**: add contentDescription/tooltipText to icons *(commit by @FineFindus)* - [`54d8e5c`](https://github.com/libre-tube/LibreTube/commit/54d8e5c23e15205a27298d4757f81ed216dd1054) - **SABR**: log error when failing to fetch data *(commit by @FineFindus)* - [`b530e80`](https://github.com/libre-tube/LibreTube/commit/b530e805cb5fa8f235639a17ff52eec2ae13fca7) - **SABR**: use web client version from NewPipeExtractor *(commit by @FineFindus)* - [`f7222c5`](https://github.com/libre-tube/LibreTube/commit/f7222c57fc354437b3d028b4ebb880b3b0cade08) - **downloads**: add support for downloading SABR streams *(commit by @Bnyro)* - [`d519e11`](https://github.com/libre-tube/LibreTube/commit/d519e11503141202fad45eba5d940d3555161973) - make the whole item list clickable in `AddChannelToGroupSheet` *(commit by @dhanuarf)* - [`fe86af6`](https://github.com/libre-tube/LibreTube/commit/fe86af65f971a04d5ed2e3f20d39a45d9f9bfa85) - **Channel**: add support for `Podcasts` and `Courses` tabs *(commit by @FineFindus)* - [`70dd800`](https://github.com/libre-tube/LibreTube/commit/70dd800a113ed6be45cd4da617b4d468b6498823) - **SABR**: use playerTime to request new segments *(commit by @FineFindus)* - [`86d52f7`](https://github.com/libre-tube/LibreTube/commit/86d52f75700064c220d12992d659523d8c1355c3) - **SABR**: add additional properties to playback request *(commit by @FineFindus)* - [`6b255dd`](https://github.com/libre-tube/LibreTube/commit/6b255ddca66441f20851aa7ad9abed5cc6ca3aa6) - **SABR**: add request number to request URL *(commit by @FineFindus)* - [`ad9df07`](https://github.com/libre-tube/LibreTube/commit/ad9df07ca98742faaa534855db69229e417f5deb) - **SABR**: use visionOS client for playback requests *(commit by @FineFindus)* - [`c860f39`](https://github.com/libre-tube/LibreTube/commit/c860f39daa6b66dfdd75acf4113acaa195f53bca) - show seek increment in pip forward/rewind actions *(commit by @Bnyro)* ### :bug: Bug Fixes - [`9857d81`](https://github.com/libre-tube/LibreTube/commit/9857d81a30dd325b92c6f2df5330eb3990f06d4a) - always display selected audio track *(commit by @FineFindus)* - [`3fe9402`](https://github.com/libre-tube/LibreTube/commit/3fe9402c3671343ad86eef2557f3d78847d9a75a) - correctly set audio track language *(commit by @FineFindus)* - [`de0ac46`](https://github.com/libre-tube/LibreTube/commit/de0ac46c7f95ed1a8f7e32495ded4b0f41926a1e) - display country for multiple audio tracks of the same language *(commit by @FineFindus)* - [`cdac784`](https://github.com/libre-tube/LibreTube/commit/cdac7848be73359181fc70c2a6f7b36bfa965154) - correctly set selected audio track *(commit by @FineFindus)* - [`15add6e`](https://github.com/libre-tube/LibreTube/commit/15add6e8d7db42f3a3721a0364d1ca356b74b7d7) - **sabr**: correctly set null xtags *(commit by @FineFindus)* - [`8b2a678`](https://github.com/libre-tube/LibreTube/commit/8b2a678b76ffd728e3e2f9babd9bfbd071927797) - **sabr**: correctly retrieve new media segments *(commit by @FineFindus)* - [`ca9bb90`](https://github.com/libre-tube/LibreTube/commit/ca9bb905a491f90b138c41528fc959a493d69085) - remove unused import *(commit by @FineFindus)* - [`649c9f4`](https://github.com/libre-tube/LibreTube/commit/649c9f45c57d422bffb425c54cc85417371d038b) - **sabr**: disable SABR for live-streams *(commit by @FineFindus)* - [`e3f6a83`](https://github.com/libre-tube/LibreTube/commit/e3f6a83b3606a63b3d6613613660d1ac380c65f8) - **sabr**: use buffered and downloaded segments to build buffered ranges *(commit by @FineFindus)* - [`d0b8f79`](https://github.com/libre-tube/LibreTube/commit/d0b8f799b3250c888dcda2d04ecf3d298aab5885) - **sabr**: use segment start time to request *(commit by @FineFindus)* - [`2b6abed`](https://github.com/libre-tube/LibreTube/commit/2b6abede1fb550210b261da82630608760ecd252) - **sabr**: correctly set xtags from extractor *(commit by @FineFindus)* - [`9046da6`](https://github.com/libre-tube/LibreTube/commit/9046da67e829b884bee81260ae76dd73b89767cc) - **sabr**: use approximate stream duration milliseconds *(commit by @FineFindus)* - [`cf03cd4`](https://github.com/libre-tube/LibreTube/commit/cf03cd428114388cbb149f6d1cb14d5fbf4708e3) - **sabr**: use correct segment number for media segments *(commit by @FineFindus)* - [`8249236`](https://github.com/libre-tube/LibreTube/commit/8249236bd24cba7e86956a7fe93d46359020ba61) - **sabr**: avoid unnecessary request for init segment *(commit by @FineFindus)* - [`9077796`](https://github.com/libre-tube/LibreTube/commit/9077796c70d1c7fa121e4c75bc4d7f34b583d2ef) - **sabr**: avoid storing media data for buffered segments *(commit by @FineFindus)* - [`238141c`](https://github.com/libre-tube/LibreTube/commit/238141c20d76c52468871777e6438c4bf94e28a9) - **sabr**: clear unbuffered segments when requesting new segments *(commit by @FineFindus)* - [`508b5a4`](https://github.com/libre-tube/LibreTube/commit/508b5a4cde47267ad1dbfe9dd4c000f7fb577d0b) - **sabr**: clear previous format when switching formats *(commit by @FineFindus)* - [`f454482`](https://github.com/libre-tube/LibreTube/commit/f454482bfd13d137b80f4114832ecfe021f995fb) - **SABR**: update selected track when track selection changes *(commit by @FineFindus)* - [`7f5b423`](https://github.com/libre-tube/LibreTube/commit/7f5b42316148e720d7f224c0123e7f108953edc3) - **SABR**: only update selected format for the next request *(commit by @FineFindus)* - [`e3e90bf`](https://github.com/libre-tube/LibreTube/commit/e3e90bf532582a384eac3b71b62813533fb01f3d) - update playlist info after removing a video *(commit by @FirthR5)* - [`3de36d2`](https://github.com/libre-tube/LibreTube/commit/3de36d2d4045512f071d9107bc29349798a9b0ad) - isFinished annotation on DownloadItem *(commit by @FirthR5)* - [`b239fd8`](https://github.com/libre-tube/LibreTube/commit/b239fd808e4e90359b43cc0b75da78359bfa0339) - default resolution not properly set *(commit by @dhanuarf)* - [`5214127`](https://github.com/libre-tube/LibreTube/commit/5214127f2d63c1b9101a370c7efa5c37ea1876b1) - default resolution not applied when switching to next video *(commit by @dhanuarf)* - [`b1ebe8a`](https://github.com/libre-tube/LibreTube/commit/b1ebe8a11fd5ee798510e942baa6211c2355a51a) - **TextUtils**: correctly format weeks with DST transitions *(commit by @FineFindus)* - [`745c594`](https://github.com/libre-tube/LibreTube/commit/745c594188865ba1ffd4aaa1cf9ccb777f6e79a3) - "ungrouped" subscription group count doesn't update after modifying groups *(PR #8551 by @Phoenix1808)* - :arrow_lower_right: *fixes issue #8428 opened by @abanksss* - [`f81e375`](https://github.com/libre-tube/LibreTube/commit/f81e375f94a30eb2022fcac1c19f1659830a931a) - **downloads**: nothing here indicator shown even if there are videos and playlists not clickable *(commit by @Bnyro)* - [`8755780`](https://github.com/libre-tube/LibreTube/commit/87557805ba273913cda355b27a18348a83a38a5c) - **Comments**: reset comment count when resetting comments *(commit by @FineFindus)* - [`345b6b9`](https://github.com/libre-tube/LibreTube/commit/345b6b971b039d5319d9f85f39d0bcac26586e63) - crash when navigating through multiple channels due to stack overflow *(PR #8562 by @YasinMoridi)* - :arrow_lower_right: *fixes issue #8522 opened by @kralupus* - [`9e080d1`](https://github.com/libre-tube/LibreTube/commit/9e080d109c762e4b0e2f116ede1d4917f600bd86) - fragments overlap each other due to transparent fragment backgrounds *(PR #8566 by @YasinMoridi)* - :arrow_lower_right: *fixes issue #8558 opened by @7lilnewbie* - [`9dcd5ec`](https://github.com/libre-tube/LibreTube/commit/9dcd5ec6f150e42dd87e691a9f297bb68cabd5fe) - correct `isFinished` logic in `DownloadItem` *(PR #8590 by @bermount)* - [`681c7a6`](https://github.com/libre-tube/LibreTube/commit/681c7a6f965122671070e53c13db87b006b9364f) - consider uploader name when searching in private playlists *(PR #8597 by @nuturs)* - [`98d70d8`](https://github.com/libre-tube/LibreTube/commit/98d70d80d390bb39bf7bb69f046049cd09aba6cc) - crash when showing snackbar on older android version *(commit by @dhanuarf)* - [`5709862`](https://github.com/libre-tube/LibreTube/commit/5709862132c05a930d276ba0baed4bfbdaa3a877) - keyboard shortcuts trigger even when typing in searchbar *(commit by @Bnyro)* - [`a5f94fa`](https://github.com/libre-tube/LibreTube/commit/a5f94faa59f75760212e0f735dd2315d8661deb4) - downloads UI when pausing and resuming downloads *(commit by @Bnyro)* - [`2a1a4ec`](https://github.com/libre-tube/LibreTube/commit/2a1a4ecb69fe6509c1580a6e3fa8fd0b01ed5db8) - don't show sponsorblock skip button in PiP mode *(commit by @Bnyro)* - [`29a5eeb`](https://github.com/libre-tube/LibreTube/commit/29a5eeb65de8382021f9161dab64f90524b53e50) - crash when destroying activity while PiP params update *(PR #8646 by @xhon-pelushi)* - :arrow_lower_right: *fixes issue #8636 opened by @tkohlmeier* - [`04ab2c2`](https://github.com/libre-tube/LibreTube/commit/04ab2c2320791fc4a9010e3deba212bb60660830) - **DASH**: only use non-SABR streams *(commit by @FineFindus)* ### :zap: Performance Improvements - [`c192d63`](https://github.com/libre-tube/LibreTube/commit/c192d63d2bb6c5c64aab16e4f1ee4691d62c9749) - **sabr**: avoid copying segment data *(commit by @FineFindus)* ### :recycle: Refactors - [`410d76f`](https://github.com/libre-tube/LibreTube/commit/410d76fe48c15bc4673467e759a2ee5fc98102b6) - **sabr**: use verbose instead of debug logging *(commit by @FineFindus)* - [`c426bb4`](https://github.com/libre-tube/LibreTube/commit/c426bb46bd7016a7b3165d92346986cf4fa47874) - **sabr**: convert sabr client to singleton object *(commit by @FineFindus)* - [`38e758e`](https://github.com/libre-tube/LibreTube/commit/38e758e59679741bce267879aa8bff5604f2efb0) - **sabr**: use representations to retrieve media data *(commit by @FineFindus)* - [`ebc2b60`](https://github.com/libre-tube/LibreTube/commit/ebc2b6036c6650ad484783bb38ffd61e500ffa90) - **sabr**: port to Kotlin *(commit by @FineFindus)* - [`3a457fd`](https://github.com/libre-tube/LibreTube/commit/3a457fdd857af95cc09172b0a48a2967d452c778) - **sabr**: remove JVM field tags *(commit by @FineFindus)* - [`1d5ef84`](https://github.com/libre-tube/LibreTube/commit/1d5ef84787df40bb0b2037ac1f14c9895fb67fa8) - **sabr**: remove unused constructors *(commit by @FineFindus)* - [`1518041`](https://github.com/libre-tube/LibreTube/commit/1518041f1dbefde09bf9cc9ffc3f616fa95add68) - **sabr**: extract parsing and handling of xtags *(commit by @FineFindus)* - [`d9b9c45`](https://github.com/libre-tube/LibreTube/commit/d9b9c45f14dea7d462b9f866d305740465ef47ac) - **sabr/xtags**: remove unnecessary field *(commit by @FineFindus)* - [`233568d`](https://github.com/libre-tube/LibreTube/commit/233568d08b913abc6923e27ac785dfa162fe09f0) - **sabr**: mark Representation formatId as non-null *(commit by @FineFindus)* - [`ab1df3e`](https://github.com/libre-tube/LibreTube/commit/ab1df3edc2bd335cb76b1c3aad47a1b594494ccc) - **sabr**: mark `RepresentationHolder` as data class *(commit by @FineFindus)* - [`e0b3c34`](https://github.com/libre-tube/LibreTube/commit/e0b3c34e5e40fe09fdf4d9acd10ad724e898b017) - **sabr**: only handle a single segment per chunk *(commit by @FineFindus)* - [`174b40c`](https://github.com/libre-tube/LibreTube/commit/174b40c491d3e79480d8f5423b614470a1d528dd) - **sabr**: use idiomatic continue on null selection *(commit by @FineFindus)* - [`55012ae`](https://github.com/libre-tube/LibreTube/commit/55012ae6f6b681b9605e6fb4279ec4b0036df3eb) - **sabr**: remove unnecessary null-safety assertion *(commit by @FineFindus)* - [`04ca058`](https://github.com/libre-tube/LibreTube/commit/04ca0581d4754909322f36fcc70aba1f6f399a5b) - **sabr**: extract common format selection code *(commit by @FineFindus)* - [`7cfc431`](https://github.com/libre-tube/LibreTube/commit/7cfc431d12986e1baf7dc95d900f635a2add4b0c) - **sabr**: remove unused `poToken` from manifest *(commit by @FineFindus)* - [`af313b8`](https://github.com/libre-tube/LibreTube/commit/af313b86ef20a8eaadbe4f5561f25a71e9b885fa) - **sabr**: cleanup *(commit by @FineFindus)* - [`ddd4aaa`](https://github.com/libre-tube/LibreTube/commit/ddd4aaad2064268aa9434d27432302291139ad91) - **sabr**: create `FormatId` for `Representation` directly from stream *(commit by @FineFindus)* - [`f37ab6f`](https://github.com/libre-tube/LibreTube/commit/f37ab6f56ca9c8f2d6e03a8d20ff7b91fc6627fb) - **sabr**: use idiomatic null check *(commit by @FineFindus)* - [`768c658`](https://github.com/libre-tube/LibreTube/commit/768c65805c35c51dd36b1bcc7ce5a8cb32eac261) - **sabr**: convert `SabrClient` to a class *(commit by @FineFindus)* - [`14e00ad`](https://github.com/libre-tube/LibreTube/commit/14e00adee3f271d5cc2c210c465b0301864ad123) - **sabr**: use idiomatic Kotlin builder *(commit by @FineFindus)* - [`92d81df`](https://github.com/libre-tube/LibreTube/commit/92d81dfe07f415973bbc6170bfe7fb2194ea9716) - **sabr**: use idiomatic Kotlin nullcheck *(commit by @FineFindus)* - [`e21a12e`](https://github.com/libre-tube/LibreTube/commit/e21a12e807f0720bb7387d0a97ec8c8b8e0f744e) - **sabr**: mark `adaptationSets` setter as private *(commit by @FineFindus)* - [`ded067d`](https://github.com/libre-tube/LibreTube/commit/ded067df4e136f7ad6c137b9f20e79562be34ef6) - **sabr**: remove unsatifiable unbound index check *(commit by @FineFindus)* - [`437fb19`](https://github.com/libre-tube/LibreTube/commit/437fb19eda1aaa141a924dd9667751506387678b) - **SABR**: directly return server response payload *(commit by @FineFindus)* - [`63e7ca5`](https://github.com/libre-tube/LibreTube/commit/63e7ca585b777f9ddc12a3cdadaf052db1d394c3) - **SABR/Xtags**: keep attributes with non-integer values *(commit by @FineFindus)* - [`6961ca3`](https://github.com/libre-tube/LibreTube/commit/6961ca331a875f2a5ee24b3bade5fa16e23ef353) - **SABR**: remove unused variables *(commit by @FineFindus)* - [`c415ca0`](https://github.com/libre-tube/LibreTube/commit/c415ca045f639e4dedc3f7172c85587630957ef6) - merge `EditChannelGroupsModel` into `SubscriptionsViewModel` *(commit by @dhanuarf)* - [`3624d55`](https://github.com/libre-tube/LibreTube/commit/3624d55d86959cf1e5c30ab92bdb6f68d8890da8) - slightly improve player initialization *(commit by @dhanuarf)* - [`86cbfb4`](https://github.com/libre-tube/LibreTube/commit/86cbfb46d3898dacc1c402a8aa05b6d74be29ec2) - simplify navigation bar preference logic *(commit by @Bnyro)* - [`f65df80`](https://github.com/libre-tube/LibreTube/commit/f65df80022875c726512ea176615d5fc1f1f024a) - **sabr**: make audio format optional, add method to get end segment number, add docstrings *(commit by @Bnyro)* - [`aba0be5`](https://github.com/libre-tube/LibreTube/commit/aba0be54f4cd2e068c02c365b7616f83c2e68725) - **sabr**: move media3 format construction to Representation *(commit by @Bnyro)* - [`be7d924`](https://github.com/libre-tube/LibreTube/commit/be7d9248cf16f70a72612c179136a2d41a368c14) - **downloads**: adapt database scheme for SABR download support *(commit by @Bnyro)* - [`3a260f5`](https://github.com/libre-tube/LibreTube/commit/3a260f5481c3309a42b516e302370a29f99b3f82) - **downloads**: simplify code and refactor internal downloader logic into DownloadProvider *(commit by @Bnyro)* - [`8b3ce26`](https://github.com/libre-tube/LibreTube/commit/8b3ce2686fbd18a2b1b1ce9cf7e819d336a0c6d9) - **SABR**: log data source error *(commit by @FineFindus)* - [`4435a4c`](https://github.com/libre-tube/LibreTube/commit/4435a4ccbbb37e08765e4d4e4ed8eaefb48e89e3) - **SABR**: avoid setting selected formats twice *(commit by @FineFindus)* - [`b9ab84d`](https://github.com/libre-tube/LibreTube/commit/b9ab84da771fd0ff5132746a115df826c8c79162) - **settings**: remove label visibility, playback during call, behavior when minimized, notification stream thumbnails and watch history size settings *(commit by @Bnyro)* - [`497a81d`](https://github.com/libre-tube/LibreTube/commit/497a81dce0b9af11dfbf21a129ec47aa24ffa98a) - simplify volume and brightness helpers *(commit by @Bnyro)* ### :wrench: Chores - [`fd088cb`](https://github.com/libre-tube/LibreTube/commit/fd088cb6b5bd6ba842c4853e1ab7fb3775c85668) - prefer SABR when available *(commit by @FineFindus)* - [`157f106`](https://github.com/libre-tube/LibreTube/commit/157f106519c2ce3a1ad6835527dc90076ca991d9) - **proto**: rename `lmt` to `last_modified` time *(commit by @FineFindus)* - [`2200a4c`](https://github.com/libre-tube/LibreTube/commit/2200a4c8a53dafdce440d6f621db82226c666837) - **settings**: remove max image cache size option *(commit by @Bnyro)* - [`0189ecb`](https://github.com/libre-tube/LibreTube/commit/0189ecb06ac9bf3bad0a98afc9e27f3fc0b8cdd2) - **settings**: remove max concurrent downloads options *(commit by @Bnyro)* - [`0635edf`](https://github.com/libre-tube/LibreTube/commit/0635edf69a8df768987894e9421397a951a4d2be) - **settings**: add preference migrations for removed image cache size and parallel downloads option *(commit by @Bnyro)* - [`5c7f59d`](https://github.com/libre-tube/LibreTube/commit/5c7f59dd268e0bcbbc69135d4907971964009ce7) - bump newpipeextractor *(commit by @Bnyro)* - [`b9947ba`](https://github.com/libre-tube/LibreTube/commit/b9947ba2d7a4d6236a647e0193f2bbbfcf0b7df8) - **SABR**: add TODOs *(commit by @FineFindus)* - [`bb90b65`](https://github.com/libre-tube/LibreTube/commit/bb90b6531bc39eabe247ab080717807242b1a58b) - bump version to v32.0 *(commit by @FineFindus)* - May 28, 2026 31.4> [!NOTE] > ## Release Highlights > Fixed issues with video playback and channel pages due to recent YouTube API changes. ### :wrench: Chores - [`af33190`](https://github.com/libre-tube/LibreTube/commit/af331904fd0c71cb3bb95b6eadbd1ad31d0be429) - update NewPipeExtractor *(commit by @FineFindus)* - [`4547208`](https://github.com/libre-tube/LibreTube/commit/45472082aca91481b4b7ed92f86effb9dc9499b9) - bump version to v31.4 *(commit by @FineFindus)*
- May 23, 2026 31.3> [!NOTE] > ## Release Highlights > This release fixes that channel videos and the feed don't load. > The cause are breaking changes made by YouTube in their API. > > Big thanks to https://github.com/AudricV and https://github.com/Ecomont for working on the fixes upstream! ### :wrench: Chores - [`de82a21`](https://github.com/libre-tube/LibreTube/commit/de82a219ff9c7a082a37d822d8f5baa409bac20f) - **readme**: make Piped less prominent in our README *(commit by @Bnyro)* - [`cd5d1bf`](https://github.com/libre-tube/LibreTube/commit/cd5d1bf8366e21a547fc1f9d358c9338f8c9559e) - bump version to v31.3 *(commit by @Bnyro)*
- May 15, 2026 31.2> [!NOTE] > ## Release Highlights > This release includes mostly bugfixes. > > Most importantly this fixes that: > - the keyboard opened after you left a fullscreen video > - local streams/feed extraction was not enabled by default, which is very inconvenient for new users > - subtitles automatically disabled themselves when the video was buffering ### :sparkles: New Features - [`456d63e`](https://github.com/libre-tube/LibreTube/commit/456d63ecc534de7291e156aa7d759168ec9024cd) - **SponsorBlock**: add `selfpromo` full video label *(commit by @FineFindus)*
More…
- [`20cebd3`](https://github.com/libre-tube/LibreTube/commit/20cebd32736b4e561b97993c3d790308604555b6) - **SponsorBlock**: display icon in full video labels *(commit by @FineFindus)* - [`2638ad0`](https://github.com/libre-tube/LibreTube/commit/2638ad0b4eb6d2c9afcc0e0e9526bffc448b35ef) - **SponsorBlock**: set tooltip of thumbnail badge *(commit by @FineFindus)* ### :bug: Bug Fixes - [`02e9d75`](https://github.com/libre-tube/LibreTube/commit/02e9d7523e3b7d7e9b3e93b95247e80960f2143b) - **Search**: show deletion icon only for previous searches *(commit by @FineFindus)* - [`a92a15a`](https://github.com/libre-tube/LibreTube/commit/a92a15a7e852efb3023553899f8928ee4467c435) - crash when leaving subscriptions after refreshing feed *(commit by @Bnyro)* - [`55a9dc4`](https://github.com/libre-tube/LibreTube/commit/55a9dc41e9d0335cea6ce37ffa660279a5098252) - keyboard opens when leaving fullscreen *(commit by @Bnyro)* - [`5de6691`](https://github.com/libre-tube/LibreTube/commit/5de669159fb7f51b6d503e1c96cb10717a0e43b6) - **Shortcuts**: run blocking method on IO dispatcher *(commit by @FineFindus)* - [`5f941db`](https://github.com/libre-tube/LibreTube/commit/5f941db9ce3eb7ef0870670dd081c62573840684) - allow opening youtube-nocookie.com links *(commit by @j-lakeman)* - [`960de4e`](https://github.com/libre-tube/LibreTube/commit/960de4e7fdb01231d0c8dba4cb6f3baf16ccfa78) - **Player**: check if correct preference when stopping fast-forward *(commit by @FineFindus)* - [`9939714`](https://github.com/libre-tube/LibreTube/commit/993971488ab4fd445b5c5491510bb82ef4e78f9d) - crash when using Picture in Picture buttons before player is loaded *(commit by @Bnyro)* - [`04d9cc5`](https://github.com/libre-tube/LibreTube/commit/04d9cc50a2bce4bce392441e77e5d9596c09c3bf) - local streams/feed extraction is not enabled by default *(commit by @Bnyro)* - [`8f33d6b`](https://github.com/libre-tube/LibreTube/commit/8f33d6bad130d90d0b42656cd7bf4ab2ff844ef2) - crash when switching from audio player to video player while loading *(commit by @Bnyro)* - [`05d0252`](https://github.com/libre-tube/LibreTube/commit/05d02528e320f3ffd6935fd2bc6e145e73878335) - pause button instead of play button shown when switching from paused video to audio mode *(commit by @Bnyro)* - [`eedb7e0`](https://github.com/libre-tube/LibreTube/commit/eedb7e060b6864bbda4a14e00a387bc0108463c2) - subtitles automatically disable when buffering *(commit by @Bnyro)* - [`0e8eee2`](https://github.com/libre-tube/LibreTube/commit/0e8eee2cb4af21bd55f95b45112c9f08679a0b1b) - don't invoke media 3's onUpdateNotification directly *(commit by @Bnyro)* - [`72f09d8`](https://github.com/libre-tube/LibreTube/commit/72f09d840a5164f66af522b93aecba0eb966ccd7) - blank space in live video search results with no views information *(commit by @Bnyro)* - [`3fc3fd8`](https://github.com/libre-tube/LibreTube/commit/3fc3fd8133e758232e40dc9187d46a0acfa7d896) - **home**: feed filters (e.g. shorts only) not applied when feed is cached *(commit by @Bnyro)* ### :recycle: Refactors - [`859bf30`](https://github.com/libre-tube/LibreTube/commit/859bf30417bd4572b5ce5e7339fb3b93853b353d) - use PlayerData for passing player arguments and fix downloads shuffling *(commit by @Bnyro)* ### :wrench: Chores - [`5047512`](https://github.com/libre-tube/LibreTube/commit/5047512ac225be68cad96ebdf3d1428d6d51e214) - bump version to v31.2 *(commit by @Bnyro)* - Apr 21, 2026 31.1> [!NOTE] > ## Release Highlights > This is a hotfix release for v31.0. > > Most noteworthy new features of v31.0: > - Big downloads player refactor: We now use the same player for downloads as for online streaming, so you can use much more features than with the old downloads player. > - Add search functionality for playlists and downloads > - Support for SponsorBlock's exclusive content and self promotion - in your feed, you can now see if a video is a fully sponsored video at first glance due to a marker on the video thumbnail > - SponsorBlock support for downloads > - And a lot more ...
More…
> > Please see the changelog of the v31.0 release for more information. ### :bug: Bug Fixes - [`b1a5f6f`](https://github.com/libre-tube/LibreTube/commit/b1a5f6f35ac1036c6fbd07d795ff210f5be216e8) - app crashes when swiping to fullscreen while video loading *(commit by @Bnyro)* - [`c61bd48`](https://github.com/libre-tube/LibreTube/commit/c61bd480b30ebaac2f120f160715b2e3cd561fce) - selecting channel group shows videos from the channel group after it (off-by-one) *(commit by @Bnyro)* - [`a76324f`](https://github.com/libre-tube/LibreTube/commit/a76324f5254f6b24e860f609b2553c317b42726c) - can't disable captions anymore after enabling captions once *(commit by @Bnyro)* - [`e33d70b`](https://github.com/libre-tube/LibreTube/commit/e33d70bc997c2ae145a59a115882869382999105) - player view doesn't update (duration, play/pause button, ...) *(commit by @Bnyro)* ### :wrench: Chores - [`a51a4ca`](https://github.com/libre-tube/LibreTube/commit/a51a4ca131628780b9f1e67935d36f576af18960) - bump version to v31.1 *(commit by @Bnyro)* - > [!IMPORTANT] > We dropped support for split-ABI APKs. If you're using and automated tool to download APKs, please adjust as necessary. > [!NOTE] > ## Release Highlights > * Fixed an error with playing videos > * Removed split-abi-apks > * Always remember playback speed > * Fast forward video on long press > * Improved sleeptimer with slow volume fade-out and quick-select buttons
More…
> * Display video chapters in timebar > * Include filtered search history in search suggestion > * Prefer untranslated video title if available > * Many more bug fixes and performance improvement ### :sparkles: New Features - [`0e9c0ca`](https://github.com/libre-tube/LibreTube/commit/0e9c0cad22cc906903cdbece4eb0ea685ee49a7b) - remove release action *(commit by @FineFindus)* - [`e9759bd`](https://github.com/libre-tube/LibreTube/commit/e9759bdf3e3b886b486f90347007fc743e59c6bb) - **video player**: improve touch gesture handling *(commit by @dhanuarf)* - [`4491a42`](https://github.com/libre-tube/LibreTube/commit/4491a42f4bdea28f694a673118854c3a46dd9d1c) - **video player**: increase center screen gesture detection area *(commit by @dhanuarf)* - [`5ef3d89`](https://github.com/libre-tube/LibreTube/commit/5ef3d897a81aac4dd90719fd940e5e89129d92b6) - fast forward video on long press *(commit by @Bilal-Ahmad123)* - [`6d4f3d6`](https://github.com/libre-tube/LibreTube/commit/6d4f3d6c4b529ef93d5d8fbd767c9188be59a45d) - **DASH**: remove unsatisfiable filter *(commit by @FineFindus)* - [`79548a9`](https://github.com/libre-tube/LibreTube/commit/79548a981ba90e19b95f2861c3f80808d75d2eb6) - **Backup**: notify user about result of backup creation *(commit by @FineFindus)* - [`463b77f`](https://github.com/libre-tube/LibreTube/commit/463b77f3432c03596934e2bd7b259b79695fd664) - **Preferences**: remove unused preferences *(commit by @FineFindus)* - [`a7bb77b`](https://github.com/libre-tube/LibreTube/commit/a7bb77b9184a370babda806d35e2453a9acbfabf) - **LocalFeed**: prefer untranslated video title if available *(commit by @FineFindus)* - [`947727a`](https://github.com/libre-tube/LibreTube/commit/947727a7a907d7904651e3f610a66f6ed70d4b10) - **Preferences**: remove codec preferences *(commit by @FineFindus)* - [`c9e22dc`](https://github.com/libre-tube/LibreTube/commit/c9e22dc69a2ee0347ccdec5085098b1f56b86f23) - **video player**: add visual feedback when fullscreen gesture is in progress *(commit by @dhanuarf)* - [`d013ccb`](https://github.com/libre-tube/LibreTube/commit/d013ccb146a44e7d714d10de59e65d7c37af89a9) - **video player**: allow swipe up on the entire view to enter fullscreen *(commit by @dhanuarf)* - [`a1c4772`](https://github.com/libre-tube/LibreTube/commit/a1c47724502b16f2ad634a3bb8cf9de348d79aac) - always remember playback speed *(commit by @FineFindus)* - [`6cbd129`](https://github.com/libre-tube/LibreTube/commit/6cbd12948488e25095083df9708400624c7a41d2) - generate content-bound poToken *(commit by @FineFindus)* - [`4cd6507`](https://github.com/libre-tube/LibreTube/commit/4cd6507abc717b880844f7835985e46cc7a5f45f) - **sleep-timer**: show minutes left in player menu *(PR #8034 by @PavelStefanov)* - [`33448b7`](https://github.com/libre-tube/LibreTube/commit/33448b7f7c39a5cea314a66adef6047424ce1800) - **Player**: display chapters in timebar *(commit by @FineFindus)* - [`2decf2b`](https://github.com/libre-tube/LibreTube/commit/2decf2b5998555212ff840043be30ac9549e72e2) - **Player**: center chapter breaks *(commit by @FineFindus)* - [`993888a`](https://github.com/libre-tube/LibreTube/commit/993888aa5cf92cc28ae9098cdccdd36cf0f04f5d) - improve sleep timer with smooth player volume fade out *(commit by @PavelStefanov)* - [`944f04f`](https://github.com/libre-tube/LibreTube/commit/944f04f679e0243cd9af943a152c5d7ad65a1813) - add quick-select chips to sleep timer *(commit by @PavelStefanov)* - [`e2f42f8`](https://github.com/libre-tube/LibreTube/commit/e2f42f8afa4d46e755188aacb6f6825467406f91) - **SleepTimer**: start timer immediately when selecting chip *(commit by @FineFindus)* - [`1cdb3e0`](https://github.com/libre-tube/LibreTube/commit/1cdb3e008a28bfa59973da5c78e0a827c0c92b68) - **SleepTimer**: allow chip scrolling beyond screen-edges *(commit by @FineFindus)* - [`a4f440e`](https://github.com/libre-tube/LibreTube/commit/a4f440ec74a50dc63a212454987fc1e02ee4ccb1) - **SleepTimer**: center buttons *(commit by @FineFindus)* - [`381538a`](https://github.com/libre-tube/LibreTube/commit/381538adb0b35603eb04e56683a99867fa793c10) - include filtered search history in search suggestion *(commit by @dhanuarf)* ### :bug: Bug Fixes - [`856b8fd`](https://github.com/libre-tube/LibreTube/commit/856b8fdf625b9255084b0a512f01012775869ee6) - **LocalFeedRepository**: update subscribed channels *(commit by @FineFindus)* - [`d72cd60`](https://github.com/libre-tube/LibreTube/commit/d72cd60356177115f1e2529c4babcac22df77e95) - **video player**: preview frame jumping around the screen when seeking *(commit by @dhanuarf)* - [`dd7fa6c`](https://github.com/libre-tube/LibreTube/commit/dd7fa6c5b981d839b59a12b1870f9678e1073055) - **Import**: allow subtitles without URL *(commit by @Bilal-Ahmad123)* - [`5c3694d`](https://github.com/libre-tube/LibreTube/commit/5c3694db0b94a13dc9105b6ada50cb4b6b17b907) - **deps**: update dependency androidx.swiperefreshlayout:swiperefreshlayout to v1.2.0 *(commit by @renovate[bot])* - [`87d004c`](https://github.com/libre-tube/LibreTube/commit/87d004c0836fa1c20d0e982513ea873b899ac4d9) - occasional crash when opening YouTube link *(commit by @Bnyro)* - [`019b216`](https://github.com/libre-tube/LibreTube/commit/019b216df83b24411899c41a72acd9ff82d2603b) - crash when clicking chapters/switch to video in audio player before video loaded *(commit by @Bnyro)* - [`1411fcf`](https://github.com/libre-tube/LibreTube/commit/1411fcfa820695d275483758ae5b3aa415f41ec8) - switching video in audio only mode opens video player instead of audio player *(commit by @Bnyro)* - [`2e41934`](https://github.com/libre-tube/LibreTube/commit/2e41934b8579ff0e1dd85f9b20ceb6dc69b6d932) - initialize `brightnessHelper` before `playerGestureController` *(commit by @FineFindus)* - [`2ff9120`](https://github.com/libre-tube/LibreTube/commit/2ff9120b62b8502cf29afe080024ef76cc2b25a7) - Crash when starting online stream while offline stream in progress *(commit by @shantanu1k)* - [`435cf50`](https://github.com/libre-tube/LibreTube/commit/435cf50c06c4ac2201ced918cf384bbf6c008dfd) - **deps**: update media3 to v1.9.0 *(commit by @renovate[bot])* - [`8018b1d`](https://github.com/libre-tube/LibreTube/commit/8018b1dc61c5db14c04efb78a0337b9b8d6589b1) - **deps**: update dependency com.google.android.material:material to v1.14.0-alpha08 *(commit by @renovate[bot])* - [`845cd79`](https://github.com/libre-tube/LibreTube/commit/845cd7998aa0e907f7b0534e5db5516990d44d4d) - **video player**: glitch when exiting from fullscreen on short videos *(commit by @dhanuarf)* - [`53b95e2`](https://github.com/libre-tube/LibreTube/commit/53b95e22eb300e1881a15371e1add6c9a64dd297) - avoid leaking `SubscriptionsFragment` *(commit by @FineFindus)* - [`c50592d`](https://github.com/libre-tube/LibreTube/commit/c50592d72dffba55e60444aeae351655339b8b25) - prevent videos from moving to start when re-adding them to a local playlist *(PR #8061 by @PavelStefanov)* - [`14f2b3b`](https://github.com/libre-tube/LibreTube/commit/14f2b3bb6606515f4165eb6006e1ed22c4eb497d) - subscriptions button reset its state when scrolling *(commit by @dhanuarf)* - [`bb0ad22`](https://github.com/libre-tube/LibreTube/commit/bb0ad22ed350bfbaae4c8f8debf593a5ddd936b1) - **deps**: update media3 to v1.9.1 *(commit by @renovate[bot])* - [`ccad908`](https://github.com/libre-tube/LibreTube/commit/ccad908c97beb1a7887a153a23a6ac6d65685aa2) - search query being added to history on back navigation *(commit by @dhanuarf)* - [`fc1c5d8`](https://github.com/libre-tube/LibreTube/commit/fc1c5d8620e60addc6eb627ae4289c9889dfb5e4) - ignore missing `re2j` classes *(commit by @FineFindus)* ### :zap: Performance Improvements - [`b7669eb`](https://github.com/libre-tube/LibreTube/commit/b7669ebf25e9e86f4ededbc1df49fb94cd6771b0) - avoid second database call *(commit by @FineFindus)* ### :recycle: Refactors - [`752c4f8`](https://github.com/libre-tube/LibreTube/commit/752c4f86c51e04100b487e530eacf7ebb0c7db3b) - remove local feed videos when unsubscribing *(commit by @FineFindus)* - [`0a95d96`](https://github.com/libre-tube/LibreTube/commit/0a95d965b42ff11b9d9a4aa19e260a02c9202154) - remove unnecessary `this` *(commit by @FineFindus)* - [`823ce93`](https://github.com/libre-tube/LibreTube/commit/823ce93f7b7a8bc324c8a0d0bad09546e074521c) - simplify finding `PlayerFragment` method in `CustomExoPlayerView` *(commit by @dhanuarf)* - [`d9710c8`](https://github.com/libre-tube/LibreTube/commit/d9710c87527fdbe93482db63aa7f716ab535fe85) - implement video player gesture directly in `onTouchEvent()` *(commit by @dhanuarf)* - [`08e4f12`](https://github.com/libre-tube/LibreTube/commit/08e4f12dacb4722935b8ab3051b40905b1e27bfb) - move some initializations to constructor level in `CustomExoPlayerView` *(commit by @dhanuarf)* - [`cc2585e`](https://github.com/libre-tube/LibreTube/commit/cc2585e2d021d421398c15f81c77fc4792afb159) - simplify some functions that has default parameters *(commit by @dhanuarf)* - [`37cd5e7`](https://github.com/libre-tube/LibreTube/commit/37cd5e7add9e67131797b1501db98182dd781111) - define some constants in `companion object` *(commit by @dhanuarf)* - [`b0e2ddb`](https://github.com/libre-tube/LibreTube/commit/b0e2ddbac7b73844d0eef45df65da0b05c7807f4) - remove unnecessary null assertion *(commit by @FineFindus)* - [`61f3201`](https://github.com/libre-tube/LibreTube/commit/61f3201b35e5a3381b25224daf1ae0227a4e02e2) - remove unnecessary `lateinit` modifier *(commit by @FineFindus)* - [`3eb429f`](https://github.com/libre-tube/LibreTube/commit/3eb429f2a46cd9462d8b750b229d542e4691882b) - use elvis operator for early return *(commit by @FineFindus)* - [`344c781`](https://github.com/libre-tube/LibreTube/commit/344c78104da8aca60a0b4ac374fdc1dbd31369b1) - **Player/ChapterTimeBar**: initialize immutable variables once *(commit by @FineFindus)* - [`f20defa`](https://github.com/libre-tube/LibreTube/commit/f20defab1fa1f32ef954259999ad42ac99442c85) - create sleep timer chips programmatically *(commit by @PavelStefanov)* - [`fb23776`](https://github.com/libre-tube/LibreTube/commit/fb2377654a96e63a69dc72c2550fce3eecceb9b5) - move quick-select chips above time input field *(commit by @PavelStefanov)* ### :wrench: Chores - [`b75dd6e`](https://github.com/libre-tube/LibreTube/commit/b75dd6e48239f2e6b85ee0a4471139de15f4bd4f) - mark notification frequency values as translatable *(commit by @FineFindus)* - [`b9f1b2e`](https://github.com/libre-tube/LibreTube/commit/b9f1b2ea7e54aa249449512f2b71509a930a14f1) - remove dead piped instances linking *(commit by @FineFindus)* - [`3864e6d`](https://github.com/libre-tube/LibreTube/commit/3864e6d7576c80b9c229b3c2c5695f8b3865d880) - **deps**: update gradle to v9.2.1 *(commit by @renovate[bot])* - [`1cbec1f`](https://github.com/libre-tube/LibreTube/commit/1cbec1f6f5412724bb279037bdb63b4aa32ac48b) - **deps**: update actions/checkout action to v6 *(commit by @renovate[bot])* - [`90b5271`](https://github.com/libre-tube/LibreTube/commit/90b52711f53f24f1be800665e4a99cc69cbb6baf) - **deps**: update actions/upload-artifact action to v6 *(commit by @renovate[bot])* - [`ae69dc4`](https://github.com/libre-tube/LibreTube/commit/ae69dc4b03f48e222514b7aaffba106df680da8c) - remove no longer needed changelog script *(commit by @Bnyro)* - [`fc9c639`](https://github.com/libre-tube/LibreTube/commit/fc9c639f89fadfdd2daa105edffd568a169e0e0f) - **deps**: update ilharp/sign-android-release action to v2 *(commit by @renovate[bot])* - [`0807875`](https://github.com/libre-tube/LibreTube/commit/0807875b1290b2435146a427fdae060b65569531) - bump version to v0.30.0 *(commit by @FineFindus)* - > [!IMPORTANT] > We dropped support for split-ABI APKs. If you're using and automated tool to download APKs, please adjust as necessary. > [!NOTE] > ## Release Highlights > * Fixed an error with playing videos > * Removed split-abi-apks > * Always remember playback speed > * Fast forward video on long press > * Improved sleeptimer with slow volume fade-out and quick-select buttons
More…
> * Display video chapters in timebar > * Include filtered search history in search suggestion > * Prefer untranslated video title if available > * Many more bug fixes and performance improvement ### :sparkles: New Features - [`0e9c0ca`](https://github.com/libre-tube/LibreTube/commit/0e9c0cad22cc906903cdbece4eb0ea685ee49a7b) - remove release action *(commit by @FineFindus)* - [`e9759bd`](https://github.com/libre-tube/LibreTube/commit/e9759bdf3e3b886b486f90347007fc743e59c6bb) - **video player**: improve touch gesture handling *(commit by @dhanuarf)* - [`4491a42`](https://github.com/libre-tube/LibreTube/commit/4491a42f4bdea28f694a673118854c3a46dd9d1c) - **video player**: increase center screen gesture detection area *(commit by @dhanuarf)* - [`5ef3d89`](https://github.com/libre-tube/LibreTube/commit/5ef3d897a81aac4dd90719fd940e5e89129d92b6) - fast forward video on long press *(commit by @Bilal-Ahmad123)* - [`6d4f3d6`](https://github.com/libre-tube/LibreTube/commit/6d4f3d6c4b529ef93d5d8fbd767c9188be59a45d) - **DASH**: remove unsatisfiable filter *(commit by @FineFindus)* - [`79548a9`](https://github.com/libre-tube/LibreTube/commit/79548a981ba90e19b95f2861c3f80808d75d2eb6) - **Backup**: notify user about result of backup creation *(commit by @FineFindus)* - [`463b77f`](https://github.com/libre-tube/LibreTube/commit/463b77f3432c03596934e2bd7b259b79695fd664) - **Preferences**: remove unused preferences *(commit by @FineFindus)* - [`a7bb77b`](https://github.com/libre-tube/LibreTube/commit/a7bb77b9184a370babda806d35e2453a9acbfabf) - **LocalFeed**: prefer untranslated video title if available *(commit by @FineFindus)* - [`947727a`](https://github.com/libre-tube/LibreTube/commit/947727a7a907d7904651e3f610a66f6ed70d4b10) - **Preferences**: remove codec preferences *(commit by @FineFindus)* - [`c9e22dc`](https://github.com/libre-tube/LibreTube/commit/c9e22dc69a2ee0347ccdec5085098b1f56b86f23) - **video player**: add visual feedback when fullscreen gesture is in progress *(commit by @dhanuarf)* - [`d013ccb`](https://github.com/libre-tube/LibreTube/commit/d013ccb146a44e7d714d10de59e65d7c37af89a9) - **video player**: allow swipe up on the entire view to enter fullscreen *(commit by @dhanuarf)* - [`a1c4772`](https://github.com/libre-tube/LibreTube/commit/a1c47724502b16f2ad634a3bb8cf9de348d79aac) - always remember playback speed *(commit by @FineFindus)* - [`6cbd129`](https://github.com/libre-tube/LibreTube/commit/6cbd12948488e25095083df9708400624c7a41d2) - generate content-bound poToken *(commit by @FineFindus)* - [`4cd6507`](https://github.com/libre-tube/LibreTube/commit/4cd6507abc717b880844f7835985e46cc7a5f45f) - **sleep-timer**: show minutes left in player menu *(PR #8034 by @PavelStefanov)* - [`33448b7`](https://github.com/libre-tube/LibreTube/commit/33448b7f7c39a5cea314a66adef6047424ce1800) - **Player**: display chapters in timebar *(commit by @FineFindus)* - [`2decf2b`](https://github.com/libre-tube/LibreTube/commit/2decf2b5998555212ff840043be30ac9549e72e2) - **Player**: center chapter breaks *(commit by @FineFindus)* - [`993888a`](https://github.com/libre-tube/LibreTube/commit/993888aa5cf92cc28ae9098cdccdd36cf0f04f5d) - improve sleep timer with smooth player volume fade out *(commit by @PavelStefanov)* - [`944f04f`](https://github.com/libre-tube/LibreTube/commit/944f04f679e0243cd9af943a152c5d7ad65a1813) - add quick-select chips to sleep timer *(commit by @PavelStefanov)* - [`e2f42f8`](https://github.com/libre-tube/LibreTube/commit/e2f42f8afa4d46e755188aacb6f6825467406f91) - **SleepTimer**: start timer immediately when selecting chip *(commit by @FineFindus)* - [`1cdb3e0`](https://github.com/libre-tube/LibreTube/commit/1cdb3e008a28bfa59973da5c78e0a827c0c92b68) - **SleepTimer**: allow chip scrolling beyond screen-edges *(commit by @FineFindus)* - [`a4f440e`](https://github.com/libre-tube/LibreTube/commit/a4f440ec74a50dc63a212454987fc1e02ee4ccb1) - **SleepTimer**: center buttons *(commit by @FineFindus)* - [`381538a`](https://github.com/libre-tube/LibreTube/commit/381538adb0b35603eb04e56683a99867fa793c10) - include filtered search history in search suggestion *(commit by @dhanuarf)* ### :bug: Bug Fixes - [`856b8fd`](https://github.com/libre-tube/LibreTube/commit/856b8fdf625b9255084b0a512f01012775869ee6) - **LocalFeedRepository**: update subscribed channels *(commit by @FineFindus)* - [`d72cd60`](https://github.com/libre-tube/LibreTube/commit/d72cd60356177115f1e2529c4babcac22df77e95) - **video player**: preview frame jumping around the screen when seeking *(commit by @dhanuarf)* - [`dd7fa6c`](https://github.com/libre-tube/LibreTube/commit/dd7fa6c5b981d839b59a12b1870f9678e1073055) - **Import**: allow subtitles without URL *(commit by @Bilal-Ahmad123)* - [`5c3694d`](https://github.com/libre-tube/LibreTube/commit/5c3694db0b94a13dc9105b6ada50cb4b6b17b907) - **deps**: update dependency androidx.swiperefreshlayout:swiperefreshlayout to v1.2.0 *(commit by @renovate[bot])* - [`87d004c`](https://github.com/libre-tube/LibreTube/commit/87d004c0836fa1c20d0e982513ea873b899ac4d9) - occasional crash when opening YouTube link *(commit by @Bnyro)* - [`019b216`](https://github.com/libre-tube/LibreTube/commit/019b216df83b24411899c41a72acd9ff82d2603b) - crash when clicking chapters/switch to video in audio player before video loaded *(commit by @Bnyro)* - [`1411fcf`](https://github.com/libre-tube/LibreTube/commit/1411fcfa820695d275483758ae5b3aa415f41ec8) - switching video in audio only mode opens video player instead of audio player *(commit by @Bnyro)* - [`2e41934`](https://github.com/libre-tube/LibreTube/commit/2e41934b8579ff0e1dd85f9b20ceb6dc69b6d932) - initialize `brightnessHelper` before `playerGestureController` *(commit by @FineFindus)* - [`2ff9120`](https://github.com/libre-tube/LibreTube/commit/2ff9120b62b8502cf29afe080024ef76cc2b25a7) - Crash when starting online stream while offline stream in progress *(commit by @shantanu1k)* - [`435cf50`](https://github.com/libre-tube/LibreTube/commit/435cf50c06c4ac2201ced918cf384bbf6c008dfd) - **deps**: update media3 to v1.9.0 *(commit by @renovate[bot])* - [`8018b1d`](https://github.com/libre-tube/LibreTube/commit/8018b1dc61c5db14c04efb78a0337b9b8d6589b1) - **deps**: update dependency com.google.android.material:material to v1.14.0-alpha08 *(commit by @renovate[bot])* - [`845cd79`](https://github.com/libre-tube/LibreTube/commit/845cd7998aa0e907f7b0534e5db5516990d44d4d) - **video player**: glitch when exiting from fullscreen on short videos *(commit by @dhanuarf)* - [`53b95e2`](https://github.com/libre-tube/LibreTube/commit/53b95e22eb300e1881a15371e1add6c9a64dd297) - avoid leaking `SubscriptionsFragment` *(commit by @FineFindus)* - [`c50592d`](https://github.com/libre-tube/LibreTube/commit/c50592d72dffba55e60444aeae351655339b8b25) - prevent videos from moving to start when re-adding them to a local playlist *(PR #8061 by @PavelStefanov)* - [`14f2b3b`](https://github.com/libre-tube/LibreTube/commit/14f2b3bb6606515f4165eb6006e1ed22c4eb497d) - subscriptions button reset its state when scrolling *(commit by @dhanuarf)* - [`bb0ad22`](https://github.com/libre-tube/LibreTube/commit/bb0ad22ed350bfbaae4c8f8debf593a5ddd936b1) - **deps**: update media3 to v1.9.1 *(commit by @renovate[bot])* - [`ccad908`](https://github.com/libre-tube/LibreTube/commit/ccad908c97beb1a7887a153a23a6ac6d65685aa2) - search query being added to history on back navigation *(commit by @dhanuarf)* - [`fc1c5d8`](https://github.com/libre-tube/LibreTube/commit/fc1c5d8620e60addc6eb627ae4289c9889dfb5e4) - ignore missing `re2j` classes *(commit by @FineFindus)* ### :zap: Performance Improvements - [`b7669eb`](https://github.com/libre-tube/LibreTube/commit/b7669ebf25e9e86f4ededbc1df49fb94cd6771b0) - avoid second database call *(commit by @FineFindus)* ### :recycle: Refactors - [`752c4f8`](https://github.com/libre-tube/LibreTube/commit/752c4f86c51e04100b487e530eacf7ebb0c7db3b) - remove local feed videos when unsubscribing *(commit by @FineFindus)* - [`0a95d96`](https://github.com/libre-tube/LibreTube/commit/0a95d965b42ff11b9d9a4aa19e260a02c9202154) - remove unnecessary `this` *(commit by @FineFindus)* - [`823ce93`](https://github.com/libre-tube/LibreTube/commit/823ce93f7b7a8bc324c8a0d0bad09546e074521c) - simplify finding `PlayerFragment` method in `CustomExoPlayerView` *(commit by @dhanuarf)* - [`d9710c8`](https://github.com/libre-tube/LibreTube/commit/d9710c87527fdbe93482db63aa7f716ab535fe85) - implement video player gesture directly in `onTouchEvent()` *(commit by @dhanuarf)* - [`08e4f12`](https://github.com/libre-tube/LibreTube/commit/08e4f12dacb4722935b8ab3051b40905b1e27bfb) - move some initializations to constructor level in `CustomExoPlayerView` *(commit by @dhanuarf)* - [`cc2585e`](https://github.com/libre-tube/LibreTube/commit/cc2585e2d021d421398c15f81c77fc4792afb159) - simplify some functions that has default parameters *(commit by @dhanuarf)* - [`37cd5e7`](https://github.com/libre-tube/LibreTube/commit/37cd5e7add9e67131797b1501db98182dd781111) - define some constants in `companion object` *(commit by @dhanuarf)* - [`b0e2ddb`](https://github.com/libre-tube/LibreTube/commit/b0e2ddbac7b73844d0eef45df65da0b05c7807f4) - remove unnecessary null assertion *(commit by @FineFindus)* - [`61f3201`](https://github.com/libre-tube/LibreTube/commit/61f3201b35e5a3381b25224daf1ae0227a4e02e2) - remove unnecessary `lateinit` modifier *(commit by @FineFindus)* - [`3eb429f`](https://github.com/libre-tube/LibreTube/commit/3eb429f2a46cd9462d8b750b229d542e4691882b) - use elvis operator for early return *(commit by @FineFindus)* - [`344c781`](https://github.com/libre-tube/LibreTube/commit/344c78104da8aca60a0b4ac374fdc1dbd31369b1) - **Player/ChapterTimeBar**: initialize immutable variables once *(commit by @FineFindus)* - [`f20defa`](https://github.com/libre-tube/LibreTube/commit/f20defab1fa1f32ef954259999ad42ac99442c85) - create sleep timer chips programmatically *(commit by @PavelStefanov)* - [`fb23776`](https://github.com/libre-tube/LibreTube/commit/fb2377654a96e63a69dc72c2550fce3eecceb9b5) - move quick-select chips above time input field *(commit by @PavelStefanov)* ### :wrench: Chores - [`b75dd6e`](https://github.com/libre-tube/LibreTube/commit/b75dd6e48239f2e6b85ee0a4471139de15f4bd4f) - mark notification frequency values as translatable *(commit by @FineFindus)* - [`b9f1b2e`](https://github.com/libre-tube/LibreTube/commit/b9f1b2ea7e54aa249449512f2b71509a930a14f1) - remove dead piped instances linking *(commit by @FineFindus)* - [`3864e6d`](https://github.com/libre-tube/LibreTube/commit/3864e6d7576c80b9c229b3c2c5695f8b3865d880) - **deps**: update gradle to v9.2.1 *(commit by @renovate[bot])* - [`1cbec1f`](https://github.com/libre-tube/LibreTube/commit/1cbec1f6f5412724bb279037bdb63b4aa32ac48b) - **deps**: update actions/checkout action to v6 *(commit by @renovate[bot])* - [`90b5271`](https://github.com/libre-tube/LibreTube/commit/90b52711f53f24f1be800665e4a99cc69cbb6baf) - **deps**: update actions/upload-artifact action to v6 *(commit by @renovate[bot])* - [`ae69dc4`](https://github.com/libre-tube/LibreTube/commit/ae69dc4b03f48e222514b7aaffba106df680da8c) - remove no longer needed changelog script *(commit by @Bnyro)* - [`fc9c639`](https://github.com/libre-tube/LibreTube/commit/fc9c639f89fadfdd2daa105edffd568a169e0e0f) - **deps**: update ilharp/sign-android-release action to v2 *(commit by @renovate[bot])* - [`0807875`](https://github.com/libre-tube/LibreTube/commit/0807875b1290b2435146a427fdae060b65569531) - bump version to v0.30.0 *(commit by @FineFindus)* - > [!NOTE] > This is a bugfix release to fix some small issues with the recent 0.29.0 release. > To see the release notes of the 0.29.0 release, please see https://github.com/libre-tube/LibreTube/releases/tag/v0.29.0. ## Small new features * feat(SponsorBlock): add Hook/Greetings category by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7845 * feat: make audio quality preference support different languages by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7874 * feat(timebar): re-implement the ability to cancel seeking by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7881 ## Bug fixes
More…
* fix: shared url not being retrieved properly by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7830 * fix: sorting queue displays wrong current video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7873 * fix(TimeBar): listener not being properly removed causing them to accumulate by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7841 * fix: copying reply text to clipboard copies comment text by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7885 * fix: popup menu (three dots) background in pure theme by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7886 * fix: ugly race-condition when starting to load two videos at the same time by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7887 * fix: featured content section on home page doesn't respect all feed filters by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7895 ## Internal changes * feat(Player): remove external player button by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7837 * build: update NewPipeExtractor by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7843 * feat: drop LBRY HLS support by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7844 * feat(Preferences): remove unused hidden quality settings by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7872 * chore: remove unused strings and icons by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7875 * refactor: migrate search suggestions data to viewmodel / flows by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7888 **Full Changelog**: https://github.com/libre-tube/LibreTube/compare/v0.29.0...v0.29.1 - > [!NOTE] > After half a year of work, this is perhaps one of our biggest releases ever (more than 500 commits), including > - a full app redesign using Material 3 Expressive > - Edge to Edge support > - proper predictive back support > - and a lot more: see the detailed list below > > Thanks to all contributors that made this release possible! > > For those who want to financially support the development, it's now also possible to donate via crypto currencies
More…
> - Monero (XMR): 47jAx7jMFo5iqy9VgDH98qL1bSK4kr6Pxi7HKWcRwsxbVYJdjxJtyrwXeAUa5MutvcQUmWMBfvAKnPAutDHvWEymUgLm5v8 > - Ethereum (ETH): 0x599909f54CdC18B997Be8F032341d1Fb14BF4F39 > > Enjoy the new app version! ## Major new features * feat: update ui components to material 3 expressive by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7444 * feat: add support for viewing downloaded playlists by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7810 * feat: support for trending categories (gaming, trailers, ...) by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7592 * feat: use system default animations by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7053 * feat: display search suggestion / typo correction in results page by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7780 * feat: support edge to edge by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7507 * feat: new semitone mode in playback options sheet by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7579 * feat: filter members-only videos from channel tab by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7677 * feat: keep queue history when opening new video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7676 ## Small new features / Quality of Life changes * feat: add 'change region' button in TrendsFragment by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7816 * feat: add delays between subscription imports to avoid rate limits by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7693 * feat: add toggle to include timestamp in playlists/subscriptions expo… by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7691 * feat: allow drag-to-seek like YouTube by @osamasayed585 in https://github.com/libre-tube/LibreTube/pull/7757 * feat: automatically pause downloads when network changes to metered by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7696 * feat: display title of downloading video by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7578 * feat: show download playlist name by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7768 * feat: dynamically scale landscape player based on screen size by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7477 * feat: enable edge-to-edge in bottom sheets by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7574 * feat: extract playlist name from filename at YouTube CSV imports by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7481 * feat: disable video track when minimized while PiP is off by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7601 * feat: list all added custom instances in link share dialog by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7652 * feat: load cached and downloaded images even if data saver mode disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7396 * feat: logarithmic brightness scaling by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7536 * feat: request user confirmation before clearing playback queue by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7752 * feat: separate 'clone' and 'create' when creating a new playist by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7597 * feat(subscriptions sheet): filter list by currently selected group by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7702 * feat: support for setting locale in Android settings for app (A13+) by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7512 * feat: show snackbar when unsubscribing by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7679 * feat: show toolbar when scrolling up in subscriptions feed for better accessibility by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7673 ## Layout changes * feat: improve channel row layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7769 * feat: improve comments row, replies and sheet styles and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7774 * feat: improve dialogs buttons style by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7726 * feat: improve filter sort sheet ux by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7775 * feat: improve description style and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7782 * feat: library text style and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7784 * feat: improve playlist layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7766 * feat: improve playlist thumnail card by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7724 * feat: replace image buttons with material 3 expressive icon buttons by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7709 * feat: style of the sort button for download content by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7733 * feat: subscription layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7783 ## Bug Fixes * fix: disable 'Add to playlist' button and spinner when there is no playlist available by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7603 * fix(player): move screenshot writing task to background thread by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7735 * fix(player ui): better control overlays visibility by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7636 * fix: appbar and bottom navigation paddings not properly applied by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7623 * fix: audio player autoplay doesn't work if autoplay countdown enabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7480 * fix: auth api not immediately updated after selecting instance by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7566 * fix: auto-fullscreen on shorts stopped working by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7638 * fix: autoplay countdown appears when manually skipping to next video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7674 * fix: channel page scroll position reset when entering fullscreen by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7811 * fix: collapse description when loading new video by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7553 * fix(Comments): decrease intensity of creator badge by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7809 * fix: comments sheet not dismissed when next video starts by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7437 * fix: comment time not localized by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7509 * fix: crash in trends when uploader url is unknown by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7750 * fix: crash when deleting subsequent downloads by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7567 * fix: crash when loading dearrow in search result by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7717 * fix: crash when opening app with no internet connection by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7718 * fix: crash when opening other video while in background player by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7455 * fix: crash when setting video title with dearrow by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7778 * Fix crash when streams size > 1MB by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7530 * fix: create playlist dialog shows URL instead of name text input field by default by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7621 * fix: display `ContentItem`s with `UNKNOWN` availability by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7813 * fix: don't cancel subscriptions import if some channels can't be imported by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7692 * fix: filter only `StreamInfoItem`s for availability by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7684 * Fix: floating buttons by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7725 * fix: hide channel avatar if there's none by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7751 * fix(Home): hide Trending category by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7675 * fix: home screen error not shown if homepage fails to load by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7776 * fix: icon color of subscriptions toggle button by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7777 * fix: image loading issues when scrolling too fast on a list by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7649 * Fix initial video player margin issue in PlayerFragment by @101paul in https://github.com/libre-tube/LibreTube/pull/7753 * fix: instance selection dialog not updated after modifying custom instances by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7565 * fix: keyboard showing up in player screen by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7662 * fix: last selected playlist is not remembered in AddToPlaylistDialog by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7527 * fix: library buttons overflowing in some languages by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7747 * fix: localization of comment time by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7748 * fix: location category is empty on A13+ by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7688 * fix: offline player video title not updating when playing next video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7439 * fix: PiP button not working as intended by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7622 * fix(player): clear current stream when closing player by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7429 * fix: player not paused when switching to other apps while pauseOnQuit is on by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7615 * fix(player ui): seek and skip buttons appear at opposite side in rtl mode by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7635 * fix: playlist/subscription imports don't complete for larger data by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7440 * fix: prevent accidential navigation to the uploader instead of video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7817 * fix: queue missing when playing playlist video in background by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7456 * fix: remove HLS message by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7564 * fix: repeat mode doesn't work in offline player by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7438 * fix: reset to previous pitch value if input is empty by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7606 * fix: screen turns off while player active after switching to video mode by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7479 * fix: seek buttons always visible if double tap to seek disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7573 * fix: seek buttons still visible when player locked by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7639 * fix: select main video language in download dialog by default by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7510 * fix: Show a blank video when transitioning to a new video, just to inform the user that the new video is being loaded by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7526 * fix: 'show in seekbar' sponsorblock option causes app to crash by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7388 * fix: shuffling downloads leaves queue empty if insertRelatedStreams disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7593 * fix: SponsorBlock segments skipped even if temporarily allowed by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7395 * fix(sponsorblock): segment time not properly parsed if exceeds 1 hour by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7637 * fix(SubscriptionsFragment): reset scroll position when switching Chan… by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7808 * fix(trending): 'Trailers' and 'Podcasts' content got swapped by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7758 * fix: trends fragment contains only first 10 items by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7695 * fix(UI/Comments): only show creator reply indicator for the initial comment by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7613 * fix: videos added to watch history even though history is disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7760 * fix: enable legacy TTML subtitle decoding support in Media3 by @Bilal-Ahmad123 in https://github.com/libre-tube/LibreTube/pull/7492 * fix: improve landscape player UI by @bermount in https://github.com/libre-tube/LibreTube/pull/7475 * fix: fetch dearrow via background thread in VideoCardsAdapter by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7795 ## Refactor * refactor: provide service type via startForeground compat method by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7739 * refactor: refactor comments logic by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7076 * refactor: improve sizes in home layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7767 * refactor: load deArrow when video gets visible for better loading times by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7694 * refactor: make feed notifications more robust against subscription changes by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7376 * refactor: merge general and advanced settings categories by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7687 * refactor: move player related sub-views to its own binding by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7550 * refactor(Preferences): use `MIGRATION` length as version by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7442 * refactor: re-use cached home page trends in trends fragment for faster load times by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7600 * refactor: slightly simplify usages of onScrollStateChanged by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7812 * refactor: some small padding changes by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7785 * refactor: unify error handling to be more robust by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7618 * refactor: use enum for top-level destinations by @osamasayed585 in https://github.com/libre-tube/LibreTube/pull/7762 * refactor: use `videoId` for storing downloaded files by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7576 * revert: downgrade media3 by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7595 * refactor(Preferences/SponsorBlock): drop `VISIBLE` option by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7434 * refactor: remove download title by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7575 * refactor: remove legacy subscription view by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7406 ## Chores * build: keep NewPipeExtractor auto-generated proto classes by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7571 * build: update NewPipeExtractor by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7458 * chore: fix images in readme by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7738 * chore: remove accidentially commited file by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7518 * Chore: Remove context parameter from InstanceRepository by @SEKI-YUTA in https://github.com/libre-tube/LibreTube/pull/7466 * chore: remove hls over dash preference by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7508 * Chore: Remove unused imports whole application by @SEKI-YUTA in https://github.com/libre-tube/LibreTube/pull/7468 * chore: revert Improve landscape UI by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7476 * chore: update media3 to v1.7.1 by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7617 * chore: update newpipeextractor to latest version by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7779 * chore: update npe fork by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7568 * chore: use ListAdapter#currentList instead of manual items impl by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7452 * chore: use sentence case in settings and remove ampersand by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7435 * ci: replace deprecated wrapper-validation action by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7511 ## New Contributors * @SEKI-YUTA made their first contribution in https://github.com/libre-tube/LibreTube/pull/7466 * @Bilal-Ahmad123 made their first contribution in https://github.com/libre-tube/LibreTube/pull/7492 * @dhanuarf made their first contribution in https://github.com/libre-tube/LibreTube/pull/7526 * @Elolcol made their first contribution in https://github.com/libre-tube/LibreTube/pull/7726 * @osamasayed585 made their first contribution in https://github.com/libre-tube/LibreTube/pull/7762 * @101paul made their first contribution in https://github.com/libre-tube/LibreTube/pull/7753 **Full Changelog**: https://github.com/libre-tube/LibreTube/compare/v0.28.1...v29.0 - ## Bug fixes * fix: update NewPipeExtractor fork to latest version to fix playback issues by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7381 * fix: support for adding downloads to playback queue by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7348 * fix: don't block ui thread while filtering watched videos by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7332 * fix: confirm unsubscribe preference only works if disabled instead of enabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7345 * fix: channel avatar missing in subscriptions list when subbed from search by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7360 * fix(Backup): use channel URL for subscription export by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7368 * fix: SponsorBlock segments of previous video not cleared when starting next by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7382 * fix: always use account subscriptions repository if logged in to Piped by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7350 * fix: automatically log user out when enabling full local mode and no auth instance set by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7351
More…
* fix: add missing dearrow calls to playlist fragment and video player by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7347 ## Chores and Refactors * ci: fix codeql by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7339 * chore: update app descriptions in fastlane metadata by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7338 * refactor: cleanup and simplify SponsorBlock code by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7375 * refactor: simplify theme and dark/light mode logic by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7377 **Full Changelog**: https://github.com/libre-tube/LibreTube/compare/v0.28.0...v0.28.1