2 min read
In the new world, where many of us are working 100% from home, it can be really difficult to find quiet and focus. Distractions abound, especially if you have kids. As I mentioned yesterday, closed office doors don't seem to get the message across to my children, so I thought it would be great if I could have a digital sign on my offce door. Well, I made it happen.
I'm really happy with how it turned out! How did I do it? It was pretty simple, really. I had a really old Amazon Fire tablet that hasn't been used in years, as the kids have both transitioned over to iPads. So, I charged it up, installed a "full screen browser" app and a hack that lets you keep the screen awake perpetually. Then, I wrote a quick web service to track state, and hooked it into HomeKit and Siri using Homebridge and this excellent plugin.
Tada! Now I can toggle the state of the sign using just my voice, or with automations. I can even automatically flip the status to "Don't Bother Daddy" when my calendar shows that I am scheduled for a meeting.
Update: the source code is available for the web service.
4 min read
I have a small number of content creators that I enjoy following on YouTube, but I fundamentally dislike YouTube's shady algorithms, poor user experience, and invasive ads. These days, most of the content I watch is stored on my Plex server, so I decided to find a way to automatically download and add my favorite YouTube content to my Plex server. After a bit of searching, I found this guide from DIY Futurism which outlined a nice approach to the problem.
My approach is similar, and makes use of the excellent youtube-dl project, along with a personal media scanner and personal media agent for Plex. I run my Plex Media Server on my Synology DS1019+ NAS, which I absolutely adore, so that's where I set everything up. The process was quite simple:
pip install youtube-dl.
At this point, I was ready to create a script that would download the content and add it to Plex. The key is to take advantage of all of the great features in youtube-dl, including the ability to provide a "batch" file containing target channels, the ability to embed metadata and download thumbnails, and an "archive" feature which tracks what has already been downloaded. My script is a variation on the one from DIY Futurism:
/volume1/@appstore/python3/bin/youtube-dl --playlist-reverse \
--dateafter now-2weeks \
--download-archive /var/services/homes/admin/Media/YouTube/downloaded.txt \
-o "%(uploader)s/%(playlist)s/%(playlist)s - S01E%(playlist_index)s - %(title)s [%(id)s].%(ext)s" \
Let's walk through the script. First, I change directories to where I want all of my content downloaded. This is the same directory that I configured in Plex for my "YouTube" library that I created earlier. Next, I specify that I want to process the videos in the playlist chronologically (in "reverse"). I also specify that I only want to download videos that were published in the last two weeks using the
--dateafter parameter. You can tweak this to download as much or as little of the content as you'd like.
Next, I point youtube-dl to a text file containing a list of all content that I've already downloaded using the
--download-archive parameter, which youtube-dl will automatically maintain for me. Because I am limiting my downloads to the last two weeks, I did need to pre-populate this text file with all of the historical content to avoid having to scan through thousands of videos on each run of the script.
Next, I specify a format for where to store the downloaded content and what to name the files and directories, instruct youtube-dl to embed metadata, and to write a thumbnail image as well. This data will be used by the personal media scanner and agent to help Plex index the content.
Finally, I specify a "batch file," which contains a list of channels that I want to download content from. The format is simply one YouTube URL per line.
After an initial run that I performed manually, I scheduled the script to run every four hours, and now my Plex server is my central location for my YouTube content.