Mario Villalobos


School’s Out

  • Notes

School ended on Wednesday, and I saw all the kids head home for the summer. Yesterday I said goodbye to teachers and friends who are moving on to new jobs and new opportunities. I also said goodbye to a 6th grader who transferred to our school last summer and who was as shy and stubborn a kid as I’ve ever met in my life but who slowly opened himself to us throughout the year and became such a loving and overwhelming force in my life that I almost cried as I gave him one last hug and said goodbye to him one last time.

I believe the summer is a time for new beginnings and a time to experiment and have fun. I have plans and ideas and wants and wishes for how I want to spend this summer, and I know life usually has other plans for me, but I feel like I’m in a better place now than I’ve ever been in my life that I know in my bones I will go with the flow and live as best as I can, no matter what life decides to throw at me.

I will miss my friends and I will miss these kids I may never see again, but my life is better because we shared a bit of ours for a brief period of time. “He looks up to you,” a co-worker of mine told me a few weeks ago, referring to the 6th grader. “Doesn’t it feel nice to have someone that looks up to you like he does?” We talked about anime and manga and my love of black coffee and his utter disgust of it. We would tease each other relentlessly, and I’m simply going to miss him. I’m going to miss a lot of things here in the next few days and weeks, but life moves on and I have to, too.

Automating YouTube with yt-dlp

  • Notes

I spent last weekend thinking through and implementing some ideas that have been rattling around my head for months. I wanted a way to automatically download videos from every YouTube channel I followed and to download any ad hoc video I came across in my day-to-day life that I wanted to watch later. What I didn’t want was to manage any of this myself. I had been using my RSS reader to get new videos from the channels I subscribed to, but I had to then use my RSS reader, filter through the items, add each item to my YouTube list, then initiate the download command in the terminal myself. I explained how I did this in this post from November, but again, I wanted something more automated.

So I figured out how to make it more automated… by automating most of it!

Here’s how it works.

What you need

I won’t go through what yt-dlp is or why I set it up the way I did because I explained that in my previous post, so please read that if you need a quick explainer. What this post will go through is how to setup yt-dlp to “subscribe” to your own list of YouTube channels and to download your own list of ad hoc (or watch later) videos automatically.

I’m using a 2018 Intel-based Mac mini with yt-dlp installed per their installation instructions. That means this setup is intended for people with a device running macOS. Optionally, to make this setup just that tad bit more awesome, you will also need:

First things first

Before we can automate anything, we have to create a few files first. In my previous post, I created an file to log all the videos I’ve downloaded. This is important. The archive file is the most important piece to this process, so create it now. Good? Okay. I then created a file called and placed that in my main YouTube folder where all my files live. In this file, I added each channel I wanted to subscribe to, one channel per line. For example, a snippet of my file looks like:

Essentially, that’s all you need. There’s nothing fancy to this. Keep in mind that this will download all the videos these channels produce, including shorts and other things. I don’t mind that, so this is good enough for me.

The next thing, and this is where the magic happens, is to simulate your yt-dlp command and add each file to your file. To do this, add both the --simulate and --force-write-archive commands. --simulate tells yt-dlp not to download anything and --force-write-archive adds all the videos from all your subscriptions to your file. Do you see why this is important? When you’re ready, you can now run your command. Mine looks like this:

yt-dlp -P "/path/to/YouTube/" -P "temp:tmp" -P "subtitle:subs" --simulate --force-write-archive -o '%(uploader)s-%(upload_date)s-%(title)s [%(id)s].%(ext)s' --download-archive '/path/to/' -f 'bestvideo+bestaudio/best' --sub-langs all,-live_chat --embed-subs --yes-playlist --batch-file '/path/to/'

Depending on how many subscriptions you’ve added, this process could take a long time, so go outside, hang out with friends, read a book, do something else while this process runs. By the end of this, your file will most likely be huge. Mine has over 15,000 lines on it but barely cracks 300 KB. So really, you can leave this file alone forever and it’ll never cause you any issues (knock on wood).

