NewPipe 0.25.0 and 25.1 released: Card view, tappable URLs/timestamps in comments, and PeerTube search filters ahoy!

post image

Well well well. Look at us getting a new release out. We have not really done this in a while, have we? Let’s see if we’ve still got it.

*one month later*

Damn it, we certainly didn’t have it in us to get this blog post out in time. Thanks to @Opusforlife, it did materialize after all, instead of ending up in blog post purgatory.

But for now, first blog post of 2023, so we get to say happy new year! We hope it will be at least as good as 2022 to you, if not better. We certainly tried making NewPipe better with this release. Read on to find out more about all the changes which made it into this version.

Oh, and some of you will have noticed this already: the player notification lost some action buttons on Android 13. This is a known problem. We just need to update our code to match what A13 is expecting of us. It will be taken care of, don’t you worry.

*another month later*

“I love deadlines. I like the whooshing sound they make as they fly by.”

Douglas Adams

In the meantime, another release came out. This is mostly a bugfix release, so we decided to include the contents of that as well. Sorry for the resulting length, we put more screenshots in than usual to make it easier to scroll through.

We will do better with the next one, we hope at least. Mix it up a bit. Look forward to that!

Happy holidays however!

New in 25.0

  • @FireMasterK started work on adding Extractor support for fetching audio track information! This is intended for videos which have multiple audio tracks, such as different languages. Eventually, the Extractor will expose this info so that clients can make use of it. Just a heads up for all the people freaking out about Arabic Mr Beast. There is progress. Breathe.

  • @FireMasterK also changed how YouTube comments are parsed, to make the timestamps and URLs tappable! Moreover, the Extractor now also provides the total comment count for clients to show.

  • @TobiGr added Extractor support for comment replies on PeerTube!

  • @TobiGr also added support for searching for playlists and channels on PeerTube!

We see you searching for "Best 1863 songs of all time".
  • @Isira-Seneviratne added a toast for when no app update is found after a manual check is performed.

  • @Theta-Dev added the subscriber count below the channel name on the video details page. Even more details! All the details!

  • @Jared234 added the Download option to the long-press menu of queue items.

Just because two phones were needed to create this image, it does not mean that someone is unable to do CSS.
  • @Jared234 also made it so that manually setting a local playlist’s thumbnail makes it permanent. As a consequence, the playlist long-press menu has been reworked to add a new option to unset the thumbnail. (If you’re wondering where to find the option to set a thumbnail in the first place, it’s by long-pressing on a playlist video.)

  • @AudricV added a long-press action to hashtags and URLs in the video description, which copies them to the clipboard.

  • @mahendranv added a new card view for videos in lists! You can check it out in Appearance settings. Beware that the thumbnails will look blurry, as support for extracting HD thumbnails is still on the way.

I wonder if these cards are tradeable.

New in 25.1

  • @Jared234 improved the “Add to playlist” dialog tremendously regarding duplicates. While they didn’t get a special treatment before, now playlists already containing the stream will be greyed out. If you still decide to add the stream to the playlist, you will also get a small toast informing you of the crime you have committed.
What? It's good music. Shut up.
  • In another entry in their relentless fight against duplicates, @Jared234 added a menu option to remove duplicates from a playlist.

  • @mahendranv, in their second mention in this post, improved the channel card in search results when using card layout: bigger icon, more lines of the description and changed location for the video count. Looks way better now!

  • @NyanCatTW1, with the help of @Stypox, added an option to the Video and audio settings to let users disable hardware media button events.

  • And finally, @Jared234 improved the “What’s New” feed (and all feeds, really) by turning the Hide button into a menu, and adding the option to hide partially watched videos as well.

Fits perfectly with "What's New" now being a default tab on the main page.

Improved in 25.0

  • @FireMasterK implemented extracting Bold, Italic, and Strikethrough formatting for YouTube text. NoW vIdEO tiTLeS lige like thIS wILl loOk eVEn bETtEr!!!111

  • @AudricV added support for showing the duration for video premieres (upcoming videos). Moreover, the upload date and view count is now shown for playlist items.

