NewPipe - a free YouTube client's Avatar

NewPipe - a free YouTube client

@newpipe.net.web.brid.gy

[bridged from https://newpipe.net/ on the web: https://fed.brid.gy/web/newpipe.net ]

78 Followers  |  0 Following  |  24 Posts  |  Joined: 04.11.2024  |  1.782

Latest posts by newpipe.net.web.brid.gy on Bluesky

Preview
NewPipe's journey to FrOSCon 2025 + we are looking for freelancers! A few TeamNewPipe members attended FrOSCon on 16–17 of August 2025, read about our experience here! Also, let us know if you’re interested in getting paid for working on NewPipe and its infrastructure. ## Day 0 NewPipe running on the car Did you know that NewPipe’s first line of code was written in Ansbach? By coincidence, on our way to FrOSCon, our team members @fynngodau, @TheAssassin and @Stypox passed by this town. We rented a car, loaded merch into it and begun our ~ 400km trip to Sankt Augustin. The journey got long and boring due to various traffic jams, but fortunately we could entertain ourselves with (guess what)… NewPipe on Android Auto! Fun fact: we followed our own setup guide to set it up. Our stand after the preparations After arriving in the _Bonn-Rhein-Sieg University of Applied Sciences_ , we set up our booth and mounted the various marketing material we had prepared: rollups, banners, and even a very professional booth structure. The designs for the marketing materials had been made weeks in advance by @TheAssassin and @Stypox; we hope you like them! Once everything was mounted and we were satisfied with the placement of the various items (how many computer scientists does it take to center a ~~div~~ banner?), we went to our hotel and had a good night of sleep. ## Day 1 Our stand again, with the Android Auto demo and the two demo phones, and with plenty of merch After having breakfast at a local bakery, we delved into the first day of the conference. A lot of NewPipe users came by to express gratitude: thanks for the wholesomeness to everyone who did that! Some other visitors instead did not have NewPipe on their phones (oh no!), but they could try it out on our cool demo devices, which usually convinced them to give NewPipe a shot (except for, well, iPhone owners). We were also able to show off the progress on the refactor and on NewPlayer to the keenest users. The merch we had on our tables was: flyers, stickers, and NewPipe-styled Bierdeckels (i.e. coasters), which we offered to unsuspecting people passing by. Additionally, we had the NewPipe e.V. statute available for reading plus some signup forms in case somebody wanted to become a member. As you might know, we recently released 0.28.0 with support for Android Auto (blogpost), and wanted to show it to our users. Unfortunately the building did not have a big enough entrance to fit the rented car (just joking!), so we had to use Desktop Head Unit to emulate Android Auto on a laptop as a demo. Oh, right, I almost forgot! At some point of the day we adopted a new person to our booth: @lm41 joined us to complete a NewPlayer PR and also occasionally talk with visitors. Thanks for the contributions and for the chats! Try to spot @fynngodau 👀 In the evening there was a social event for FrOSCon participants on the grounds of the university. It was an occasion to have longer conversations with fellow project maintainers and/or users, and also to have some fun _in a pool of plastic spheres_. @TheAssassin allegedly reported not having done something this silly in a while :-D ## Day 2 The yummi donuts offered in the backstage On the second day we didn’t go to a bakery for breakfast, and instead relied on the free food for exhibitors available in the backstage (which was also there for lunch, later). Thanks a lot to FrOSCon organizers for the catering! @Poolitzer also joined us on this day, and brought some more Bierdeckels (we almost ran out!) and a few funny jokes. Having more NewPipe personnel meant we could alternatingly take some time off to take a look at the other cool projects at the fair. The second day went by similarly to the first, except maybe for the fact that more power users seemed to show up, which led to more technical discussions. @lm41 joined us again, this time to migrate NewPipe’s Gradle scripts from Groovy to Kotlin. Later in the day, he even helped with the teardown. We finished packing up at 17:30, only 30 minutes after the end of the conference, and returned back home quite exhausted (we fortunately did not encounter any traffic jams this time). Overall, we all enjoyed participating to the conference, showing off NewPipe, making people aware of the existence of NewPipe e.V., and chatting with one another and with visitors from the conference. A deep thank you goes out to the organizers and the helpers of the conference, who made sure everything would go smoothly! ## We are looking for freelancers After setting up two successful contracts in the past (see here and here), the last of which is still ongoing, NewPipe e.V. has two more open freelance positions. One is for an Android developer that could bring forward NewPipe’s refactor, and the other is for a sysadmin that could maintain the servers. Read all details and apply on NewPipe e.V.’s website! Paying contributors would not be possible without your donations, for which we are very grateful!
17.08.2025 08:00 — 👍 0    🔁 0    💬 0    📌 0
Preview
NewPipe 0.28.0 brings support for Android Auto This version brings support for Android Auto integration and allows you to add feed groups as a tab on the main page. Multiple improvements and fixes to the YouTube and SoundCloud implementations were made, and progress on the refactor continues steadily. Oh, and you can meet the team at FrOSCon! ## Highlights ### Android Auto integration Thanks to the joint effort of many contributors and a lot of patience, we are happy to announce: NewPipe now integrates nicely with Android Auto! No more boring rides for you - **choose music or podcasts to listen to directly from your car’s interface**! More specifically, the car integration allows you to access and play streams from your **history** and from your local and remote **bookmarked playlists** , search YouTube or any other service you have currently selected in NewPipe, and control the player including the **playing queue**. _Make sure to only use those features when it’s safe, to avoid getting distracted._ Want to check it out? Learn how to install NewPipe on your car’s infotainment system here. #### Player #### Queue #### Home (bookmarked playlists) #### Home (history) #### A local playlist #### Search screen The story of this feature begins back in 2022, on 25th of December to be exact. On this day @haggaie opened a Pull Request on GitHub promising to add support for Android Auto. After multiple rounds of reviews, testing by different people with different cars, finding and fixing bugs, the player was refactored almost completely on our main development branch which made many of the changes incompatible. Even though @haggaie was left a long time without reviews and feedback, he switly answered and took up the work once our team finally had time to work on his PR. We really let him wait more time than we should have. The team gladly appreciates his patience with us ❤️. After updating the code base, @Stypox took over the development of the Android Auto integration because he was more familiar with the new player structure and finished the work begun by @haggaie in Feburary 2025. The Android Auto integration required complex changes to our internal player code. After even more rounds of reviewing, testing, and bug fixing, the PR was finally merged in March. Thanks to the nightly builds a broad range of users tested the feature on their phones and cars, which led to more critical bugs being fixed before ending up in a release. We want to thank everyone involved in this! ### Other highlights Adding a feed group tab This release is not all about cars and what you can do with them. It comes with more improvements and fixes. You can add **feed groups** as main screen tabs to directly access your personalized and grouped feeds. This can be done from the `Settings > Content > Content of main page` option by adding a `Channel group page` item. This feature was introduced by @dev-victoria who opened their first PR on GitHub and contributed two other fixes to this version as well. Thank you! @AudricV added a bunch of new YouTube kiosks to the app’s drawer, changed the default kiosk to “Live” after looking at the results of a community poll, and added a message that explains this change when you first open the app in the new release. The default kiosk had to be changed because the previous defualt kiosk, “Trending”, was dismissed by YouTube (although it’s still working for now). Thank you for your meticulous work! In this release the SoundCloud implementation got some love, thanks to the contributors involved! Most notably, @watermelon42 added support for extracting and displaying content that is liked by an artist or user as a new **“Likes” tab** in the channel page. @AudricV then added support for **AAC 160k** streams. @TobiGr removed the now-defunct “Top 50” kiosk, and if you had it among your main page tabs, you will get an alert dialog explaining that it was removed. On a separate note, we are aware that there are **frequent player crashes** when playing long SoundCloud tracks, and @davidasunmo is already working on a fix, though it couldn’t make it into this release. @tfga added a button to share a local playlist as a **YouTube temporary playlist**. Nice, thanks! A few improvements were made to make the UI more user-friendly: @Profpatsch added a **hint in the search bar** explaining which service you are currently on, and @malania02 added a label to downloaded items that shows their **download date**. Thanks to both! ## Translation and Localization With this release, 68 locales received updates and 15 new locales were added to NewPipe. In addition to the in-app language chooser, you can now use the Android per-app language setting from the system’s app info page. This is a feature which was introduced with Android 13 and is now supported by NewPipe due to neat work by @mileskrell. The existing in-app preference is automatically migrated to use Android’s per-app language setting. Let us know if you encounter any problem with this new setup, such as missing languages. In other localization related news, @VougJo23 fixed a visual bug which resulted in RTL usernames of comment authors not being displayed correctly next to LTR timestamps, and @mileskrell included the locale country when selecting the audio track in the player for better disambiguation. ## Bug fixes As usual with every release, we do not only introduce new bugs you can run into, but also fix some. Here is a list of the most notable ones: * The text in the dark theme is now back to being white, thanks to a workaround around an Android system bug found by @Thompson3142… except that is was already seemingly fixed in 0.27.7? This bug was caused by the WebView used to solve YouTube integrity checks since 0.27.6, however in 0.27.7 we temporarily switched to a different method to get YouTube data that does not require integrity tokens. In 0.28.0 the bug is now solved for real anyway. * @AudricV, @litetex and @Stypox solved various YouTube annoyances caused by recent changes made by the service: * playlists not loading more than **100 items** * **recommendations** not appearing below videos * search sometimes not showing any results * podcasts not appearing anywhere * playlists of shorts appearing as empty * searching for YouTube Music albums or playlists resulting in errors and incorrect information * Did you also get strange UI crashes in the History page, for example when deleting entries? This was a longstanding bug with an unknown cause, until our hero @j-haldane ~~killed the monster~~ fixed it for good! * @Isira-Seneviratne fixed the grouping-by-channel of new streams notifications when a video has a different uploader URL than the channel that was fetched. Thanks! * @har-123 noticed that the three-dot menu items in the channel page were multiplying like rabbits when no one was looking, and fixed their sneaky duplication. Cool! * @AndrianaBilali fixed timestamps not being clickable when viewing the main comment of a comment replies thread. Thanks! * @koukibadr, @TobiGr and @Stypox fixed a UI crash in the search screen when the next page can’t be extracted (now in such cases the proper error snackbar is shown instead). Thank you! ## Progress on the refactor ### NewPipe-side As explained in previous blogpost, the refactor is currently happening on the `refactor` branch of the NewPipe repository. This GitHub Project tracks the progress, which has been steady since the updates provided in the previous blogpost. @Profpatsch made some progress on the integration between NewPipe and NewPlayer under a contract by NewPipe e.V.: in particular, he migrated most of the player and of the video detail screen from Java to Kotlin, while maintaining functionality intact. @Stypox assited to finalize his work, so thanks to both! @SttApollo refactored the empty state view used throughout the app to follow Jetpack Compose best practices. See updated screenshots here, thanks for the effort! @Isira-Seneviratne rewrote the subscriptions import/export so that it uses coroutines, implemented the equals and hashCode contracts for `PlayQueue` and `PlayQueueItem`, converted the play queue classes to Kotlin, fixed an issue with importing/exporting the database by migrating the `.zip` database import/export to use Path, and generally kept the `refactor` branch up-to-date by regularly merging bug fixes and improvments from the dev branch. Thanks for the constant maintenance! @snaik20 reviewed refactor PRs alongside @Isira-Seneviratne, big thanks to both of them for taking up that mission! @Stypox and @Profpatsch also helped from time to time. Please keep it up! ### NewPlayer-side NewPlayer's seek chapter title preview NewPlayer's updated audio UI and audio queue @lm41 introduced seek chapter title preview in this sleek PR, see the following screenshot: @nicholasala added tests for NewPlayer here, and @crazo7924 provided a small fix to make them run on the CI. Those tests will help making sure future versions of NewPipe will have less bugs! If you want to chip in and write more tests, you’d be very welcome! @crazo7924 improved the audio UI by shifting the title upwards in landscape as you can see here, and @theScrabi returned from his busy schedule to add a better audio queue UI in this PR. Very cool! Onto less visible changes, @Profpatsch made it easy to find an activity everywhere and implemented sorting as comparator in `StreamTrack`, @tinyboxvk fixed some typos, and @crazo7924 fixed a bug to correctly handle auto brightness. Thanks even for the invisible yet important changes! ## Meet us at FrOSCon! The NewPipe e.V. is paying for the attendance of some TeamNewPipe members to FrOSCon, a free software conference happening on the 16th and 17th of August in Sankt Augustin, Germany. Come and visit us at our booth, and get some stickers and flyers! ## Wanna Contribute? If you like the app enough to want to make it even better, or you noticed some glaring error that you can’t help but want to fix, you can read our contribution guidelines and do a Fix-It Felix. Or, if you’re bilingual (or even multilingual), you could help translate the app. **Feature additions** to the old codebase have been put on hold for now. We’re pretty swamped as it is, and are working to clear our large (and critical) backlog first. Our next priority is to finish the rewrite of the codebase. We are making progress - slowly, but steadily - and you can help out on that too (and learn modern Android development practices along the way). ## Downloads NewPipe notifies you about new versions. You can download them when you tap 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 back up your data by exporting your database from the `Settings > Backup and restore` menu.) If you have already installed NewPipe from F-Droid’s repository, to get this version of NewPipe you can do one of the following: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post Note: If you have installed NewPipe from GitHub Releases, you will not have to uninstall it 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!** ## Bugs and Support 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 Matrix #newpipe:matrix.newpipe-ev.de or open issues on GitHub. 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; you reading through it is greatly appreciated :)
20.07.2025 08:00 — 👍 2    🔁 1    💬 0    📌 0
Preview
NewPipe 0.27.6 released, state of the rewrite, state of the team TLDR: NewPipe 0.27.6 fixes the YouTube issues by performing the integrity checks now required by Google; NewPipe is being refactored heavily on the `refactor` branch and you can help and provide feedback on a nightly version; NewPipe will soon have a new completely rewritten player; the NewPipe team is struggling to keep up with the project’s demands due to dwindling free time of its members. _Hello everyone,_ This blog has been pretty quiet in the last few months, but many things happened in the NewPipe project: the **YouTube** service implementation had to be **fixed** a few times with complicated patches, and in the meantime NewPipe was being **rewritten** in many parts. We are sincerely sorry about the lack of communication, and this post is meant to address the aforementioned points and explain the significant **hindrances** the NewPipe team is currently facing. _Note: this post is quite long, but we assure you, it’s also full of information about the State of the Pipe! It’s split in 4 sections:Team issues, The refactor (take look at the nice **screenshots**!), Release 0.27.6 and YouTube shenanigans._ ## Team issues First of all, let’s talk about the state of the team, which heavily influences all of the other issues. So what is happening? All active team members are really **busy** with their lives and can only find very little time (if at all) to work on NewPipe projects. This means that development is going really slow and there is no workforce to handle big changes, and so lately only small and easy-to-review fixes were merged. It has been difficult to acquire new team members in the last few years (probably) due to the **complexity of the codebase** , which makes it hard for a newbie to make a good Pull Request (PR), and also makes it hard for team members to provide clear instructions in reviews. More often than not, the maintainers end up polishing and completing PRs opened by external contributors, because _even the maintainers themselves don’t know what needs to be done_ before trying out some stuff on their own. In mid 2023 we acknowledged that the codebase’s complexity was getting in the way. We thus decided to focus on **rewriting** the badly written components (see The refactor below), but first we wanted to **merge all remaining big PRs** , which otherwise would have grown incompatible with the new codebase. We finished doing so in mid 2024 after completing support for _channel tabs, comment replies, image quality selection, bookmark ordering and multiple audio tracks_. Unfortunately we had to drop the search sorting/filters PR, because the proposed changes in NewPipeExtractor did not fit in well with the existing code structure. 0.27.0 was the last release to add significant new features, and we only focused on the rewrite from then on, except for bugfix releases. In late 2024 and 2025 the NewPipe e.V. **hired two contributors** (first Schabi, then Profpatsch) to work on the rewrite, so fortunately they have been able to keep some _gears_ turning. Despite this, we still need new contributors to get the _engine_ back to full speed, and we especially **need new team members** that _review_ PRs and are _knowledgeable_ about which requirements need to be met before approving a PR. Many PRs opened on the NewPipe repository share a common challenge: while authors often provide a Proof-of-Concept that demonstrates the idea effectively, **refining all details** to finally merge the PR **requires much more effort** , which often falls on the maintainers. The necessary steps to make a PR ready might include _making the UI nice and responsive to screen size, thinking about the user’s usecases and seeing if they are fulfilled, ensuring the code is well structured and complies with Android best practices, adding comments and documentation, testing the changes on various devices with various usage patterns_. The team is also lacking some **triaging manpower** to handle all of the issues and discussions that are opened on the repository. Despite this it is usually easy to identify new issues/regressions or pressing problems thanks to the active community, but it is much harder to distinguish old tickets that are useful from the niche ones. I want to end this paragraph with a **call-to-action** : if you have some time and want to help, feel free to get in touch with us on the Matrix channel and ask us for something to work on, and **we will give you indications**. When opening a Pull Request, make sure your proposal is not just a Proof-of-Concept, but **provide the best code you can write and highlight the areas that need more work** , so the team can review and merge the PR fast. If you want to learn modern Android development (Kotlin, Jetpack Compose, Hilt and other modern practices), working on the NewPipe rewrite might be a good _opportunity_ for you, and the team members will be able to provide you with good guidance. With this said, we want to **deeply thankall of the contributors** that _opened a PR, fixed a bug, proposed a design, helped triaging an issue,_ … You are clearly the best! Bonus note: the NewPipe e.V. ships merch to active contributors and organizes in-person meetups (like at FOSDEM two weeks ago) 😉 ## The refactor As explained above, in mid 2024 we finally started working on the awaited refactor. For reference, the original announcement is here, the **project board** with the issues to tackle is here. We chose a mix between just _refactoring_ (when the current code is already good enough) and fully _rewriting_ (for UI components and for the player). The refactor is currently happening on the `refactor` branch of the NewPipe repository, so that the `dev` branch can still be used for hotfix releases and maintenance bugfixes. The following points explain our efforts and objectives, along with **screenshots** and a video. ### Rewriting the player A showcase of the NewPlayer test app As explained in this previous blogpost, NewPipe’s current player is **buggy and mis-structured**. Schabi was contracted to rewrite it from scratch by the NewPipe e.V., and he delivered a great implementation in October 2024. The new player (or rather, _NewPlayer_) uses media3 for playback (a successor of ExoPlayer), and was built in a separate repository to ensure separation of concerns and so that other apps can possibly use it too. You can **read Schabi’s announcement** here, find the source code here and download a test APK from here. Now the e.V. signed a contract with Profpatsch, who picked up Schabi’s work and is integrating NewPlayer into NewPipe. Let’s wish them and us a lot of success with their work! _If you have experience with media3, ExoPlayer or media apps on Android, we’d love to get some feedback from you on the architecture and lifecycle_ 😌 ### Migrating to modern libraries NewPipe’s codebase dates back to 2015, when the Android library landscape was a lot different. New architectural patterns, new good practices, new programming languages and new libraries have emerged since then, and we want to benefit from them in the refactored codebase: * NewPipe is still a mix of Java and Kotlin, and we would like to complete the **move to Kotlin**. This means making use of Kotlin’s language features, like nullability checks, but also switching from RxJava to the built-in coroutines. * We want to migrate every **UI** component to **Jetpack Compose** , a UI toolkit which employs a _declarative_ approach as opposed to the default Android XML-based _imperative_ approach. It makes development significantly faster and less error-prone, since it allows writing UI components directly in Kotlin and favours having a single source of truth for the app’s state. * We want to embrace the **Model-View-ViewModel** architectural pattern (the standard one for Android apps). * We want to use Hilt for **dependency injection** , use `DataStore` instead of `SharedPreferences`, modernize the build system, … ### Redesigning the UI (in Material 3) While migrating the UI to Jetpack Compose, we want to take the opportunity to redesign the most used UI components and make sure they are _easy_ to understand, _convenient_ to use, _powerful_ , and _nice_ to see. We also wish to adopt Material 3. Users often ask for new features, and when they are told that those features would be in the way of the average user, they ask for **settings toggles** to tune the app’s behavior. While having customizability is good, _too much of it is almost equivalent to not having it at all_ : If there are pages upon pages of settings, would you really go through and try what each of them does? Moreover, more settings implies more possible configurations, which implies more code to maintain, which implies more bugs. The redesigned bottom-sheet long-press menu Therefore it is important to make sure that app designs are intuitive enough for the average user, but also provide advanced features for power users without introducing too many settings. An example of our efforts to achieve this goal is the redesigned **long-press menu** , which will be used when you long press on videos, playlists and channels. It is still in the works and the final design might change, so feel free to provide feedback in our Matrix channel or in the Pull Request. ### How to test the current progress Although NewPlayer and the long press menu still need some work, plenty of other stuff is already complete (see below) and you can test it by downloading **nightly APKs** from here. @litetex also conveniently setup an _unofficial_ F-Droid repository that ships both the normal nightly and the refactored nightly versions, see here. ### Completed migrations and screenshots The rewritten related items section The first component to be migrated to Jetpack Compose and Material 3 was the **related items** section, thanks to @Isira-Seneviratne. Isira’s Pull Request also included some general code that handles lists and that will be used by all NewPipe lists as the refactor progresses. If you want to chip in on this foundational code, take a look at the comments at the bottom of the PR. @Isira-Seneviratne also provided the initial implementation for the migrated **comment section** , which @Stypox took up and redesigned, thanks to both! You can easily contribute by fixing a few leftover bugs highlighted in the comments at the bottom of the PR. _Finally comment replies behave normally!_ The revamped comment section with replies shown in a bottom-sheet dialog @Isira-Seneviratne and @Stypox worked (again) together on the reimplementation of the **About screen** (_that’s the most useful part of the app, right?_). In particular they made use of the AboutLibraries Gradle plugin which automatically compiles information on the dependencies which can be accessed at run time. This saves the developers from having to hardcode these details about the libraries used in NewPipe. The improved about screen with an autocompiled set of dependencies @Profpatsch migrated the **empty screens** with sad faces that appear in various places of the app. Thank you for this change that moves the app one step closer to Jetpack Compose! Look how cute the new kaomojis are! Onto the under-the-hood changes, @snaik20 introduced Jetpack Compose in the app and set up the initial theming support. @JL0000 moved dependency declarations from Gradle scripts to version catalogs, making dependency management easier. @Isira-Seneviratne changed the image loading library from Picasso to Coil 3, which has better support for the Compose environment. Thank you to everyone who contributed, with big or small changes! As you can tell also by looking at the GitHub Project, there is plenty of stuff to choose from if you wish to contribute 😊 (though make sure to get in touch with the team before starting to work). ## Release 0.27.6 Here are the major changes to YouTube that were shipped in v0.27.6: * We fixed loading stream details for YouTube videos, which appeared as “iOS player response is not valid”, by using the web client instead of the iOS one. * We fixed 403 HTTP errors for streams on YouTube after ≈1 minute of playback. To do so, we are now running YouTube’s code to pass the integrity checks of the desktop website. **This requires an Android WebView installed and enabled on your device**. In case the WebView is unable to run YouTube’s code for whatever reason, we fallback to other methods that may be affected by 403 HTTP issues after many requests. We therefore recommend you to use to an up-to-date WebView on your system. Note that you should be able to change the WebView in Android’s developer options to one other than the preinstalled one, which may be useful if your device is outdated. Other important changes: * @neosis91 fixed a bug where we weren’t closing resources of HTTP requests the extractor makes, causing potential memory leaks * @Stypox fixed fetching stream info twice when loading a video details page after a fresh app start * @theScrabi added a donate button on the drawer redirecting to the newpipe.net’s donation page, which was also enhanced * @AudricV made the extractor not try to obtain the URLs of DRM-protected streams on Soundcloud tracks, which saves some bandwidth on licensed songs from major music companies; the regular formats are still here, at least for now * @Thompson3142 fixed captions size not being adapted according to the system settings * @AudricV switched the fallback method for age-restricted YouTube videos to embeds. Only very few age-restricted videos can be played in embeds, e.g. game trailers. Unless there is a new workaround/bypass found, other age-restricted videos can be only played with a YouTube age-verified account. * on YouTube, 720p video streams with a framerate in the range 24~30 are now available again when videos have a framerate higher than 30 (e.g. 60 fps) * unfortunately livestreams can now only be rewinded up to 30 seconds (see why in the explanation below). Ability to rewind up to 4 hours is expected to be provided in a future release. ## YouTube shenanigans (aka _why NewPipe broke twice_) Since several users asked why NewPipe broke twice very recently, here is a basic explaination (to learn even more, please look at the code changes). ### How NewPipe’s extractor works NewPipe uses an extractor that fetches **content from services**. As described in the app README: > NewPipe works by fetching the required data from the official API (e.g. PeerTube) of the service you’re using. If the official API is restricted (e.g. YouTube) for our purposes, or is proprietary, the app parses the website or uses an internal API instead. This means that you don’t need an account on any service to use NewPipe. So for YouTube, NewPipe’s extractor is a scraper. As you may believe, an internal API or a website can always change at any time, which is why we need to adapt the extractor to services changes. ### Breaking change 1: 403 HTTP issues (fixed in 0.27.6) The extractor **spoofs** YouTube clients to get streams. As YouTube requires **integrity tokens** on the browser and on some devices, we used to spoof to clients for which integrity checks were not yet in place. The _iOS_ client was one of them, but it isn’t the case anymore: a roll out is in progress. Without valid integrity tokens, obtained after passing integrity checks, you cannot download/play videos for long timespans (if at all). Therefore we switched to the _web_ (i.e. browser) client, and implemented the integrity checks in a WebView (which is basically a small browser any app can use to embed web content, see above for more info). ### Breaking change 2: invalid iOS player responses (fixed in 0.27.5) YouTube started to require a **visitor data** string in some requests with some clients (the ones used to get streams). It is used to identify in a unique way the session of a user and is returned by YouTube servers the first time a client makes a request. If a visitor data is not provided, YouTube returns a _“Sign in to confirm that you’re not a bot”_ error. To fix this issue, @Theta-Dev opened a PR where a random visitor data is generated locally every time. ### Breaking change 3: invalid iOS player responses (fixed in 0.27.6) A couple of weeks ago, YouTube started to **reject randomly generated visitor data** , and so required visitor data generated by their servers. NewPipe’s extractor now makes requests to get a visitor data from YouTube for every player request we make, regardless of the client (just in the case this change applies to all clients at some point). YouTube is requiring integrity checks in their iOS client for most formats returned. We are not able to pass them, so we removed usage of this client in NewPipe. This unfortunately means that livestreams cannot be rewinded for more than 30 seconds, since the _web_ client does not allow to rewind livestreams in HLS manifests for more than this duration (while the iOS client allows to rewind up to 1 hour). The DASH manifests returned by the _web_ client are known to be kind of broken and cannot be played directly in the app, but we found a workaround which we should be able to ship in the next release, allowing to rewind up to 4 hours! All of these durations apply unless the creator disabled rewinding. ## Donations are awesome We sincerely **thank all people who have donated** to the NewPipe team and now the NewPipe e.V. or helped us in any way, we really appreciate your help and encourage you to continue doing so if you can. You can donate by following the instructions on our website. ## Conclusion and contact In the name of the team, I would like to thank every contributor, triager, translator, tester, donor, and even every user that wrote us kind emails. The community around NewPipe is truly fantastic! If you wish to start contributing, you can reach out to us via Matrix #newpipe:matrix.newpipe-ev.de or IRC (#newpipe on Libera.Chat).
16.02.2025 17:00 — 👍 2    🔁 0    💬 0    📌 0
Preview
Schabi contracted to work on NewPipe in the summer TLDR: the NewPipe e.V. will pay Schabi to work on NewPipe during the summer of 2024. He is tasked with rewriting the player, as part of the refactoring process announced a year ago. For those of you who do not know, Schabi (@theScrabi on GitHub) is the creator and first maintainer of NewPipe. After laying the project’s foundations and reviewing contributions for a few years, he found himself out of time due to his studies, and decided to hand over the maintainership to @TobiGr in 2019. He remained in contact with the NewPipe team, though, and was happy to contribute to the founding of the NewPipe e.V. in November 2022, even becoming a member of the association board. As you might know, we founded the e.V. primarily to be able to transparently handle the stream of donations coming from NewPipe (thanks a lot!). Moreover, the association also has the legal means to pay someone to work on the NewPipe project. Well, actually, the association’s purpose is more general, and includes promoting and helping out any project related to free and open media streaming clients and platforms, not just NewPipe, but this is a story for another time. Ever since the e.V. was founded, we have been looking for ways to spend the money from donations in a way that would be beneficial for the NewPipe application, for free streaming projects, or for the community. For example, we donate 600€/year to Weblate, the free software service that hosts NewPipe translations. However, we have not been able to find anyone who would do paid work on the app, since all of the current members of the team are too busy in their offline lives. This is also why the app has received very few updates in recent memory, and is one of the reasons why we want to pay someone in the first place: to have some consistent contributions. Despite that, we did not go down the road of hiring someone not in the team, because we don’t receive enough money through donations to pay a full-time salary, and because an external person would need some time to become familiar with the codebase. In the end, though, we did find someone who would work on NewPipe: Schabi himself! He proposed this idea to the e.V., and immediately resigned from the association board to avoid conflict of interest. After consultation between the members of the e.V., we decided to accept his proposal and negotiated a contract with him during the board meeting of 23/06/2024. He will work on NewPipe part-time during the summer of 2024, from the beginning of July to the end of September. Schabi’s main job will be to rewrite the player code, one of the most important yet most broken parts of the NewPipe app. The NewPipe team will provide him with specific tasks in a timely manner, which might include reviewing, bugfixing, documenting or releasing, but will mostly revolve around the player, due to the short nature of the contract. All of the code Schabi writes will obviously be published under the GPLv3 free software license, like the rest of the app. Rewriting the player is an important part of the refactoring process we announced a year ago. After hearing the feedback from many experts in that discussion, we decided not to rewrite the whole app from scratch, since it would just take too much time, and risk the app being abandoned entirely. Rather, it will be done incrementally. However, the situation with the player is different than the rest of the app: there have already been too many failed or incomplete attempts at refactoring it one piece at a time, so rewriting it from scratch is probably the best idea. Moreover, the ExoPlayer standalone library was deprecated in favour of its integration in the Jetpack Media3 library, which has partially different APIs, so we would need to rethink large parts of the code anyway. Side note, if you are reading this blog post and would like to contribute to the refactoring process, take a look at the tracking issues one (Jetpack Compose) and two (Kotlin) that were recently opened. Also, please reach out to us via Matrix #newpipe:matrix.newpipe-ev.de or IRC (#newpipe on Libera.Chat). Let’s wish Schabi luck in performing a good job then! And a huge thank you to all of the people that make this possible by donating on Liberapay or through other means!
23.06.2024 16:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
State of the Pipe 2023 As the year comes to a close, it’s an opportune moment to reflect on the journey of NewPipe over the past year and to cast a glance toward the project’s future. ## NewPipe in 2023 In 2023, NewPipe received only a few, but nevertheless meaningful updates, bringing practical enhancements to the user interface and other parts of the app. Users can now enjoy a new card view mode featuring full-width thumbnails, delivering a visual experience similar to that found in other media apps. Additionally, users can now choose image quality based on their preferences. The introduction of grouped tabs for channels/creators provides access to more content like playlists, live streams, or shorts. This change simplifies content navigation heavily. The app’s support for multiple audio tracks in one video enhances the streaming experience. It’s possible to listen to translations or other audio tracks if provided. These changes are just some hand-picked favourites of mine - many more changes were brought to NewPipe thanks to many different contributors: from bug reporters, people taking part in discussions, testers, developers, to translators. Apart from that, a lot of effort went into creating and setting up the infrastructure of NewPipe e.V. - the not-for-profit foundation aiming to support the development of NewPipe and other libre media projects. Additionally, our homepage was temporarily removed from Google search results due to a DMCA take down request. We’d once again like to thank everyone for their support in this matter. ## Plans for 2024 As you might have read or heard already, the development team plans to rewrite large parts of NewPipe because the code has become chunky over the years. We presented our plans to you earlier this year, and received an overwhelming amount of feedback. Thank you for weighing in with your ideas and experience, as well as offering assistance ❤️ Before we get to the rewrite, we are planning to merge a few remaining PRs, bringing support for search filters and hardening the import and export of NewPipe data. We have already worked on adding support for comment replies which should be shipped with a new version soon. ## A personal note At the end of this recap I want to leave a personal note. Taking a look back at what was done not only this year, but in the last couple of years, one can surely say that NewPipe has come a long way. When @schabi laid the projects into our hands 4 years ago deciding to spend more time on his studies and personal matters, I was happy to be trusted with continuing the app’s further development. ### About the people behind NewPipe Since then, multiple people joined or left the core development team enhancing and fixing both the app and the underlying extractor (e.g. @Stypox, @AudricV, @litetex, @XiangRongLin, @Redirion, @mauriciocolli, @B0pol, @karyogamy or @wb9688). This work was essential to make NewPipe what it is today: a well-known privacy and user friendly app to access multiple streaming services. @TacoTheDank and @Isira-Seneviratne often took time to do the dirty work “under the hood”, kept an eye on all the dependency updates and implemented required changes. In addition, the project has been supported by enthusiastic people reviewing and organizing tickets as well as doing large parts of the community management, and writing humorous blog posts (I am looking at you @mhmdanas, @opusforlife, @poolitzer and @SameenAhnaf). @schabi did not vanish, of course, and was there for us behind the scenes when needed, and so was @TheAssassin with taking care of the infrastructure and giving helpful advice on a variety of topics. I also loved the support and solidarity from within the open source community - be it the patient and hardworking people at F-Droid who put time and effort into providing NewPipe to you (e.g. by figuring out why NewPipe did not build reproducibly and fixing builds), the people behind Weblate providing us with a great translation service and instant help when facing problems, bloggers, journalists and internet activists making people aware of NewPipe and similar projects and making our voice heard when facing disputes with bigger adversaries, developers of similar applications when facing data extraction difficulties, developers of librearies NewPipe is relying on, and other maintainers of Android open source projects. I could easily extend the list, but I think my point is clear: Developing open source software is not a one-man show. Working with all these people has been a pleasure for me. I have learned a lot during my time as a NewPipe dev - not only in regard to coding, project or community management. ### About the community I really enjoyed the lively debates about potential new features or services to be supported and the direction of the app in general. Even if the decisions made in the end did not always completely satisfy everyone involved, I generally found the exchange with the community very positive most of the time and was able to learn from the many different views. Working on projects like NewPipe always means that a large number of different users with different ideas have to be taken into account and that those users also make their opinions and interests known. The user base has also become much more diverse over the years - what started as a projected focusing on providing privacy-friendly access to YouTube had soon grown to be a popular application attracting more than just a privacy focused user base. One of the consequences of this is that some people no longer see us developers as people who invest their free time in a project that is open for everybody to use, but as service providers who need to deliver features and fixes as fast as possible - the tone has changed considerably over the years. Minor issues like these diminish the enthusiasm and interest of developers. Please make sure to treat everybody respectfully on the internet (and in the real world, too, of course!), especially if people are spending their free time on projects they share with everybody. ### The future of NewPipe Unfortunately, my studies are progressing and my free time is becoming increasingly scarce. For this reason, I have only been able to contribute a little to the development of the app over the past two years. As the start of my Master’s thesis is around the corner and I am therefore likely to have even less time for NewPipe in the near future, it is time for me to say goodbye. NewPipe is neither developed by one person, nor does one person alone make substantial decisions. I have been trying to step back from the project for some time, as I am currently not able to contribute to larger and more complex projects, both mentally and in terms of time available. I think that with aiming to start rewriting larger parts of the app in the coming year, it is reasonable to make space for new, enthusiastic, motivated people with the required free time. @Stypox and @AudricV have taken the project lead for some time already and are happy to move forward with NewPipe. Of course, they cannot do the job alone and are happy about every kind of support they can get from the community. If you want to step in and help them with maintaining the app, e.g. reviewing PRs, developing code or doing community management, please get in touch! I wish you all the best - personally and in terms of NewPipe’ future. It was a pleasure and an unforgettable experience to be part of the community around NewPipe. Thank you all for this amazing time! I wish all of you a good start into 2024. May the new year bring the best to you! Tobi
31.12.2023 08:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.26.0 + .1: Channel tabs and HD thumbnails! We cannot believe it either - a new update bringing channel tabs, next to lots of features and fixes, AND we have the blog post out in time? To find out more about this crazy era we live in, read on! Here’s the mega release you have all been waiting for. So have we. So has the universe. One day, several years from now, an alien civilisation might capture a strong electromagnetic signal and set their translators to work on it. They will play it as an audio for their leaders, and it will say: “AAAAAH THE 0.26.0 NEWPIPE RELEASE IS FINALLY HEEEEEEEERE!”. And right before we wanted to release this blog post, the release actually got a hot-fix for mediaCCC when opening a channel/conference, which we thought was rather important with the 37c3 going on right now. ### Highlights One of the most frequently requested features of all time is now available: channel tabs! When you open a channel, instead of a plain list of videos, you can now see the different tabs provided by the service for categorisation of the content into playlists, live streams, regular videos, shorts, etc. This makes navigating through content an order of magnitude easier. Trust us, we’ve been dogfooding it, and it’s a game-changer. No more struggling to find a particular video or playlist! No more having to open the website in order to share links to the app! It’s all baked in now. Rejoice. This was done by @AudricV, @Theta-Dev and @Stypox. This is a lot of money for a server... Another feature that’s not as in-your-face is high resolution images and thumbnails. Many users may not care about this, but for a lot of people, especially casual users who are recommended this app, this can make or break their experience. Having large blurry thumbnails might simply be a turn off, or might be seen by an unsuspecting user as a bug, or a symptom of a slow network. This release ensures that images with the highest possible resolution are used wherever available, and for users who prefer lesser data usage, there is an option to lower the quality, or turn them off altogether. Implemented by @Stypox and @AudricV. _Perfect example how HD thumbnails improve the experience of usingPiped. Look at the font!_ Finally, two annoying crashes have been fixed in this version: The extraction of the like count below a YouTube video broke, resulting in an unhelpful error toast on every video. The other was a fairly widespread crash that kept recurring, where the background service wasn’t properly started, which repeatedly interrupted user experience when interacting with the app. Some unlucky users couldn’t even ignore the error, unlike the majority of cases. Both of these fixes were provided by our resident wizard, @AudricV. If you still haven’t downloaded the update for some reason, but now really want to, jump to the Downloads section here. As always, make sure you take a backup of your database before upgrading. If you have root privileges, then backing up the entire app’s data is also an option. Did we mention that we released this blog post on time like a couple of BAWSEs? Yay us! B) ### Rewrite If you’ve been hanging out on our repo, you might have seen an announcement and discussion regarding a major upcoming rewrite to the app. This is one of the last releases preceding that effort. Thus, there has been an intense focus on just wrapping up all major pending work, and reviewing PRs by external contributors, so that the backlog is as small as possible (or even empty) before we embark upon the rewrite. Don’t worry! We asked for opinions, and as a result, this is not going to be one of those cases where there is complete radio silence for several years, and then suddenly a blog post pops up announcing a brand new app, while most users have moved on to other things. It’s been made plenty clear that replacing parts of the code piece by piece is a much better way to proceed, as it will let us keep releasing new versions, as well as keep the community in the loop. ### Notable changes In this section we present you a handpicked selection of the finest of additions/fixes to the app. If, however, you crave a full list of changes, check out the app’s Release Notes, as well as the Extractor ones (both 0.23.0 and 0.23.1 are included in this release). Thanks to everyone who contributed this release cycle! Whether it was features, bug fixes, or translations, we appreciate your effort, and so does the community! #### App * @rishab247 added a pretty neat quality-of-life feature: when you open the app’s download dialogue directly from the Android share menu, you now get a placeholder dialogue with a loading indicator, instead of a simple toast and a potentially long waiting period where you’re not sure if everything’s working correctly. * @TobiGr added content descriptions for most player actions, so our accessibility-enabled users should have a much better time interacting with the app! Please let us know if we missed out on anything, as well as more such annoyances in your usage of the app. * @AudricV enabled the play queue button to be shown even for a single stream, for a sole, slightly weird reason. It’s the most straightforward way for users to access the loop button! Yes, yes, we hear you. The whole player UI will be revisited in the rewrite in order to avoid needing such workarounds. * Thanks to @snaik20, sharing playlists generates a list of video titles as well as URLs, including the playlist name at the top. This is much, much better than the random list of indecipherable URLs that was generated before! Sure, you might recognise the rickrolling URL, but what about the others? * @ShareASmile fixed an oversight from the previous release. We added a new language but didn’t place it correctly in the language selector, causing a mismatch for several languages in terms of what actually ended up being selected by the user. This is an important fix, because as many of you reading know, if you accidentally change the language to one you don’t know, changing it back can be an arduous journey. * @TobiGr fixed a bug where repeated notifications kept being shown for old videos, claiming them to be new. (Actually, we’ve already received feedback that this has been fixed for some users, but not for others. Stay tuned for additional updates on the situation.) #### Extractor This section is to talk specifically about the NewPipe Extractor. These changes do not necessarily affect the app itself, but may be important for other consumers of the Extractor library, such as Piped and Skytube. * @yshalsager added support for two ultralow audio formats from YouTube: 35kbps opus, and 31kbps m4a. As always, these are targeted bitrates, and the actual bitrate will differ for each stream. * @FineFindus added the ability to tell whether a comment was made by the channel creator themselves, or whether they have replied to a comment. This can then be highlighted appropriately. * @TobiGr ensured that we properly detect whether any more search results exist on SoundCloud, instead of continuing to request more and more results indefinitely in an edge case, ultimately resulting in hitting rate limits. * @christian-2hu updated all the copyright notices to ensure they are properly formatted in accordance with GPLv3 guidelines. * @TobiGr fixed an error on media.ccc.de that was caused by trying to extract live stream rooms even if there was nothing being streamed. ### Known Issues * Player notification actions set from app player notification settings are not used on Android 13 and above. This is related to targeting Android 13/API 33 or higher: apps cannot completely personalize media notifications. Check out #9764 for more details. * The app crashes when playing content in fullscreen on some devices: our usage of the ExoPlayer library does not correctly handle rendering to a different surface than the initial one, and crashes when trying to switch to fullscreen. See #9023 for more details and workarounds. ### Wanna Contribute? If you like the app enough to want to make it even better, or you noticed some glaring error that you can’t help but want to fix, you can read our contribution guidelines and do a Fix-It Felix. Or, if you’re bilingual (or even multilingual), you could help translate the app. **Feature additions** have been put on hold for now. We’re pretty swamped as it is, and are working to clear our large (and critical) feature backlog first. Once we get a handle on that, we will revisit this decision. ### Downloads NewPipe notifies you about new versions. You can download them when you tap 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 back up your data by exporting your database from the `Settings > Content` menu.) If you have already installed NewPipe from F-Droid’s repository, to get this version of NewPipe you can do one of the following: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post Note: If you have installed NewPipe from GitHub Releases, you will not have to uninstall it 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!** ### Bugs and Support 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), Matrix #newpipe:libera.chat or open issues on GitHub. 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; you reading through it is greatly appreciated.
27.12.2023 13:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.25.2: Nan desu ka!? Hey look! We were only lagging a couple months behind the app this time, not a whole release cycle! That’s progress! Look at us! :D Welcome, everyone, to our brand new style of blog posts. We hope you’ll enjoy reading these much more than before. We’ve seriously trimmed down the content, reshuffled some sections and cleaned up others, which will hopefully make the whole thing look and read better. Let’s hope this was worth the months-long delay. If you still want to scroll through all the changes in the new app/extractor versions, check out their respective GitHub release pages. For the previous release cycle, 0.25.1, the team tried to get in as many bug fixes as possible, clearing the table for some major feature work for this cycle. These features have been sought after for quite a while, so we’re excited to finally see them become a part of the app! First and foremost, the app FINALLY supports multiple audio tracks! No more Arabic Mr Beast! (Except for those who want it, of course!) Hence the title of this post, for those who were wondering, is “What did you say?” in Japanese. There’s a new ExoPlayer settings menu which has been added to fix niche yet longstanding player crashes. Ideally, we wouldn’t need this menu at all, but OS developers make mistakes, and updating/switching to another OS/device isn’t always an option for users. You don’t need to care about this menu if nothing is broken for you, but if you encounter player crashes for whatever reason, try giving it a go! If you still haven’t downloaded the update, but now really want to, jump to the Downloads section here. As always, make sure you take a backup of your database before upgrading. If you have root privileges, then backing up the entire app’s data is also an option. ### Highlights These are the main changes you’ll notice in the app: * IT IS HERE! @Theta-Dev added support for multiple audio tracks in YouTube videos. The Extractor support was already added in the previous version, if you can remember. There’s a new drop-down menu in the player screen to choose the audio track. There is **also** a `Content` setting to always prefer descriptive audio, for our accessibility-enabled users. * @AudricV has added an `ExoPlayer settings` menu under `Video and audio` settings. These are custom experimental settings for ExoPlayer (the media player library that NewPipe uses) which have been found to solve certain niche bugs and problems users have faced over a long time. This is expecially true for Android TVs and TV boxes from companies that customise the OS, many of which need the “media tunneling” function disabled for videos to work properly. * Thanks to @Theta-Dev being a bawse, downloads from YouTube are no longer throttled! This should take care of all those ongoing downloads that slow down to a crawl, or come to a complete stop towards the end, requiring repeated restarts. ### What’s New Thanks to everyone who contributed this release cycle! Whether it was features, bug fixes, or translations, we appreciate your effort! We’re mentioning a few of them here. For the rest, check out the app’s Release Notes, as well as the Extractor changes. #### App * @Marius1501 has made the volume and brightness gestures customisable! Now you can toggle them individually, and even change which half of the screen they work on. * Continuing the customisability momentum, @Marius1501 added an option to move the main page tabs to the bottom! * A new language, ߒߞߏ / N’Ko (nqo), has been added to the language chooser. Thanks, @MBKaba! * … and right on the heels of that, @kuragehimekurara1 also added translations and support for the Uchinaguchi language! * @quarthex added support for links to the ‘peertube.stream’ instance. * @Stypox fixed a wacky bug on PeerTube where the channel avatar would be swapped with the avatar of its subchannel. #### Extractor This section is to talk specifically about the NewPipe Extractor. These changes do not necessarily affect the app itself, but may be important for other consumers of the Extractor library, such as Piped. * @FireMasterK added support for AV1 itags! This means that the Extractor can now recognise AV1 streams on YouTube, for example. * @TobiGr added several more audio formats to SoundCloud! Look for a creator that uploads their music in FLAC, and treat your ears to some high quality lossless audio. Though opus is great of course. (_“Hey, thanks!”_ “Oh, I was referring to the actual codec, not you.” _”:(“_ ) * @petlyh added a proper error message for Bandcamp tracks that are only accessible to users that have paid for them. This requires user authentication, and since NewPipe cannot log in anywhere, such tracks need to be played in the browser or another app. * @ChunkyProgrammer added support for the extraction of playlist descriptions. If you use Piped, try opening a playlist and see the difference it makes to the UI! ### Known Issues * Player notification actions set from app player notification settings are not used on Android 13 and above. This is related to targeting Android 13/API 33 or higher: apps cannot completely personalize media notifications. Check out #9764 for more details. * The app crashes when playing content in fullscreen on some devices: our usage of the ExoPlayer library does not correctly handle rendering to a different surface than the starting one and crashes when trying to switch to fullscreen. See #9023 for more details and workarounds. * YouTube Trends are not shown sometimes and no videos are shown in this case: YouTube is A/B testing a new trends UI which completely reworks what data is sent and how it is displayed. This new structure is currently not supported by the extractor. See NewPipeExtractor#1046 for more details. ### Wanna Contribute? If you like the app enough to want to make it even better, or you noticed some glaring error that you can’t help but want to fix, you can read our contribution guidelines and do a Fix-It Felix. Or, if you’re bilingual (or even multilingual), you could help translate the app. **Feature additions** have been put on hold for now. We’re pretty swamped as it is, and are working to clear our large (and critical) feature backlog first. Once we get a handle on that, we will revisit this decision. ### Downloads NewPipe notifies you about new versions. You can download them when you tap 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 have already installed NewPipe from F-Droid’s repository, to get this version of NewPipe you can do one of the following: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post 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!** ### Bugs and Support 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), Matrix #newpipe:libera.chat or open issues on GitHub. 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; you reading through it is greatly appreciated.
05.12.2023 07:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
We have lost access to approximately €6,000 in bounties Dear fellow NewPipers, The money that had been accumulating on NewPipe’s Bountysource account is no longer accessible to me (Schabi). As a result, the project has lost about €6,400 worth of awarded bounties. ### Background Bountysource is a website which acts as a platform for the placement of bounties for open source development. People can use it to post bounties to fix certain issues or develop certain features. Developers can take on these challenges, implement the changes, and get the bounty awarded to them. This also happened in the NewPipe project, where bounties were handled by Team NewPipe. I had set up the account for Team NewPipe on Bountysource, which accumulated a significant sum of money over the years. Bountysource ownership had a bit of a tumultuous history, but the present owner seems to be _The Blockchain Group_ , a company based in France. ### Current situation for me I can attest that their back-end has stopped working, and they have stopped responding to communication attempts. My e-mail to them sent on 7 November, 2023 has not been answered. Initially, I thought that this was too significant a sum to simply accept as a loss. Therefore, I reached out to a lawyer. However, the costs of hiring one, added to the court fees for initiating the proceedings, are too high to warrant pursuing this, however; not to mention the significant time I would have to spend with a legal case, which I cannot spare right now. ### Why so much unclaimed money Team NewPipe consists of volunteers, meaning we spend whatever free time we find during our days on NewPipe. This means that making a one-time decision like “Sure, we will accept money via platform X” will boil down to someone doing just that, and the decision then gets published. This happened with Bountysource, and it was used by quite a few people. However, actually deciding on what to do with that money is a totally different challenge. Just paying it forward to active developers would have worked (after finding out a way to split it fairly), but we did not want to get paid for working on a passion project, and we didn’t want to attract developers who would contribute solely for the money. We could have also used it to fund non-monetary rewards (maybe an online course to get better at programming, or paying for a faster computer to speed up development), but this meant an additional effort to decide who gets what, how it gets there, et cetera. So nothing really happened with the money. To make a long story short: there has been a lot of discussion on how to improve the situation (e.g. issue #2732), and we ended up choosing to donate all money towards an association. Therefore, we actually founded said association, targeted at projects like NewPipe. This association can now take money from donations, and spend it on clearly stated goals in an open and accessible way. Sadly, this again being a team effort of volunteers, we have not been able to publish an online presence yet, so you have to bear with us on that front. Since we now have a bank account to forward the money to, I wanted to access the Bountysource money as well, and stumbled into this situation, where we are stuck as of now. I can’t offer any condolences, sadly. This is really just a notification to everyone who thought they donated to Team NewPipe via Bountysource: that money is probably lost and didn’t reach us. Sorry. Best regards, Schabi
23.10.2023 21:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
newpipe.net removed from Google search results due to DMCA take down request > **Update 13th July:** The DMCA notice was rescinded with no further comment. Our landing page appears to be listed in Google's search results again. Dear NewPipe community and other beloved creatures, You might have already noticed this: Searching “NewPipe” via Google will yield plenty information about the project, but a link to the official website is missing. This is because Google submitted to a DMCA takedown notice from a French record label, “Because Music”. The notice demands removing our homepage newpipe.net from their search listings along with a set of other domains completely unrelated to our project. The DMCA takedown notice was published in the Lumen database by Google themselves. While worse things could have happened as the result of such a takedown request, Google’s unlisting of our homepage creates a variety of problems. Given the fact that Google no longer counts visits to our site, it will lose relevance. As a result, websites for fake clones of NewPipe that mimic our homepage will tend to rank higher in the results. This could ultimately cause users to fall for such scams. The team is currently discussing what to do about the situation. We are considering taking legal action. **If you are a lawyer and have experience with this and would like to help us, please contact us via email (team(at)newpipe.net).** Regards, Schabi
07.07.2023 13:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.25.0 and 25.1 released: Card view, tappable URLs/timestamps in comments, and PeerTube search filters ahoy! 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 * @GET100PERCENT added Odia to the app’s language selector. ### 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: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post 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.
07.04.2023 06:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.24.1 released: Et tu, channels?! So, YouTube channel videos up and vanished, and even refreshing the feed didn’t get them back. That’s never a good sign, so we went looking for them and found the slippery little things. Make sure you tie them properly to the fence next time. Put the bell icon around their necks. Might help, or so we’ve heard from several popular YouTubers ad nauseam. This release is quite interesting, because we had a bunch of new users sneaking into the repo all nearly at the same time, eagerly asking to fix issues. We look squinty-eyed at any gift horse, so some probing revealed that these were students of the Australian National University. As part of their Software Engineering course, they are required to contribute to a real-life OSS project (Which. Is. AWESOME.), and NewPipe was one of the suggestions. Seriously, more programming courses should focus on this aspect. There are dozens of blog posts every year bemoaning the hard transition from programming courses to real-world projects. By the way, these weren’t mere token changes either, just to make them feel good about participating and ticking a box on their course checklist! Each contribution has either added a nifty new feature, or fixed an actual bug faced by our users, which is worth appreciating. No low-effort Hacktoberfest PRs here. You could even say that this release was largely ANU contributor-driven, because without their participation, we would have likely issued a simple hotfix. We’ve highlighted the ANU contributors with an asterisk. They were working in groups, so take the usernames to mean the entire team. Please join us in congratulating these students for successfully contributing to a real-world open source project! There were some who didn’t make it in time for their project deadline, and will swing back around later to finish their PRs. Yet others had their contributions rejected for one reason or another. But even that is a great learning experience (we made sure to give detailed feedback), and we hope it hasn’t discouraged them from future contributions. You’re all welcome to help out any time! Bring your friends as well! Hold a NewPipe hackathon, even! ### New * Comment reply count support on YouTube has been added to the Extractor thanks to @xz-dev! The app-side work is still under way. Watch out for it in coming releases. * @AudricV added support for YouTube handles. This refers to channel links starting with ‘@’. Also, more kinds of usernames are supported now. * @Sandelinos added a monochrome icon for the app to fit in with the cool kids on Android 13. Gotta keep up with the ever-changing fashion trends, or there will be all sorts of terrible gossiping behind your back. * @Yuuu2990* added a link to our FAQ in the app’s About section. * @YonghaoDeng* added an ‘Open in browser’ button on the error page shown when a video page fails to load. * @cernunnos1710* added a list layout for channel groups, to improve accessibility for users with sight issues. There is now a button to toggle between list and grid layouts. The default layout is the one selected in Appearance settings. * @Callisto404* added the ability to long-press on YouTube chapters to share a timestamped URL. ### Improved * @HybridAU added a button to the minimised bottom player which opens the play queue. * @Jfax510* made it so that the app shows the “Hold to enqueue” tooltip for the playback header buttons in local playlists, which should help new users. ### Fixed * YouTube changed the layout of the channel page, which broke extraction of videos in channels, and caused feed update requests to return empty-handed. @Theta-Dev adapted the code to correctly parse the new layout and fetch videos properly again. Note that since YouTube has separated Shorts and Livestreams into their own dedicated tabs, those won’t be shown in the channel page… for now. (Dun dun duuun!) * @Isira-Seneviratne fixed a potential NullPointerException error in media.ccc.de’s Recent kiosk. * @TurtleArmyMc fixed the extraction of SoundCloud playlists, which tracks were not necessarily being returned in the correct order. * @TobiGr fixed the error seen when trying to fetch more comments on SoundCloud. * YouTube rolled out a new metadata format for playlists, which broke extraction of video count and uploader name. This is now supported thanks to @AudricV. * @AudricV added a workaround for all the 403 HTTP errors users were getting. Basically, YouTube is testing a new method to detect 3rd-party clients and push them to use the official one, so we’ve changed the code to avoid said detection. * @devlearner fixed the crash that sometimes occurred when the user touched a comment while scrolling. * They also fixed the crash that occurred upon rotating the screen while the Download dialog was visible. * If a user opened a Download dialog on the History page and then backed out of the page before the dialog could load, it caused a crash. @plasticanu* has fixed this. * @Isira-Seneviratne fixed the bug where the ‘remove watched streams from playlist’ one-off function would get turned on permanently instead of running only once, and so any newly watched videos would get removed immediately. * When the same channel was added to multiple channel groups, its videos would appear multiple times in the What’s New (a.k.a. All) feed upon refreshing. @Stypox has fixed this. ### Localisation * OneGuitars* added new localizations, namely Icelandic, Latvian, and Malayalam, to the language selector. * @TobiGr updated the `PrettyTime` library from v5.0.3 to v5.0.6 to include new localizations made by NewPipe contributors. Thanks to @Nizami20052022 for bringing this to our notice, as well as for being one such contributor. ### Nerd Talk * dependabot updates: * Bump junit-bom from 5.9.0 to 5.9.1 * Bump spotbugs-annotations from 4.7.1 to 4.7.3 * @FireMasterK added `uploaderUrl()` and `uploaderVerified()` methods to the `PlaylistInfoItem` class for YouTube. * YouTube has started to use attributed text descriptions, which allow internal links (YT to YT) to be shown as clickable chips. @Theta-Dev has added support for this to the Extractor. * @TacoTheDank replaced the manual `android:summary="%s"` usage with the `useSimpleSummaryProvider` attribute to display the current value of a set preference. * @Stypox improved the `FeedGroupDialogViewModel` factory to match the previous improvements to `FeedViewModel`. * In this month’s IsiraNews, @Isira-Seneviratne: * replaced `Linkify` with its Compat variant to work on older Android versions. * Updated Android Gradle Plugin to 7.3.0. * Used range-limiting methods in more places. * Replaced the manual calculation of checksums of downloaded files with Okio’s ByteString version. * Used the Java 8 Streams API to calculate the search score of items when searching inside Settings. * Used the `TextViewCompat.setCompoundDrawableTintList()` method to simplify some code. * Updated `AppCompat` to v1.5.1, and the `compileSdk` to 32. ### New members! Please join us in welcoming @SameenAhnaf and @Isira-Seneviratne to the team! You’re probably already used to seeing Isira’s name from the huge number of PRs in nearly every blog post. Sameen has been around for a couple of years now, helping out with issue maintenance and interacting with the community members. ### 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: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post 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.
05.11.2022 07:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.24.0 released: Farewell, KitKat :'( Hey peeps. We’re dropping support for Android KitKat, and bumping the minimum supported version to Lollipop, as was announced on the repo months ago. It’s quite sad that we had to do this, as we fondly remember KitKat as being one of the best Android releases, but it was either this, or continuing to use an unpatched library (one which is used to access the Internet, as well!), exposing our users to untold security risks. KitKat users can continue to use (at their own risk) the previous version (v0.23.3) for now, at least until the service they use implements breaking changes and stops working with that version. We published a separate blog post about this. TL;DR: If you have the knowledge and are interested in maintaining NewPipe Legacy, you’re most welcome to get in touch with the team. We’ve done our best to add some critical features (such as DASH support and new video notifications) before going ahead with dropping KitKat support. We hope you appreciate the effort. Anyway, on with the new! This version contains a bunch of changes under the hood, but the biggest one is that the massive player code underwent a major refactor to improve readability and reduce maintenance overhead. Also, there is a new option to hide future videos from the feed. Thumbnails also saw some visual improvements. And finally, the NewPipe ReadMe was rewritten, for those who are into such arcane things. This post also contains the changes from the previous two hotfixes. ### New * @notaLonelyDay added the option to download videos directly through the long-press menu in lists, a nice quality-of-life addition which saves the trouble of waiting for the video details page to load. * @carmebar answered the prayers of several irritated souls by adding an option to hide future videos (a.k.a. premieres) from the feed. We even enabled this by default for your express convenience. * @litetex took on the unenviable task of finding and removing all the compatibility code that was needed to support Android KitKat. @Fs00 cheerfully pointed out even more places where old code could be dropped or replaced. @TacoTheDank chipped in to keep the code up to date. * With this, the minimum supported Android version is now Lollipop. Goodbye, KitKat, you will forever stay in our hearts! On a more positive note, this change has the side effect of unlocking several benefits and removing limitations/workarounds that were necessary to support an Android version that is (as of writing) 9 years old. * Related to this, and the actual driving force behind this change: @TacoTheDank updated the OkHttp library, which NewPipe uses to access the Internet, from 3.12.13 to 4.10.0. The 3.x branch has been deprecated since the beginning of the year, and since OkHttp is a critical library used to make HTTP requests to the wild and dangerous Internet, moving to the currently supported 4.x branch was imperative. However, support for KitKat was dropped by OkHttp in the move from the 3.x branch to 4.x. So here we are. * @carmebar also added a `Share` option to local playlists. Since they don’t have a URL (as they are stored purely on your device), this was done by sharing a list of all the video URLs in the playlist instead. ### Improved * Some people reported that the app showed auto-translated English titles for some YouTube videos, instead of the original language. @FireMasterK fixed this. Now the original title is shown. * The fast feed refresh option was returning thumbnails with black bars at the top and bottom. @Stypox fixed this, at the cost of slightly lower thumbnail resolution. * @OxygenCobalt improved the 1:1 toggle for notification thumbnails. Now it crops the image into a square instead of stretching it to fill, which made it look strange on Android 11 and above. * @Stypox added support for all aspect ratios to list thumbnails, so that if they’re something other than 16:9, they are scaled to fit instead of getting cropped. The square thumbnails on SoundCloud and Bandcamp look better as a result. Also, playlist thumbnails had half their area hidden behind a black bar, which was also fixed. * @krlvm improved the placeholder images for thumbnails and avatars, helped along by @Stypox. Now they are shown immediately, instead of waiting for an arbitrary timeout period when there is a network error or the connection is poor. Moreover, the low-resolution placeholder images were replaced with vector graphics, which look much better on high-resolution screens. Finally, the placeholders were adapted to look better with the light theme. * @litetex removed the “beta” tag from all services because, as was rightly pointed out, NewPipe is an unofficial 3rd-party app. This means that technically all the services we support are permanently in beta, as they could stop working at any time due to service-side changes, which are not under our control. * @Stypox took on the daunting task of refactoring the massive player code of NewPipe – variously termed as “a hot pile of garbage” and “a spaghetti monster of doom”, with developer sentiments oscillating between “I would rather shoot myself in the foot than deal with this” and “**AAAAAHHHHH** ” – by breaking it up into smaller, more maintainable and usable parts, which will make future development much easier. It led to an improvement (listed below) and also some bug fixes (including a major one), which are mentioned in the next section: * No more does the background/audio player keep the main player and popup player views pointlessly loaded in RAM. Only the currently used player view is kept in memory. * @Isira-Seneviratne made tag sorting case-insensitive, making content tags easier to view and use. ### Fixed * Regarding the hotfix version 0.23.2 – @Theta-Dev, an external contributor(!), fixed the extraction of the complex `nsig` functions used by YouTube, as their format was changed. * Remember when we said previously that the throttling prevention code was made more resilient to such changes by YouTube? Turns out it wasn’t doing its job properly, so @AudricV fixed that. * @AudricV also updated the versions of the YouTube clients NewPipe uses, and improved the extraction of the API key of the desktop website client in particular. They also added more parameters to the HTTP requests of some of these clients, which fixes the issue of replacement of video and audio streams by a silent video that just says “The following content is not available on this app. Watch this content on the latest version of YouTube”. * For hotfix version 0.23.3 – @Theta-Dev found that a newer version of a library we use calls a Java class not available on Android, which caused infinite loading of videos. The library was downgraded. * @litetex fixed throttling on some videos by checking if the JavaScript code we extract from YouTube is valid code, and falling back to our regex if not. That regex also happened to be missing a `}`. * @Theta-Dev later figured out that Android uses a different regular expression (or regex) parser than standard Java, and used the magical character `\` to make our anti-throttling device (patent definitely pending) work properly. * After all this messing around with the same problem over multiple releases, @Theta-Dev was fed up, and consequently added a full-fledged JavaScript parser to the Extractor. This replaces the custom implementation present before, which tended to break every time YouTube decided to change the format of their `nsig` throttling decryption function. What this hopefully translates to is less frequent need for hotfixes in the future. * @litetex also fixed the extraction of some YouTube playlists for users in EU by allowing tracking through a consent. We would love to provide this functionality without bending to YouTube’s wishes, but sadly, it is what it is. This change is only available in the Extractor for now. * @AudricV fixed that annoying intermittent “Could not get like count” error, which caused an error snackbar to appear on a bunch of videos randomly. It turned out to be a new data model being A/B tested by YouTube, which changed how the like count was being accessed. * A (different) new data model being A/B tested also led to the Trending kiosk sometimes not showing any videos (which also affected Piped and was fixed, for those of you who use it). @AudricV added support for that too. (Incidentally, the new model allows us to better separate the regular “Trending”, “Recently Trending”, and the “Shorts” sections. We still extract only the first of these, but it helps to have them separated in the code for future changes.) * Now that we have a proper JS parser as mentioned above, we don’t need the throttling decryption function regex. The parser will never fail, theoretically speaking. But we’re still keeping it around as a fallback, because precaution. @AudricV fixed the regex to match updates in YouTube’s provided decryption function. * @Stypox noticed that the wrong placeholder image was being used for channel avatars in some places, which is now fixed. * The player refactor mentioned in the previous section solved a longstanding bug faced by Android 12 users, where the player sometimes only filled a quarter of the display when in full screen, leaving the rest empty. * It also fixed an issue where NewPipe was reported to be displaying over other apps even if only the background player (which is just a notification) was being used. * Further refactoring fixed the problem of a newer video playing, but the player notification continuing to show the thumbnail from the previous one. * Also, updating the notification metadata was left to ExoPlayer, instead of letting the app issue custom metadata updates, which solved the issue of the wrong duration or current position being shown sometimes. ### Localisation * @opusforlife2 overhauled the NewPipe ReadMe to improve clarity, as well as reflect the current status of the project. * @chr56 noticed that there were two translation files for Chinese Simplified, which caused issues with maintenance, and some missing or inconsistent translations. One of the files has been removed, restoring order to the world, and improving compatibility with old Android versions, to boot. It required some careful fiddling with Weblate to avoid breaking stuff, but @Stypox got the job done, no sweat. ### Nerd Talk * dependabot updates in NewPipeExtractor: * Bump spotbugs-annotations from 4.7.0 to 4.7.1 * Bump jsoup from 1.15.1 to 1.15.3 (which contains a fix for a vulnerability) * Bump junit-bom from 5.8.2 to 5.9.0 * Bump gson from 2.9.0 to 2.9.1 * @mhmdanas ensured that the GitHub CI has only the absolute minimum required permissions when running workflows, by manually specifying them. Further, @Stypox removed its write permissions to further tighten security. * Hurricane @Isira-Seneviratne strikes again! They further improved the Extractor by introducing modern code and cleaning up the old: * Used Objects.requireNonNull() * Used Collections methods * Used String.join() and Collectors.joining() * Made improvements to methods using toArray() * Removed usage of the EMPTY_STRING utility function and replaced it with actual empty strings * @AudricV removed an old and deprecated version of the throttling decryption code, replaced since 0.22.0 by a better version. * @litetex also added a check to see if our throttling parameter decryption function, needed for some YouTube content, is valid JavaScript code, letting it fallback to a regular expression (RegEx) version if not. * Moreover, @litetex fixed all the currently failing Extractor tests, and the corresponding code. * @TacoTheDank updated the Extractor’s Gradle version to 7.5.1. * On the front end, @Isira-Seneviratne made too many improvements to list. So here is a list… of some of them: * Refactoring several files, simplifying and replacing old, deprecated code with better or modern methods, as well as removing unused code. * More use of the Java 8 Stream API. * Some use of Java 9 methods as well! * Use of a compatibility class to fix a Lollipop UI bug. * Some more Kotlin-isation. * Beating @TacoTheDank to the punch, AndroidX Lifecycle was updated from version 2.3.1 to 2.5.0. * Revealing it to be a 2-hit combo, AppCompat was updated as well, from version 1.3.1 to 1.4.2. * Use of better display metrics APIs on Android 11 and above. * @Stypox noticed that the CI wasn’t running for some release candidate PRs. Turns out the accepted format of release branch names was too narrow. This has been mitigated. * @TacoTheDank found some cruft in the ProGuard file and cleaned it up. He got +5 cleanliness points as a reward for this side quest. * @TacoTheDank updated ExoPlayer from 2.17.1 to 2.18.1, fixing deprecations along the way. Also, they specified the ExoPlayer libraries we actually use, instead of letting the entire ExoPlayer library bundle be added to the project and cause bloat. * @litetex modified Checkstyle to enforce having the assignment operator (`=`) on the same line instead of a new one, and changed the code accordingly, also cleaning up some unused code along the way. * @TacoTheDank, the friendly neighbourhood library guy, passed by on the way to the pizzeria: * Checkstyle 10.0 -> 10.3.1 * AssertJ 3.22.0 -> 3.23.1 * desugar_jdk_libs 1.1.5 -> 1.1.6 * Ktlint 0.44.0 -> 0.45.2 * AndroidX Constraintlayout 2.1.3 -> 2.1.4 * AndroidX Core 1.6.0 -> 1.8.0 * AndroidX Media 1.5.0 -> 1.6.0 * jsoup 1.14.3 -> 1.15.2 * PrettyTime 5.0.2 -> 5.0.3 * Android Gradle Plugin 7.2.0 -> 7.2.2 * AndroidX Fragment 1.3.6 -> 1.4.1 * Google Material 1.5.0 -> 1.6.1 * AndroidX Room 2.4.2 -> 2.4.3 * Gradle 7.4.2 -> 7.5.1, and to a smaller variant of the library * @Stypox deduplicated the SQL queries used to access the feed database and fetch streams from it. * @TacoTheDank made a custom fork of the No Nonsense File Picker that NewPipe uses for devices that don’t have SAF or users that choose to opt out of it. This custom fork let us disable Jetifier. * @Isira-Seneviratne changed the `PeertubeInstanceListFragment`, `SuggestionListAdapter` and `PreferenceSearchAdapter` classes to use AndroidX `ListAdapter` to handle displaying list data. We have no idea what this does, but anything involving AndroidX automatically becomes cooler by 10%. * @opusforlife2 added ‘reading the FAQ’ to the issue template checklist, which will hopefully help solve user problems before they even open an issue. * @mhmdanas removed some extra whitespace from the issue and PR templates, and also clarified in the README that hidden links kept for backwards compatibility don’t need to be copied over to new translations. * @Stypox ensured that the app keeps strong references to Picasso notification icon loading targets, which fixes a potential bug that caused new stream notifications to not show whenever the garbage collector did its job prematurely. #### Refactoring the player * Here are some under-the-hood changes involved in refactoring the player, so you could get an idea of how complex it was earlier: * Approximately 2500 lines of code, dealing with the different kinds of players, were extracted out from the `Player` class and moved into their own individual plug-and-play UI classes: a base class (`PlayerUi`), and a class for each kind of playback, namely `NotificationPlayerUi`, `MainPlayerUi`, and `PopupPlayerUi` (with the code common to the latter two kept in `VideoPlayerUi`). * Newer APIs were introduced in the process as well, which made the code much simpler to write and use. * The Queue Activity was changed to use its own adapter, instead of using the player’s queue adapter. * The `BackgroundPlayerUi`, `PlayerState` and `PlayerServiceBinder` classes were removed. Less code is good code. * For Android 7 and higher, the `setVideoSurfaceHolder` method is now used, unlike lower Android versions where its manual alternative still has to be used. * The notification calls were moved to the `NotificationPlayerUi` class. * In the next round of refactoring: * A `MediaSessionPlayerUi` class was introduced, containing yet more code extracted from the `Player` class, and `MediaSessionManager` was merged into it. * The `MediaSessionCallback` and `PlayerMediaSession` wrapper classes were removed, and their function used directly. ### Farewell to a team member who left the project We’re sad to say that @mhmdanas/triallax is leaving the team, after dedicating more than 2 years to the project in the form of code contributions, repo maintenance, and community interaction. Most people who hang around the NewPipe repo and IRC channel are familiar with him, and anyone who has opened an issue in the repo has likely interacted with him at least once. In a way, @mhmdanas’s near constant presence has become a staple of the NewPipe project experience, and it will be difficult for us to get used to not having him around all the time. Fear not, however! This will not turn into a missing person case. @mhmdanas will stick around in the IRC channel, so anyone and everyone can walk up to him and tap him on the shoulder, metaphorically speaking. ### 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: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post 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.
27.09.2022 10:00 — 👍 1    🔁 0    💬 0    📌 0
Preview
NewPipe 0.23.1 released: DASH to the finish line! Yeah yeah, we get it. You don’t need to scream yourself hoarse. This release is just as late as the previous one. But we have great news! Playing videos will now be smooth again! Why we are so late again, you ask? It’s because every team member has several Dalmations to care for. In fact, as a whole, that makes a hundred of them. You can show your appreciation by sending trucks filled with dog treats our way. Don’t send any fur coats, though. The dogs seem to hate them for some reason. The highlight of this release is DASH support! Well, more like support for stream delivery methods other than progressive HTTP. This is technical stuff, so you can look up the terms progressive HTTP, DASH, HLS, SmoothStreaming, and Torrents if you like. The point is, there were certain types of YouTube videos that were unplayable in NewPipe, and that’s not the case anymore! Moreover, you will likely notice that YouTube videos and audios load much faster for you. It’s all thanks to a DASH of magic. (BTW: This ‘AudricV’ username you’ll see sprinkled below is just TiA4f8R in a different costume. We at NewPipe support all people’s freedoms to live life the way they want, no matter what username they identify with.) (BTW2: opusforlife, you won’t change your name to DASHforlife, will you?) ## New * After two _years_ of work, delivery methods other than progressive HTTP are finally here! Enjoy faster loading times, more reliability, more supported video formats and many nasty player issues fixed! Don’t expect this to hold for the downloader, though, where support for delivery methods other than progressive HTTP is still unimplemented; help is needed there! A **very huge thank you** goes to the author, @AudricV, both for writing the code and for incorporating multiple requests for changes. Many other team members helped him achieve this goal, too. Here are the per-service improvements: * Now DASH is used as the preferred means for YouTube playback instead of progressive HTTP, improving loading times in playback and seeking. This has made the app faster by an order of magnitude! No more waiting after tapping on a YouTube video! * According to some users, repeated buffering while playing YouTube videos also seems to have become an issue of the past. :-) (Though we would like confirmation from a broader set of users regarding this.) * Recently ended YouTube livestreams are now fully playable, right from the beginning. * In YouTube, some more resolutions and formats are now available for playing. * Fixed seeking on PeerTube videos with only HLS streams (that is, most PeerTube videos). Now PeerTube is finally usable! * Fixed crash on PeerTube videos with an audio-only stream. * Fixed playback of SoundCloud HLS-only tracks. * Note: even though most of the above changes were made to NewPipeExtractor, a new NewPipeExtractor version will not be released along with this NewPipe version. This is because we want to completely refactor the code through which different delivery methods are provided; in its current state, it is a somewhat complicated structure to use, and resistant to future improvements. Interested users may keep track of the effort here. * @petlyh made it so that you can convert a remote playlist into a local NewPipe playlist! You can do this by opening a remote playlist, going to the 3-dot menu, and tapping “Add to playlist”. The benefit is that you can edit this local playlist to your heart’s content, whereas remote playlists have to be used as-is (remember, by “remote” we mean “coming from a service”, YouTube included). Thanks, petlyh! * @AudricV added an image preview for URLs _shared**from** NewPipe_ in the Android Share Sheet. This neat feature is only supported on Android 10+. ### Improved * @fynngodau realised that we weren’t extracting the stream duration for Bandcamp, leading to obvious bugs like showing “0:00” as the end time, and the track restarting when trying to seek to a timestamp. That’s been fixed, and the stream duration is also shown in list items now, where it was missing earlier. * @litetex improved the UI of the playback parameters dialogue so that you don’t need to scroll in it anymore! The entire thing neatly fits on most screen sizes (except maybe very small ones). * They also moved the Import/Export options in the Subscriptions tab to the 3-dot menu. This was done because user feedback showed that the current UI was very unintuitive. And while at it, they also did some accompanying UI adjustments to make it all look better. ### Fixed * The extraction of YouTube Music was broken for IP addresses in the EU, because Google compulsorily shows a cookie consent page for users. This has been fixed by @AudricV by prepending a URL parameter to blanket-deny consent. * In previous versions, if device-wide animations were disabled, the keyboard would sometimes refuse to open when tapping on the search bar… apparently because of a bug in Android itself!? Anyway, thank you @litetex for investigating this bug, and @dtcxzyw for finally fixing it! * @seanzzy stealthily added a _nullity check_ , fixing a rare crash when opening NewPipe from the player notification. Thanks! * The previous release contained an update to ExoPlayer (the library that NewPipe uses to play media), but unfortunately a regression sneaked in, preventing the player controls from hiding automatically when using a media button to play a stream. Thank @ktprograms for the timely restoration of this behaviour. * Counting views in the local history has been broken since, like, ever. Why on earth would playing a video once add two views? An attempt to fix this was initially made by @Mamadou78130, and the final working solution was provided by @Stypox. Thank you to both. * @litetex struck again, this time solving many theming and code issues related to the `RouterActivity`, that is, the menu that shows up when you _share something**to** NewPipe_. Now “Add to playlist” is usable again, and the buttons are not white-on-white anymore. :-D * @LingYinTianMeng fixed removing only fully watched videos from a playlist, which had been somewhat broken from the beginning. Thank you, LingYinTianMeng. * @GGAutomaton was lucky enough to grab the 8192nd (=2¹³th) issue/PR ever opened on NewPipe’s GitHub repository! Jokes aside, they fixed a recurring crash when rotating the device on unsupported channels. * @iTrooz made sure that, at the beginning of the player slide gesture that would change the playback volume, the starting value would always match the system’s. Thanks for taking care of our ears! ## Localisation * Thanks to @Saurmandal, we now have a Hindi translation of the NewPipe README! ## Nerd Talk * dependabot updates in NewPipeExtractor (the new version, the one we’re hiding under our coats): * Bump jsoup from 1.14.3 to 1.15.1 * Bump spotbugs-annotations from 4.6.0 to 4.7.0 * Bump… nothing more, but isn’t this list boring? * @litetex did some code cleanup of the `TimeAgoParser`, `YoutubeStreamExtractor`, `Stream` and `Utils` NewPipeExtractor classes. * @Stypox used Java 8 Streams in the Bandcamp extractor, which should improve error resilience, and fixed a bunch of Android Studio warnings in several files. * @AudricV removed the Checkstyle suppressions file, and instead added support for encapsulating rule-violating lines within `CHECKSTYLE:OFF/ON` comments. Easier to keep track of, this way. * @gliptak fixed a couple `PeertubePlaylistExtractorTest` unit tests. Thanks, gliptak! * @litetex moved some utility methods from the extractor to the app, where they fit better. * The following libraries were updated by @TacoTheDank in NewPipe: ACRA (_twice_), Groupie, Android Gradle Plugin and Kotlin. As he asserts on his GitHub profile, he is “obsessed with keeping stuff up-to-date”, so thank him for his longstanding effort! * @Nickoriginal updated the `User-Agent` used in NewPipeExtractor’s tests and most importantly in NewPipe. Now it matches the latest Firefox ESR 91 release. Thanks, Nickoriginal! * @litetex cleaned up some unused `strings.xml` resources which kept giving warnings when trying to build the app. Thanks. * @Isira-Seneviratne cleaned up some places in the NewPipe codebase… thanks to him, too! * Replaced a manual overload of a Kotlin function, with default parameters to be used by Java, with `@JvmOverloads`. * Removed some unnecessary compatibility (so-called `compat`) method calls… * …and added some more, coming from `AppCompatResources`, to simplify some code. ## 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: * Wait for them to update * Switch to NewPipe’s custom repository by following the directions in the announcement post 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 till the end! We put quite some time into these blog posts.
05.07.2022 06:00 — 👍 1    🔁 0    💬 0    📌 0