This takes care of my subscriptions, but what about any ad hoc videos I may want to download and watch later? Well, I mostly answered that in my previous post (you should really read that post, it’s pretty good). Specifically, the important part is creating a file and including the --batch-file command that points to it. Then, as I go along with my regular internet surfing life, I add links to any videos I want to watch later to this file using a simple Shortcut and my system automatically downloads it. How?

Well, I’m glad you asked!

Let’s automate the shit out of this

Time to create a few more files. I created four and called them:, subscriptions.plist,, and youtube.plist. I placed these files in my main YouTube folder, but the plist files can be moved or copied to /Library/LaunchAgents, which we’ll do later. I’ll focus on my subscriptions first.

In my file, I added:

/usr/local/bin/yt-dlp -P "/path/to/YouTube/" -P "temp:tmp" -P "subtitle:subs" -o '%(uploader)s-%(upload_date)s-%(title)s [%(id)s].%(ext)s' --download-archive '/path/to/' -f 'bestvideo+bestaudio/best' --sub-langs all,-live_chat --embed-subs --yes-playlist --batch-file '/path/to/'

This is similar to the code above but without the --simulate and --force-write-archive commands. This is the real deal command, so if you haven’t run the --simulate command, then you will be downloading everything in your file. Maybe that’s what you want, so you do you. I’m not your mom.

The subscriptions.plist file is where the magic happens (lots of magic happening today). This file contains this bit of code:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

I’ve simplified my plist file compared to say, Jason, which I took a lot of inspiration from, but I customized his setup to fit my needs. He includes a few log files that are good practice to include, but I like living on the edge, so I didn’t include them. If you’d like to add them, include something like this in your plist file:


A few things to note:

The Label key is essential if you plan on adding more than one file to the LaunchAgents folder. I gave this one a label of subscriptions to differentiate it from the others.

I set my StartInterval to 21600, which is 21,600 seconds, or 6 hours. I set it to this because this is not something I want running all the time, and it’s not something I want to be checking my downloads folder for to see if there’s something new. That’s the behavior I wanted to eliminate, so putting it to 6 hours has helped me pull away from my devices while still ensuring I have something new to watch a few times throughout the day. Honestly, I could set this to 24 hours and still be happy, which might be something I do in the future. Stay tuned.

Once this is all done and setup to your liking, navigate to /Library/LaunchAgents and copy your plist file into it. macOS might notify you that is an item that can run in the background. That’s exactly what you want. You may also have to add bash to your Files and Folders section in the Privacy & Security pane in your System Preferences. This ensures bash has permission to run on your system. Boy did that one have me scratching my head for a while.

And that’s essentially it. Rinse and repeat with the file:

/usr/local/bin/yt-dlp -P "/path/to/YouTube/" -P "temp:tmp" -P "subtitle:subs" -o '%(uploader)s-%(upload_date)s-%(title)s [%(id)s].%(ext)s' --download-archive '/path/to/' -f 'bestvideo+bestaudio/best' --sub-langs all,-live_chat --embed-subs --yes-playlist --batch-file '/path/to/'

And the youtube.plist file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

And you have a fully automated YouTube setup. Note, I set the StartInterval to 60 because I don’t mind this running all the time because I don’t add too many ad hoc videos anymore, so when I do, I’d like to watch it sooner rather than later.

Because you took the time to add all your channel videos to your file, from this point forward, this setup will ensure you only download new videos as they’re posted to your subscriptions. Pretty nice, right?

But there’s one more piece to this that’s like icing on the cake. It’s not required, but I feel like this really completes the entire setup.

Tidying things up

