Kaleidoscribe

Kaleidoscribe is a web-based alternative YouTube client that allows you to subscribe to channels and playlists without a Google/YouTube account. It crawls the YouTube website in the background to give you a relatively up-to-date view of your customized subscription feed.

Background

Kaleidoscribe screen showing the main menu on the left and a tile list of videos on the right

The Kaleidoscribe subscription feed shows the videos from your subscribed channels and playlists in order of recency.

I used to have a YouTube account to host my public videos. The same account was what I used to subscribe to other channels and watch YouTube content. In an effort to disentangle my daily life from Google and other cloud service providers, I decided to delete my YouTube account and replace it with a suitable feed for the YouTube channels I follow.

It turns out that YouTube still offers RSS feeds for channels as well as playlists. Just funneling those into my feed reader would get me 80% to my goal, but I also kinda wanted information like video length and video thumbnails shown on my video feed, so I decided to implement it as a custom software project. This project ended up evolving into something that relies more on scraping the YouTube website for more detailed channel/playlist/video information than the RSS feeds can provide.

Features

The subscription management screen shows a list of subscriptions with buttons to unsubscribe or filter, as well as a field to search on YouTube

This is the “Manage your subscriptions” page. It allows you to search for new channels and playlists on YouTube, unsubscribe from any of your current subscriptions, or adjust filtering settings for each of them.

Kaleidoscribe is a self-contained Python 3 application that uses SQLite for storage. It supports multiple user accounts and has password-based logins and session management. YouTube feeds are updated in the background. Videos on the feed show a button panel upon mouse hover where you can mark them as “Watched,” “Watch later” or “Not interested.” From the menu bar on the left side of the page you can access your subscription feed, your “Watch later” list, your watch history and your subscription management page. You can subscribe to YouTube channels and playlists.

Video information is pulled from YouTube’s RSS feeds first and then enhanced with some additional scraping of video pages. Video thumbnails are fetched and stored locally. That means that even if a video is removed from YouTube, its metadata remains accessible to you in Kaleidoscribe.

If you approach YouTube purely as a platform to subscribe to channels and playlists you enjoy, Kaleidoscribe replicates that entire experience. Individual video links lead to the video page on YouTube. There is no need to be logged into a YouTube/Google account, and if you additionally block YouTube from storing cookies, it will be unable to build a profile of your watching habits.

Project Perspective

The Watch Later page also shows tiles for videos and looks exactly like the subscription feed, apart from the title header

The “Watch later” page shows a list of videos that you have marked to watch later.

I started this project with a strong motivation to eventually make it public, and took some time to come up with a name that would be reasonably marketable and not already in use by anything else. The showstopper in that regard was YouTube’s rate limiting. Understandably but still annoyingly, YouTube doesn’t particularly want people scraping their web page and building custom tools around it, so I need to be very careful about my scraping strategy to not get my server rate-limited, which has happened a few times.

I came up with a dynamic updating strategy that refreshes channels with frequent uploads more often than channels which upload rarely. Even with that though, it can take a day or two for new videos to show up on my feed. Personally that doesn’t bother me all that much, but I worry that general audiences would not be willing to accept it. Also, YouTube customizes pages by IP-based geolocation, which means that content which is unavailable in my country is also unavailable to my Kaleidoscribe installation.

In spite of these issues and in hopes that Google/Youtube will not take any active steps against this project unless it becomes too popular, in 2022 I decided to fix up the code a bit, turn some of my hard-coded decisions into configuration settings, and finally release it to the public. Maybe it will find a niche with self-hosting enthusiasts.