How to migrate from YouTube subscriptions to RSS subscriptions with TinyTinyRSS

Over the last several years Youtube has been changing their user interface in ways to make it harder for viewers to see posts from content creators that deviate from YouTube’s political and social ideology. In 2014 the subscriptions page would show every video posted by every subscribed channel in order from most recent to least recent, with no special treatment given in thumbnail size or weighting the order in which videos are shown. The total number of videos shown on a 1920×1080 screen was approximately 5 rows by 6 columns (if I remember correctly). The subscription page is back now, but for a time, it was completely removed and replaced with an abomination that is very similar to the current home page, where instead of showing recently posted videos, youtube would have horizontal showcases of the most relevant or popular videos by a single channel. As you can see in a screenshot of my home screen, channels that I not interested in and not subscribed to are being advertised to me instead of showing relevant content.

Scrolling down would show more showcasing either by channel or by topic. Much of the content was not curated by the user through subscriptions, rather it was curated automatically by YouTube and often caused frustration for users because the content was low quality. YouTube’s current trend is to lower the quality of recommended videos by removing many historical, political, and pro first and second amendment videos. Going by their trend, it is likely that they will turn their evil eye against subscriptions again in the future. I decided before then to simply use a different service to curate youtube content to avoid new frustrations with the service.


1. Export subscriptions from YouTube

Go to the subscription manager page and scroll to the bottom of the page. Click “Export Subscriptions” to download the .opml file to your computer.

2. install TTRSS

Instructions are listed on the TTRSS website. When creating the database remember to collate the database using UTF8 Unicode. The standard collation in Postgres cant handle extended 4 hex emojis and will crash when one is encountered in the feed.

3. import your subscription feed

  1. After creating an account and logging in on TTRSS, click “Action…” then “Preferences” in the upper right.
  2. Select the “Feeds” tab.
  3. Select the “OPML” group
  4. “Choose File” > select your file > “Import My OPML”
  5. You can choose to put these into a folder if you like.

4. how to manually add new youtube channels to your feed list

Case 1: the channel ID is in the URL

Example: the channel URL for YourMovieSucks is

The channel ID is UCSc16oMxxlcJSb9SXkjwMjA

The resulting RSS URL to add to TTRSS is

Case 2: channel ID is not in the URL.

Some channels reach a minimum subscriber count to be able to set their channel URL to replace the channel ID with their channel name.

Example: The URL for the channel TheGreatWar is, but that’s not the channel ID.

To get the channel ID, open the landing page of the channel you want to subscribe to (not the Videos page or any other page) and look at the source of the page. This can be done in Firefox with ctrl+u or right-click > View page source. Search the page source with ctrl+f for channel_id. There should be one match which includes the entire URL needed to subscribe with TTRSS.

Subscribing to an individual feed can be done with “Actions…” > “Subscribe to Feed”. Paste the link into the field and click “Subscribe”.

FIX: Nginx starts without errors, but wont bind to any ports

While trying to create a new website last night I ran into the issue of not being able to bring it online. Instead, when trying to access the domain nginx would redirect the browser to the website marked as default_server in my nginx configs. This is normal behavior when a domain points to your server but you don’t have a server set up in nginx for that domain, or if you access the host via IP instead of a domain.  I checked permissions for the files (correct), I checked that nginx was running under the correct user (correct), and I checked that the other websites were still up (they were), I checked that I had properly symlinked the config from sites-available to sites-enabled (looked good but it was the root problem in the end). I decided to try removing a site and and re-adding it to see what would happen. After restarting ngnix, both the new site and the one I tested with are now not working. Being that it was 2 in the morning and obviously a great time for me to be working on a server, I felt the best course of action would be to remove and re link every single link in sites-enabled. None of the sites would come up with the error “connection refused”. nmap showed 80 and 443 as closed on the server. I tried setting a site to display on port 8000 and that also stayed closed. No matter what I did i could not get a error to show or any ports to open. Even after backing up my files, purging nginx, and reinstalling I was not getting new results.

The issue ultimately was the way I was symlinking. instead of running ln -s /etc/nginx/sites-available/config /etc/nginx/sites-enabled/config I was running (from sites-available as my working dir) ln -s config ../sites-enabled/config. Unbeknownst to me, nginx wont throw any errors or warnings about bad symlinking and will ignore any improper symlinks in sites-enabled. Furthermore, when there are no active configs telling ngnix to use ports 80, 443, etc., it will not bind those ports (obviously).