The last thing I did was use a few apps to make this entire experience a tad nicer. First, I launched Hazel and added my YouTube folder. I then created… many rules:

  • Go into subfolders. I set the Kind to Folder and selected Run rules on folder contents. This rule ensures every rule hereafter is run within all the folders contained in my main YouTube folder. This is important because:
  • ‌Delete empty folders. Each rule hereafter creates lots of folders, and this rule tidies things up by deleting any empty folder. This rule is also simple. First, I set the Kind to Folder, and the Sub-file/folder Count to 0. I then Move any matches to the Trash. This is very important because:
  • Sorting subscriptions by folder. I created a rule for each and every subscription I have. The rule here is simple. I set the Name to contains the name of my subscription, e.g. MKBHD. I then used the Sort into subfolder option to sort my videos into its own folder. The pattern I used was Subscriptions ▸ <name of subscription>. Why do this? Because I don’t have time to watch TV all the time, and sometimes I want to binge through one channel’s output, and this makes that easier. After adding a rule for each of my subscriptions, I created my final rule:
  • Recently Added. This rule moves any file that hadn’t already been matched to a folder I called Recently Added. Again, this rule is very simple. All it has is Kind set to Movie and it Sort[s] into subfolder any matches to my folder called Recently Added.

Having this run 24/7 removes yet another cognitive weight from my life and just keeps things tidy. Work smarter not harder, right? And finally, on to the final step.

In Plex (you did download and install it, right?), I downloaded the YouTube-Agent.bundle plug-in and installed it per their installation instructions. This plug-in requires a bit of setup before you can take advantage of it. You have to create your own YouTube API key, which isn’t too tough, and each one of your movies needs to have the YouTube ID in its filename. Review my yt-dlp command and you may notice I’ve added [%(id)s] to my filename. This option is there to ensure YouTube-Agent.bundle adds the correct metadata to my movies.

Finally, I created two libraries, one called Subscriptions and the other called Recently Added. I pointed each to its respective folder, and in the Advanced section, I chose the YouTubeMovie plug-in in the Agent option. This is also where I added my API key.

If everything went well, then you truly have a (mostly) automated YouTube setup. I say mostly because I still have to add any ad hoc videos to my file, but it literally takes 2 seconds to do so and that’s the only actual work I have to do. For the most part, I haven’t had to troubleshoot this setup yet, but knowing the pace of technology, I will have to sometime in the future.

Until then, I’ve been really enjoying this setup. Dare I say, it feels a tad magical, and I love it. Maybe you will, too.

Maxïmo Park singer Paul Smith singing into a microphone at a concert
Blurry photo of Paul Smith shot on my first ever camera, the Canon PowerShot A550

Bandcamp Friday

  • Notes

One of the reasons why I buy music I enjoy and love is because when I was a kid, I used to pirate all my music. Like many, it started with Napster, then moved on to other peer-to-peer file sharing programs like Soulseek, and ended with torrents. I spent all my free time during my late teens and early 20s simply reading about, downloading (pirating), and listening to music. And I wasn’t discriminate about it. I downloaded everything—my focus was on full catalogs. Bob Dylan? The Beatles? Chuck Berry? Miles Davis? I found and downloaded everything they released. At its peak, my collection consisted of tens of thousands of songs, all of which I listened to regularly. I was addicted and a bit insane. At one point, I saved all these mp3s onto dozens and dozens of data CDs, then onto multiple iPods, and eventually, into a single, high capacity hard drive. This served me well for a long time… until I moved to Montana and this hard drive failed.

All my music, all that music I spent years collecting and organizing and listening to? Gone.

Except for the stuff I purchased legally. That stuff has stuck around. At the time, losing my hard drive full of pirated music (and movies and TV shows) felt like I lost a good friend or a family member. I was heartbroken, but it turned out to be a blessing in disguise. I always knew pirating was wrong, but I was broke and acquiring all this media was easy, so I ignored that voice in my head and did it anyway. With the loss of this hard drive, though, came the opportunity to change my ways and to do the right thing. So I did, and I have.

I’ve been purchasing my music ever since, and I don’t see myself ever changing that. With that said, I purchased more music today on this last Bandcamp Friday until August, and here is today’s haul.

Even though I pirated a lot of music while I was in college, I spent a lot of money going to concerts. All the bands and artists I wanted to see (and learned about from my pirating habit) came through Los Angeles, so I was able to see a lot of bands.

One of them was Maxïmo Park, an alt rock band from Newcastle. In 2007, they released Our Earthly Pleasures, their second studio album, and they came by LA in support of it. I did not buy this album, but their first one, A Certain Trigger:

