Number Channel was a procedurally generated YouTube channel which ran continuously from September 18th, 2017 to September 20th, 2018, publishing a new video every 30 minutes.
Maintenance on the project was ended after a change in the YouTube API broke the upload functionality. By the end of its one year run, it had generated 8,931 unique videos.

The very first Number Channel video.

How and Why

Making Number Channel was designed as a learning experience so that I could gain the basic knowledge needed to make more complicated automated channels in the future. To do this, I broke down what I wanted the channel to do into its basic steps.

Step 1: Generate the 10 digit number
I chose 10 digits because US telephone numbers have ten digits and, to my ear, it sounded better than a 9 or 11 digit number. And ten is a nice round number, besides.

Step 2: Generate the Text to Speech
This involved learning about how to use Googles TTS API, which was surprisingly easier than I thought.

Step 3: Combine the Audio
So, this was an eye-opening aspect and, I think, one of the most powerful parts of this whole thing. I needed to put a jingle at the front and back of the TTS and, LO, there was a python library for that: PyDub. The cool thing about this is that if, in the future, I want to switch to human performed numbers, it will be trivial to stitch the pieces together using this same method.

Step 4: Generate the Image
This was the hardest part. The documentation for PIL is exceedingly difficult for beginners to understand.

Step 5: Put it All Together!
The easiest part. A single-line command to FFMPEG to combine the elements into a standard MP4 video. 

Step 6: Upload it to YouTube
This part was kinda tricky. The trickiness came, mostly, from figuring out the sweet spot in terms of upload frequency due to a daily upload limit through the API. If there wasn't, I could upload a video every 43 seconds, even on the old Core 2 Duo laptop I used as the dedicated computer for the project. But scheduling an upload for every half hour seemed to give enough cooldown time for the API. 
Back to Top