I just want to share source code of my app for Youtube which use Invidious API . It’s not finished and as microtube, sometimes work and sometimes not. I stopped development last year when Invidious instances closed their APIs. After sometime I found that is possible to use Invidious instance from FreeTube, but still sometime not work, today it works . It also supports PeerTube.
Features:
Invidious
Peertube (but needs to implement some list of instances)
play audio only from Youtube (Invidious) from contextmenu
Favorites list
History of watched videos
If someone wants to contribute…
to-do:
better player, as now is only supported pause/play by tap on screen in app
audio only for PeerTube
Trending tab (hidden from app right now) doesn’t load list of videos correctly
open link from another app is not work atm
implement settings of region for searching videos and trending videos for Invidious (current it is set for my country - CZ in main.js function search and in Trending.qml in Component.onCompleted)
Wow pure qml? Kudos, still have my hopes up for flypig’s newpipe, but it will require a jvm if I understand correctly (or nodejs with microtube), thanks for sharing!
It depends, I also like to have list of favorites videos and history of watched videos. But lately I use Youtube mainly on desktop and TV, so I don’t need it much on phone (for my use lately, it would be mostly enough if YouTube weren’t broken in gPodder)
At weekend I tried to use another Invidous instance (from Freetube desktop app) and it works for searching videos and channels. For playing videos not work so I tried to use yt-dlp with python and it works! I upload new rpm file here, if anyone want try it. Yt-dlp is not included, download current version of yt-dlp (2026.02.04) yt-dlp_linux_armv7l.zip or yt-dlp_linux_aarch64.zip from their github and extract the yt-dlp file and _internal folder to .local/bin/ and rename the file to yt-dlp. I disabled sandbox because of location yt-dlp but I don’t want to include yt-dlp in rpm or let users to copy yt-dlp outside /home to app location in /usr/share.
EDIT: For some reason with this Invidious instance doesn’t work showing latest videos on channel. And I completely forgot on audio-only choice which doesn’t work now because doesn’t use yt-dlp yet.
hi. Apart from the yt-dlp zip file, i had to download the separate aarch64 binary (rename to yt-dlp in that folder) and I confirm it works and it is simply beatiful or beautifully simple(?) ..and finally working (could not find minitube, microtube and sailpipe unfortunately do not keep track on youtube changes as yt-dlp does).
perhaps add info on time per found videos? (i mean, do i find tom and jerry 5 minutes that works great with yt-dlp or it is some 1h version that doesn’t ?) i believe more will be added (it should ! at least as backup program..5 stars here!)
basubipr thanks, I forget to mention renaming the binary. Ok, I will add info on time per videos to the search results. I don’t know much time I should spend on polishing the app, when I don’t know how long it will work (mainly the invidious instance).
Hi Kuba. Did you know yt-dlp can perform searching and returning full json file? I think there’s no need to use external invidious for this… I just tried with yt-dlp “ytsearch20:tom and jerry” --dump-json --skip-download
It unfortunately does not work anymore as some js is needed (clues?) due to the changes in youtube but I bet yt-dlp will keep updating (fingers crossed, and blame youtube. .)
Hello @basubipr no I didn’t know that. Thanks, this is great because it also solves the problem with list videos from channel (yt-dlp “https://www.youtube.com/channel/channelid/videos” --dump-json --flat-playlist --playlist-end 10) which isn’t in Invidious API available. Btw. I improved the search results and player today.
.local/bin/yt-dlp --js-runtimes node:/home/.nodejs/bin/node “ytsearch2:tom and jerry” --dump-json
For searching videos I added choice to use yt-dlp so next version of app will need node.js. Searching channel(s) is still only through Invidious but then list of videos from channel is through yt-dlp.
Hi, I planned to upload new RPM last weekend but during weekend I got an idea, when app uses yt-dlp, then it could play videos also from other services supported by yt-dlp. So I want to make some more adjustments before I release RPM. From my testing so far: Twitch sometimes work and sometimes play Ad from Twitch and then throw error (depends on which video), some Czech sites work (stream.cz, prehrajto.cz). I will add Copy URL.
Sorry to pop in like this, but does this app search for yt-dlp in PATH? Because I just installed it and it works perfectly (and I already have yt-dlp in defaultuser’s PATH, with a script to keep it up-to-date).
And how is Invidious wrt youtube proper? Does it make all YT content accessible?
Also, how does your app choose an invidious instance?
No, it looks for yt-dlp in /home/{user}/.local/bin/yt-dlp
Invidious instance is set in main.js in function getInvInstance() to one instance which currently works. I don’t know any other public Invidious instance which works and have enabled API right now. Don’t know if Invidious make all YT content accessible, I think it should except videos which requires login because of age protection.
in search there is new choice - search videos with yt-dlp
new page Load URL where you can paste/write URL to try open video from other yt-dlp supported service, for now it’s not saved in history
audio only should work for Youtube videos
opening link from other app should work (for now it’s not saved in history except Youtube videos but without title/name)
channel latest videos works now (using yt-dlp), but I think it needs to filter Shorts videos or make two tabs, one with normal videos, second with Shorts
requires node.js, I use the 22 version from OpenRepos (thanks @Rikudou_Sennin). Node.js is required because sometimes yt-dlp needs it (for searching videos if you use the choice ; playing some videos need it too)
added copy URL and open URL (for opening in browser or other app)