I hadn’t listened to this album in probably ten years, and all it did while listening to it was bring back memories of my late college years. I had purchased the Canon PowerShot A550 around that time, and I took it with me to their show. There’s a blurry photo of Paul Smith at the top of this article, and there are way more where that came from, but I’ll keep those to myself.

Ticket stub for The Go! Team at the Echoplex for Sunday October 21, 2007

Around the same time I went to see Maxïmo Park, I took my friend Brian to see The Go! Team at the Echoplex. This was a really fun show, one I remember as the one where I saw Adrian Grenier in the audience. Entourage was big at the time, so I thought that was really cool. I still think Thunder, Lightning, Strike holds up, all these years later.

You know how I said I liked to download full catalogs? One of my main aims was to educate myself on music history, and one of those bands that popped up over and over in my research was Pavement, one of the best bands of the 90s. Since the great hard drive crash of 2012, I hadn’t supported this band… until now. Wowee Zowee is still as good as when I first heard it. What a classic.

I think in my research I also came across this band called Porcupine Tree, “the biggest rock band most people have never heard of.” I remember I had In Absentia on repeat for weeks, and again, I think it still holds up. I’m listening to it now, and I feel like I’m back in college, walking the streets of LA with my wired iPod headphones, and jamming out to my own personal soundtrack.

This next one is random, but one I’m glad I found on Bandcamp. I’ve never really been a big fan of death metal, but I remember when I first listened to this album, I felt like I could finally, sorta, understand the appeal. Disfear’s Live the Storm is probably the one and only death metal album I will ever enjoy and own, and that’s okay. It’s fucking good.

These next few albums are more recent releases, so I never pirated them in my youth.

I’ve been a fan of Yves Tumor since I first listened to Heaven to a Tortured Mind in 2020, an absolutely incredible album. Here is his most recent album, and judging by a few of the singles he’s released, I know I’m already going to love this one.

I hadn’t really heard much of Indigo De Souza, but when I saw her video for the song Younger & Dumber, I knew she was an artist I wanted to keep my eye on and support. To my surprise, she’s offering these two albums with whatever price you’d like to pay, so there’s no reason not to check her out. These two albums? 🔥🔥🔥

I realize not everyone has the same musical taste as me, and that’s fine. We’re each our own person. My hope is that maybe I introduced someone to music they’ve never listened to before, and in turn, they go and support these or other artists in the future. We all deserve to get paid, especially artists, for the work we produce. Let’s stick together and have each other’s backs.

When people start to work, they will see the beautiful mountains

Let’s Appreciate the Sound of the Rain Now

  • Notes

For the past few weeks, I’ve been copying down the notes I took while reading Shunryu Suzuki’s Zen Mind, Beginner’s Mind in my notebook. It’s been a marvelous journey but a journey that is not yet over.

While you are practicing zazen, you may hear the rain dropping from the roof in the dark. Later, the wonderful mist will be coming through the big trees, and still later when people start to work, they will see the beautiful mountains. But some people will be annoyed if they hear the rain when they are lying in their beds in the morning, because they do not know that later they will see the beautiful sun rising from the east. If our mind is concentrated on ourselves we will have this kind of worry. But if we accept ourselves as the embodiment of the truth, or Buddha nature, we will have no worry. We will think, “Now it is raining, but we don’t know what will happen in the next moment. By the time we go out it may be a beautiful day, or a stormy day. Since we don’t know, let’s appreciate the sound of the rain now.” This kind of attitude is the right attitude.

— Shunryu Suzuki

All that matters is right now. This moment is all we have. Let go of the past and the future and simply focus on this moment, on this breath, and appreciate this existence. Death is waiting for us; life isn’t. So, live.

Close up of a Chainsaw Man manga page
Spoilers ahead!

Chainsaw Man #127

  • Notes

I admit, I’ve lost whatever blogging rhythm I built up since before I got sick in January. Not promising anything, but here’s a silly post to remind me what posting something new feels like.

It’s been a while since I’ve shared manga I like, and last week’s issue of Chainsaw Man made me laugh. Granted, I have a very childish sense of humor, so the joke at the end of this issue worked on me.

Obviously, spoilers ahead.