Sonic will rage for 1 and a 1/2 hours.
  • @TobiGr added support for extracting a channel’s URL and verification status in SoundCloud playlists. They were already available for YouTube playlists.

  • @AudricV added support for the new “live” URLs on YouTube (of the form https://www.youtube.com/live/LIVE_ID), so the app doesn’t reject these URLs as unsupported anymore. We pride ourselves on being inclusive of everything, including links of all kinds.

  • @dhruvpatidar359 removed the redundant/overlapping toast shown on Android 13+ when copying to the clipboard. Android 13 has added its own cool mini-clipboard box thingy that shows for a while in the corner upon copying something, so the toast wasn’t needed anymore.

Yes, we are totally up to date with Android versions!
  • @shivambeohar removed some empty space to the right of the bottom-player close button, thus making it larger and much easier to tap.

  • @Isira-Seneviratne improved the resolution of player notification thumbnails by using smoother bitmap downscaling, which made the resulting image way better!

You can't count the pixels anymore, even if you try!
  • @pratyaksh1610 renamed the “Help” button to “Fast mode” in the “What’s New” tab’s menu, to make it self explanatory.

  • @Poslovitch (with inputs from @Stypox) added a text hint to improve discoverability of the subscription import function for new users. It shows up whenever the user has zero subscriptions.

  • When the user sets the theme to something other than Auto, it causes the Night theme sub-setting to disappear. @Jared234 changed it to become greyed out and disabled instead, to improve discoverability.

  • @Jared234 also changed the player’s seeking behaviour so that it no longer pauses the stream being played while the user is seeking.

  • @pratyaksh1610 added an icon for the “Play All” button in channels and playlists.

You get an icon, she gets an icon, everyone gets an icon!
  • @pratyaksh1610 also added a language suffix to downloaded subtitle filenames. For those people who download subtitles in multiple languages for some reason, you’re welcome.

  • @Redirion made the Samsung DeX availability check run only on Samsung devices, because it’s pointless to run it on your Super-pHone Ultpro MinMax Pikachu Edition.

  • @Marius1501 made “What’s New” a default tab on the main page. This will help users discover a core functionality of NewPipe, which is new stream feeds and updates. So far, users have had to stumble upon it themselves by delving deep into the app settings. They also changed the tab’s icon to better reflect its function, and prevent confusion with RSS feeds.

What's new? That's new! 4 tabs by default.
  • @Marius1501 also made several improvements to channel items in grid lists. The thumbnails have been increased to a sensible size. A truncated channel description is shown, as well as the subscriber count. The description can be 2 or 3 lines high, depending on its size.

  • Finally, @Marius1501 also changed the YouTube Chapters icon in the player from a numbered list (which looked very similar to the queue icon, a bulleted list) to an open book.

We are an open book. (This joke wrote itself.)

Improved in 25.1

  • @Stypox decreased the size of thumbnails in the card view a bit, based on negative feedback from the community. They had been increased earlier in 0.25.0.

  • @Trust04zh improved UI behaivour for the resume playback functionality.

  • @petlyh added support for loading additional comments in Bandcamp! Now scrolling beyond the first page of loaded comments works!

  • @petlyh also ensured that comments show as disabled on Bandcamp radio streams. Because, you know, there are none. None whatsoever. Anyway, this way you don’t get a “Sorry something went wrong” error with a pointless retry button, either.

Fixed in 25.0

  • @Theta-Dev fixed the extraction of subscriber and video counts in search results for YouTube channels which have handles.

  • @lonewolf2208 removed a redundant check for YouTube videos which prevented showing their view count in lists.

  • @TobiGr fixed the error shown when search results contain YouTube channels that don’t have any subscribers yet.

  • @Stypox fixed opening YouTube Music Mix URLs in the app. Earlier, YouTube treated a Music Mix as just a special kind of YouTube playlist. Now it is treated like a YouTube Mix instead, so the code parsing it had to be changed accordingly.

  • @AudricV fixed the YouTube channel ID extraction needed for the RSS feed button in channels, which was broken for users in some regions.

  • @AudricV also fixed the extraction of Likes on SoundCloud.

  • @TobiGr fixed extracting YouTube comments which contain a hashtag, which were throwing an error previously.

  • @han-sz fixed the persistent translucent overlay on the player when in desktop/DeX mode, or using a mouse/non-touch input.

If you want that effect now, you can put paper in front of your TV.
  • @Douile made the Enqueue next option show only when in the middle of a queue, not at the end, where it had the same effect as Enqueue and was hence redundant.

  • @dngray removed the dead Privacy Tools PeerTube instance from the manifest. Unlike URLs of private YouTube front-ends, where only the relevant sub-string is parsed, the app will try to open the actual PeerTube instance behind that URL, which is a dead end in this case.

  • @pratyaksh1610 fixed a crash that occurred upon tapping Add to playlist from the 3-dot menu while the playlist was still loading. Since the Share button is non-functional until the playlist has loaded, a toast was added to inform the user.

  • @evermind-zz enabled using the background player even when there are no separate audio streams! This was achieved by using the video stream as the source for audio. Keep in mind that the entire video stream will still be played, so you will not be saving any data by doing this. For videos with separate audio streams (which means most of them), they will continue to play just the audio part as before. PeerTube was the service most impacted by this limitation, so those users can rejoice.

Who even needs visuals?
  • @devlearner improved the Open action dialogue, so that it can survive screen rotations. They also added the Fetching stream info toast before the Download dialogue, just like the other ones. A bug on older Android versions was also worked around, where the Open dialogue wouldn’t appear on the first try after a cold app start.

  • @devlearner also fixed a bug which caused touch events to be blocked while stream info was loading for the Download or Add to playlist dialogues.

  • @petlyh ensured that the app asks for the Draw over other apps permission when enqueuing a video in the popup player while the queue is currently empty, instead of just crashing.

  • @Jared234 fixed a bug where using the option to Remove watched videos from a playlist also removed the currently playing video from the queue. This also fixed a bug with the same underlying cause, where deleting videos from a playlist and then using the Remove option caused the deleted videos to reappear.

  • @Jared234 also fixed a bug preventing the display of multiple empty playlists in the Bookmarked playlists tab.

  • Clearly on a roll, @Jared234 also fixed a bug where playing a playlist/channel in the background, and then trying to play another stream from the same playlist/channel, caused the player to stop.

  • After @FireMasterK improved the underlying code, @Stypox prevented ellipsised links in comments from being tapped, to not allow garbage URLs to be opened. Previously, too many characters were being truncated while ellipsising, which has now been limited to the last 2 characters.

Fixed in 25.1

  • @Redirion brought joy to the lives of a small portion of our users whose accelerometer is missing but the device has a bug where it still reports auto-rotation as working, thus hiding the full screen button. Now it is shown.

  • @pratyaksh1610 fixed a crash when tapping on empty comments. Still an open question why you would do that, but now you can. Have fun!

  • @Stypox made NewPipe correctly open URLs in the browser, and also fixed opening downloads and external players, all in one PR. This was broken in 0.25.0, but since you’re getting a 2-in-1 blog post, it’s better to know.

  • @pratyaksh1610, in a second contribution, fixed the tiny progress bar on the thumbnail in card view.

  • @Jared234 fixed a bug where the playlist thumbnail doesn’t get updated when a video thumbnail or the video order is changed in the playlist.

  • @AudricV fixed the null comments shown when the original comments had hashtag links. A similar fix was also applied to descriptions containing hashtags.

Localisation in 25.0

Localisation in 25.1

  • Lots of updates, lots of thanks to people continously translating!

Nerd Talk in 25.0

  • dependabot updated: gson, junit-bom, and jsoup.

  • @Isira-Seneviratne improved the code in YoutubeParsingHelper, and bumped the required Java version to 11 in the Extractor. This also allowed using some functions introduced in Java 11.

  • @Isira-Seneviratne replaced custom UTF-8 usage in URL builders throughout the Extractor codebase with StandardCharsets.UTF_8. The app code was modified accordingly.

  • @FireMasterK noticed that Jitpack gradle builds were still defaulting to Java 8, so ensured that they use Java 11 from now on, the minimum required version as mentioned above.

  • @lrusso96 simplified and optimised the code for duration parsing of YouTube videos.

  • @TobiGr fixed the extraction of detailed error messages for certain unavailable streams on YouTube.

  • @FireMasterK updated checkstyle from 9.3 to 10.4, an upgrade that was blocked on making Java 11 the minimum required version, and also removed an unused dependency.

  • @Stypox blocked the wrong nullable/nonnull imports from being used, via checkstyle rules. Now Android-specific ones are used for the app, and Java ones for the Extractor. Earlier, both codebases used a mixture of both, which had to be cleaned up frequently.

  • @Isira-Seneviratne added the Locale.forLanguageTag() function to the app, which was blocked on the minAPI being bumped to 21. Since the Extractor still caters to apps with lower minAPIs, the compat version of the function was used there for backwards compatibility.

  • @TobiGr ensured that the app reports exceptions thrown while getting a PeerTube stream’s subtitles.

  • @Isira-Seneviratne used immutable Map methods in multiple places in the extractor, simplifying a lot of the code.

  • @Isira-Seneviratne made PendingIntents immutable on Android 6.0 and later, to fix compatibility issues with Android 12+.

  • @goyalyashpal changed the image-minimizer bot in our repo to specify image width instead of height, which fixes appearance in multiple display sizes and dimensions.

  • @TacoTheDank updated the Sonarqube, ACRA, Android Gradle Plugin, and Desugaring libraries. @TobiGr and @Isira-Seneviratne later updated the latter two.

  • @Isira-Seneviratne replaced some bare math operations with a safer, dedicated function.

  • @Isira-Seneviratne used SparseArrayCompat instead of the regular version to avoid integer boxing, which reduces RAM usage for thumbnail previews, searches, and downloads.

  • @Stypox set the compileSdk and targetSdk to 33 (Android 13), and updated LeakCanary from 2.5 to 2.9.1. Several code changes accompanied this SDK version bump.

  • @Isira-Seneviratne refactored VideoDetailFragment and VideoPlayerUi to use lambdas, hence simplifying the code.

  • @Isira-Seneviratne updated RxJava and RxAndroid, which should reduce power consumption on mobile devices! You must spend all that extra battery juice on watching more videos, obviously.

  • @Isira-Seneviratne simplified some code in NotificationModeConfigAdapter by using ListAdapter.

  • @Isira-Seneviratne cleaned up Optional-related code by removing a method no longer needed, and via using Optional method chaining.

  • @Isira-Seneviratne removed Runnable variables from the double-tap and download handlers, and replaced them with lambdas.

  • @Isira-Seneviratne used WindowCompat instead of the regular library to replace deprecated UI visibility flags.

  • @obfusk provided a critical workaround needed to re-enable reproducible builds for NewPipe.

Nerd Talk in 25.1

  • @Stypox reverted the WindowCompat change from 0.25.0 because of some issues with the player that emerged, like having to tap twice to show controls, and being unable to scroll down in landscape mode using the full screen button.

  • @AudricV added the Locale property to audio tracks to help distinguish between languages. Later, @Theta-Dev added support for audio track types (e.g. original, dubbed, or descriptive on YouTube). The long and short is, we’re getting closer and closer to supporting multiple audio tracks!

  • @AudricV also fixed the missing extraction of the “No views” string in stream items in some cases.

  • @bjoernls fixed a parsing exception that occurred when a YouTube video’s comments were disabled.

  • @fynngodau fixed some Bandcamp tests failing due to changed website code.

  • @TobiGr also updated the JDK version from 8 to 11 for the GitHub Action concerning the documentation.

  • @AudricV fixed a failing PeerTube comment test and simplified its code.

  • @Redirion updated ExoPlayer to 2.18.5. This is the last ExoPlayer version that will ever be released. R.I.P. You shall be missed. As a consequence, this will also be the last version of NewPipe to be released. We’re just too sad and broken up about ExoPlayer’s untimely demise, you see. sniffle (UPDATE: Google now says it’ll backport bug fixes to the library for some time. Yay for lazy downstream apps!)

  • In case you really believed that, we’re kidding. The ExoPlayer code is just being merged into the main Android Media3 repo. So we’ll just shift to using that after a while.

Where to get this brand-new version

NewPipe notifies you about new versions. You can download them when you press the notification, which will take you to the GitHub Releases page.

If you use the F-Droid app, it, too, notifies you about updates for NewPipe. Please keep in mind that it can take F-Droid a while to update their repository. If you have problems installing the update, you may need to uninstall NewPipe and then install it afresh. (Make sure to backup data by exporting your database from the Settings > Content menu.)

If you already installed NewPipe from F-Droid’s repository, to get this version of NewPipe you can do one of the following:

Note: If you installed NewPipe from GitHub Releases you will not have to uninstall NewPipe to switch to our custom repo. Just let it update your current version. Make sure you back up your data as mentioned in the warning at the top of the FAQ page!

Now that you’ve (hopefully) updated, please let us know what your experience of the latest release is, especially bugs in need of fixing. As usual, you can reach out to us via IRC (#newpipe on Libera.Chat), open issues on GitHub or, ideally, use our built-in crash reporter to send us machine-readable issue reports. You can even send in fixes yourself.

If you have any other questions, feel free to post them in the comments here and someone will reply to you. Also, thanks for reading it until the end! We put quite some time into these blog posts.

See also:  pinned  release

Let us know what you think!

Please read our rules before leaving a comment!

→ Feature requests or bug reports need to be reported on GitHub! ←