YouTube Censorship Made Me Write a Script

YouTube’s been forcing creators to censor their works more and more, and often times after a successful publish of said content. More history and valuable information is being lost every day because a corporation controls the largest source of video content freely available.

At the same time, I’ve been running commands using yt-dlp over and over again for my own purposes, aside from this censorship. The syntax is relatively easy to forget despite being very clearly defined, so I finally made a script to handle it for me.

It’s in Lua because that’s what I prefer to use, and available on GitHub’s gists. Because it is based on yt-dlp, it works for any website supported by yt-dlp. Here’s how to use it:

  ./video-dl.lua [action] <url>
[action]: What is desired.
  video (default): Highest quality video (maximum 720p).
  backup, clone, copy: English subtitles (including automatic subtitles), thumbnail, description, highest quality video (maximum 720p).
  music, audio: Highest quality audio only.
  metadata, meta: English subtitles (including automatic subtitles), thumbnail, description.
<url>: Source. YouTube URL expected, but should work with anything yt-dlp works with.

Information wants to be free. Help it.

File Size Statistics Script (Lua)

I used ChatGPT to write a script for generating a list of file statistics based on everything within the directory it is placed in. It uses LuaFilesystem, and generates a final output like the following after it’s done processing through the files:

2359    files found.
Average (mean) file size:       44842.524374735 bytes
Standard deviation:     320478.50592438
Multiple modes:
Mode 1: 126     bytes
Mode 2: 204     bytes
Frequency:      7
[####################] 0.00 - 199271.16: 2245 files
[##########          ] 199271.16 - 398542.33: 59 files
[#######             ] 398542.33 - 597813.49: 16 files
[#######             ] 597813.49 - 797084.65: 14 files
[#####               ] 797084.65 - 996355.82: 6 files
[#####               ] 996355.82 - 1195626.98: 8 files
[##                  ] 1195626.98 - 1394898.14: 2 files
[#                   ] 1394898.14 - 1594169.31: 1 files
[#                   ] 1594169.31 - 1793440.47: 1 files
[                    ] 1793440.47 - 1992711.63: 0 files
[                    ] 1992711.63 - 2191982.80: 0 files
[#                   ] 2191982.80 - 2391253.96: 1 files
[                    ] 2391253.96 - 2590525.12: 0 files
[                    ] 2590525.12 - 2789796.29: 0 files
[                    ] 2789796.29 - 2989067.45: 0 files
[##                  ] 2989067.45 - 3188338.61: 2 files
[                    ] 3188338.61 - 3387609.78: 0 files
[                    ] 3387609.78 - 3586880.94: 0 files
[                    ] 3586880.94 - 3786152.10: 0 files
[                    ] 3786152.10 - 3985423.27: 0 files
[                    ] 3985423.27 - 4184694.43: 0 files
[#                   ] 4184694.43 - 4383965.59: 1 files
[                    ] 4383965.59 - 4583236.76: 0 files
[                    ] 4583236.76 - 4782507.92: 0 files
[                    ] 4782507.92 - 4981779.08: 0 files
[                    ] 4981779.08 - 5181050.24: 0 files
[#                   ] 5181050.24 - 5380321.41: 1 files
[                    ] 5380321.41 - 5579592.57: 0 files
[                    ] 5579592.57 - 5778863.73: 0 files
[                    ] 5778863.73 - 5978134.90: 0 files
[                    ] 5978134.90 - 6177406.06: 0 files
[                    ] 6177406.06 - 6376677.22: 0 files
[#                   ] 6376677.22 - 6575948.39: 1 files
[                    ] 6575948.39 - 6775219.55: 0 files
[                    ] 6775219.55 - 6974490.71: 0 files
[                    ] 6974490.71 - 7173761.88: 0 files
[                    ] 7173761.88 - 7373033.04: 0 files
[                    ] 7373033.04 - 7572304.20: 0 files
[                    ] 7572304.20 - 7771575.37: 0 files
[                    ] 7771575.37 - 7970846.53: 0 files
[                    ] 7970846.53 - 8170117.69: 0 files
[                    ] 8170117.69 - 8369388.86: 0 files
[                    ] 8369388.86 - 8568660.02: 0 files
[                    ] 8568660.02 - 8767931.18: 0 files
[                    ] 8767931.18 - 8967202.35: 0 files
[                    ] 8967202.35 - 9166473.51: 0 files
[                    ] 9166473.51 - 9365744.67: 0 files
[                    ] 9365744.67 - 9565015.84: 0 files
[#                   ] 9565015.84 - 9764287.00: 1 files
0th percentile: 0       bytes
10th percentile:        167     bytes
20th percentile:        317     bytes
30th percentile:        476     bytes
40th percentile:        692     bytes
50th percentile (median):       986     bytes
60th percentile:        1428    bytes
70th percentile:        2101    bytes
80th percentile:        3650    bytes
90th percentile:        38917   bytes
100th percentile:       9764287 bytes

With minimal effort, you could change it quite a bit, because it’s written as pure functions. I wouldn’t have achieved this myself, nor produced it so quickly, if I didn’t have ChatGPT do the easy stuff for me. I found the experience quite helpful. While ChatGPT did once forget that Lua indexes tables starting with 1, and made a few weird decisions and downright inefficient code in some places, it allowed me to focus on making it work exactly how I wanted it to, instead of just mostly correct or “good enough for now”.

(Btw, the example output above is from my Obsidian vault. You can read a bit more about how I use Obsidian to organize my notes here.)

Google Chrome’s DNS Fucked Up, What Do?

Google Chrome's domain does not exist error page.

Google Chrome on my laptop randomly decided my blog’s domain doesn’t exist. Except, it clearly does. Searching for a solution tells me to do everything from restarting the computer to deleting all browser history – which should be obviously wrong, not to mention annoying. Here’s the laziest quickest way I solved it:

Google Chrome's net-internals' DNS page.
Step 1: Clear host cache.
  1. Go to chrome://net-internals/#dns and click “Clear host cache”
  2. That didn’t work.
  3. Go to chrome://settings/security and use a different secure DNS provider from the default
Google Chrome's security settings page.
Step 3: Use an actually secure DNS provideer.

Considering Google decided to be evil and does the same mass data hervesting and privacy violations as every other big tech company, we shouldn’t be using anything they touch. However, the least we can do and still have a compatible browser is to stop using their “secure” DNS provider anyhow..

Fuck Windows ..and Ubuntu (A Rant)

My OS History

I started with Windows 95, and it was okay. Upgrading to Windows 98 helped a lot and I still love that OS. My next experience was with Windows XP, and it was good. When Windows Vista first came out, I tried it and had several problems with it. (No, I don’t remember what they were.)

Somewhere around this time I was introduced to Linux and tried a few distributions. (My favorites were Ubuntu, slax, & Antergos. Later, my absolute favorite would be CrunchBang. I still miss all of these, including old versions of Ubuntu.)

After Windows 7 came out, my experience with Windows started to go downhill. Nonsensical errors (why does an administrator not have full disk access?), rebooting my computer without consent (no matter how many times I disabled this “feature”), running slowly despite good hardware.. the list is long. This is when I first thought about using Linux for things besides programming.

I again skipped Windows versions until Windows 10, mainly due to free upgrades being offered and hating the UI changes in Windows 8 that were partially walked back. At this point, my hatred started. Default applications I can’t uninstall or even hide, advertisements built-in, a virtual assistant I could not disable or remove always running in the background.. and they even removed the pretense of controlling updates.

Oh, and the default malware included to spy on your usage, again, without consent.

But the problem is that I was running a mildly successful gaming YouTube channel at the time, I needed Windows because no video editor on Linux was good enough, and games only work on Windows.

Then Steam announced Proton, and reviews were good. Over time, Linux seemingly became viable. There was even a hot new video editor called daVinci Resolve, and it runs on Windows, macOS, and Linux!

What Happened to Ubuntu?

I ran various versions of Ubuntu as a secondary OS or on a USB drive from 8 to 18 without problems. Common problems like networking, video card support, and audio issues were never difficult – and often did not even occur. Ubuntu was a good choice because its popularity made it more often supported, and it was usually stable.

Not this time. I spent weeks trying to get it working, and while I was eventually successful, it was only through stubbornness and a lot of reading.

I started with a new SSD, as my old one only had 128 GB of space, and I was going to need a lot more for video editing and running games that require better disk streaming. First, the install failed because a disk I wasn’t even using is corrupted. Then, it failed to install the bootloader. Then it failed because of a partially completed Ubuntu install. I moved on to trying elementary OS (a derivative of Ubuntu) because it has several improvements and is still widely supported, but this also failed.

Turns out, since version 14.04, there’s a bug where Ubuntu won’t install a bootloader if you select any disk besides the first. There is no warning of this anywhere, and I had to find a bug report from half a decade ago to even learn this. So, I removed all disks except my new SSD, and moved it to first SATA port on the motherboard, and Ubuntu .. still didn’t install.

Time to try again, except I accidentally booted into Ubuntu from the SSD.. you know, the OS that failed to install? So, it turns out that not only does it fail to install a bootloader under most possible conditions, but a success crashes the installer. Oh well, at least I now have a working system, time to update!

Ubuntu Prominently Publishes Broken Versions

I run updates, and find out there’s a new OS version. I’d started with version 20.10 because it was what was out when I started this, and version 21.04 had released since then. I run the upgrade.. and now I can’t boot anymore. This has never happened to me before, and this is a brand new system.

Turns out, version 21.04 shipped with a bug that breaks the bootloader on any system, whether it be a fresh install or through an upgrade. Here’s the fucking problem: They only disabled update notifications, instead of pulling the faulty update or OFFERING ANY WARNING WHATSOEVER.

There is no reason I couldn’t have been notified not to update. There is no reason to keep a broken release public. There is no reason for any of this to have happened the way it did.

This is unacceptable, and even since fixing the problem on my system, Ubuntu has just been a completely different system than what it was. They added ads/spyware to the base OS and pushed updates that break configuration & uninstall apps. It’s just not good anymore, and it makes me sad.

Backup Solutions

The following is current as of May 2019:

I’ve spent a few days researching software and services for backing up data. My requirements: encrypted backups, deduplication, low cost, compatible with Windows 10 & Linux, and preferably using off-site storage.


I have only considered two competitors: tarsnap and restic. Tarsnap can create keys with different permissions – a server can run backups with no danger of a compromise leading to the destruction of backups, but it is only compatible with for data storage.

Restic allows you to plug it into any system for storage. I prefer tarsnap’s extra layer of paranoia, but the service costs are where the battle ends for me.

Update: These tools both deduplicate at a block size rather than by file, and both utilize a cache for speeding up backups. Both chunk at a dynamic level, with data blobs/chunks/blocks usually being around 1MB. Tarsnap’s cache is local, but can be restored by scanning the backup server (at a network usage cost of approximately 0.1% the size of the data stored), while restic uses both a local cache and a cache on the destination. Restic also creates checkpoints while uploading backups to reduce duplication caused by interrupted uploads.


  • Tarsnap: $0.25/GB/month (transfer: $0.25/GB)
  • $0.04/GB/month (min: 200 GB)
  • Amazon S3: f***ing complicated pricing
  • Wasabi: $0.0059/GB/month (no other charges)
  • Backblaze B2: $0.005/GB/month (download: $0.01/GB)
  • Local: Hardware costs + electricity.

Obviously, price is not everything. offers daily snapshots, cheaper per-GB pricing with mass amounts of data storage needed, and additional features. Amazon S3 and Wasabi are designed for application services rather than storage. Backblaze’s B2 is probably the only cloud service (of those I examined) designed for this usage.

Ultimately, cost is my limiting factor. My backups are using restic and local hardware for now, but I plan to move to using Backblaze B2 as I can afford to.


Since publication, a few have reached out to me recommending alternative services or sharing their choices. I have not compared these as thoroughly as I did my shortlist, but I feel they deserve their own note for anyone pursuing this decision themselves:

  • SpiderOak One Backup: Starts at $0.04/GB for their 150GB plan, goes down to $0.0058/GB with a 5TB plan. I’d probably choose it if I had a bit more money to spend.
  • CrashPlan for Small Business: $10/computer, “unlimited” storage. Haven’t looked at the caveats included.