Full page capture of Chainsaw Man manga that begins in media res with Asa asking, How did you get over that, Chainsaw Man? Chainsaw Man says, I haven't! I'm not over it! Only, I've got something to live for! Something I look forward to so much that I'm willing to eat that crap burger! Asa asks, What's that?
Full page capture of Chainsaw Man manga that continues with Chainsaw Man yelling, Sex! I wanna have sex! Asa replies, Eww!

That final eww!! It had me on the floor! 🤣

Bandcamp Friday

  • Notes

I watched this performance by Hania Rani last night, and I immediately fell in love. I found her Bandcamp, and today, I bought two of her albums:

Without question, they’re good, and I love them. Along with Hania’s albums, I bought these four albums:

This music puts me in a certain mood, a mood I like to live in. Maybe you will, too.

Almost 100%

  • Notes

I knew I was getting better when I noticed I was dancing to my music while I cooked dinner the other night. The last time I had worked out was on Friday, January 20th, and when I woke up the next day and felt that scratch in my throat, I knew I was in for a rough week. Little did I know my rough week would last almost four weeks. Two posts ago, I wrote how good I felt and how my new habits and routines all seemed to be clicking at once. I recounted in my next post the beginnings of my sickness and how I thought I was getting better. A few days after that post, I worked out again, even though I wasn’t feeling 100%, and I worked out again the next day even though I was feeling worse than I did the day before, and that decision, unfortunately, exacerbated my sickness and made me feel worse than the first week living with my illness. This sickness knocked me out, and I was at a point a few weekends ago where I seriously considered writing my eulogy. I felt that awful. But here I am, in this third post about my health, confident that I’m closer to 100% than I have been since my last good workout on the 20th of January.

I worked out on Monday of this week, then again on Tuesday, and I felt really good after both workouts. Unfortunately, things at work carried over into my personal life and I haven’t worked out since. In my notebook, I’ve told myself that this is a transitionary week, a week where I try to build my old habits and routines slowly, a week where I give myself some slack, and that’s what I’m holding onto now. Things were going great before my sickness, and I have wondered where I would be with some of my goals if I didn’t get sick, but I can’t think like that. Life is all about how well you can adapt to all the bullshit coming your way, and this sickness—something that felt like pneumonia multiplied by a million—was the epitome of bullshit. But I’m better now, as close to 100% than I have been since that third week of January.

There are lots of things I want to do, want to accomplish, but they all depend on good health. There’s only so much I can do when all I have the energy to do is filling trash bags with used tissues and cough drop wrappers. I still managed to get up to my alarm every morning and write in my notebook, but even then… I am ready to get back to work and get back to living the life I want to live. I am almost at 100%, and I want to focus and do what I want to do instead of what I’m being forced to do.

I appreciate each breath of fresh air, and I hope I have many more before it’s all said and done. Let me focus on that and enjoy this moment of life.

Barely Alive

  • Notes

For the past week, I’ve been battling a cold that has kept me from living the life I want. I first felt the sickness coming last Thursday when I felt that familiar yet godawful tickle in my throat that developed into a full-blown old man’s cough by the weekend. I remember I slept for over 9 hours one of those days and I was still tired.

My only saving grace was that my new Playstation 5 arrived that Thursday, so while I recovered, I played a lot—and I mean a lot—of God of War, so much so that I’m only three trophies away from earning the marvelous platinum trophy, a feat I usually don’t care about but I do in this instance. My whole entire week has been focused on recovering from this sickness and playing this game on my new toy, and it’s been nice. Unproductive as hell, but nice.

I returned to work yesterday for the first time all week, but I could only manage half a day before I clocked out early and went home. I woke up this morning hacking half my lung, but I feel better. During this sickness, I’ve still been going through my comforting morning routine, and that meant that I cold achieve this little accomplishment I can hang my hat on:

I can’t believe it’s “only” been 100 days since I started meditating again. It’s been a much needed companion for me these past few months, and I’m grateful for it. I’m still not at 100%, but I’m getting there. I have been able to sit at my desk and work all morning today, for example, and that feels good. I’m still not able to workout or do anything that requires 100% focus, but I’m getting there. I can see the light at the end of the tunnel again, and that feels very nice. I’m hoping for a restful weekend so I can be back at it again by Monday.

Here’s hoping.

Over the Weekend

  • Notes

I feel good. Great, even. Many (but not all) of my new habits and routines I’ve been building over the past month seem to be clicking all at once now, and my days feel good, and because of that, I feel good.

I woke up to twenty—twenty—low heart rate notifications on Friday, an obvious record for me. Last week, Apple Fitness+, my workout service of choice, released kickboxing workouts, and I spent every weekday last week going through them. Normally, my heart rate maxes out at around 150bpm during my most intense workouts (HIIT mostly), but I noticed during my kickboxing workout on Thursday that my heart rate maxed out in the 170s. During my sleep that night, I practically entered hibernation mode, and I woke up the next day feeling strong, lean, and healthy. When I weighed myself on Saturday, I dropped another pound, making that 4.5 pounds lost since the start of December. My goal then was 10 pounds, and I’m almost halfway through achieving it.

Fitness is only part of the equation. Good sleep also matters, as well as how I fuel my body. The last book I read last year was Thrive: The Plant-Based Whole Foods Way to Staying Healthy for Life by Brendan Brazier. The Thrive Diet is basically an alkaline diet, where the focus is on eating foods that are not too acidic. The first few chapters go through the science, and frankly, I didn’t give a shit about that. Brendan spent those chapters trying to sell me on his food philosophy, and it felt like a snake oil salesman trying to sell me on bullshit. But! The last half of the book was devoted on recipes, and these looked good. They were high on good, natural foods, something that jived well with my vegan diet—I diet I started on January of 2017. Over the last few weeks I’ve been slowly—oh god slowly—adding these recipes into my recipe app and acquiring as many ingredients as I could in my small town. Last week, I finally finished adding all the recipes into Mela, and I started to finally make some of these foods.

And oh my god.

The few I’ve made have been more than just good—they’ve been great. The almond flaxseed burger was orgasmic, and the chocolate blueberry energy bars helped me see in multiple dimensions. After I took my first bite of the burger, I messaged my friend and told her, “I love being vegan.” She didn’t say anything because she was busy eating meat, but oh my god, that night’s dinner is forever ingrained in my head. It was also the same night where I watched The Menu, which added an extra dimension to the viewing experience (what a great movie, by the way).

This week, I hope to keep pushing myself as hard, if not harder, during my workouts, and I hope to keep making more of these Thrive recipes. The book also has a 12-week meal plan (that I also digitized), and I’m not quiet ready to start that yet (some recipes require ingredients I can only find on Amazon so far), but it is on my radar. There are these pizza recipes I really want to try but they require buckwheat flour, and why don’t more stores carry buckwheat flour? What the hell? Anyways.

It’s been a good 2023 so far. Let’s keep going.


  • Notes

Yesterday, a little kindergartener spent the day in the main office because she was in trouble. We sat her down on a desk in the corner and kept an eye on her here and there to ensure she did her work. Occasionally we would see her poke her head out, and every time we would tell her to return to her desk and get to work.

“Can you call my mom?” she asked my friend, the secretary, during one of these moments.

“Why?” she asked her.

“Because I don’t like school anymore.”

I wanted to burst out laughing, but I kept it together until she returned to her desk, out of sight.

“Can you call my husband?” another co-worker said. “Because I don’t like work anymore.”

We had a good laugh, but eventually, we went back to work, too.

Later, the little girl left her desk again and asked my friend, “Can I go to the potty?” My friend looked at her for a moment, but before she could say anything, the little girl continued, “Because I keep farting.”

I couldn’t hold it together. I covered my face with my hands and laughed as quietly as I could. Once I saw her leave the office, I lost it. I laughed until my eyes watered.

Sometime later, the principal came out of his office to ask me to do something. “Before I do that,” I said, “can I go potty?” He looked at me funny and said,

“Yes, Mario, you can go potty.”

I smiled and said, “Because I keep farting.”

My job is the best.

Page 1 of 35