Wallpapers From Reddit

Update: 2023-12-19: I've since written grabbit to download my reddit images. It's much easier to install than reddit_get_top_images

A while back, I found a nice script to download wallpapers from Reddit. It originally only downloaded wallpapers from one subreddit at a time, so I made a fork to handle multiple subreddits and use a JSON configuration file (the multiple subreddits feature has since been merged into master).

To use it, get a list of subreddits you want to download, and use the -wc FILENAME argument to print them to a file (or don't specify it and simply download the images).

My current config file looks like this:

{
    "destination": "~\\Pictures\\reddit_pics",
    "limit": 15,
    "period": "w",
    "separate_dirs": false,
    "subreddit": [
        "earthporn",
        "cityporn",
        "villageporn",
        "architectureporn",
        "abandonedporn",
        "churchporn",
        "roomporn",
        "bookporn",
        "futureporn",
        "imaginarycastles",
        "imaginaryinteriors"
    ]
}

Then, run the script again with your new config file (the -c FILENAME option) to download the wallpapers!

So far, we have saved wallpapers from Reddit to a folder. What we need to do next will be determined by what operating system we're using.

If you're on Windows 7, I highly recommend DisplayFusion, sold through their website or through Steam. This app can configure wallpapers for mulitple monitors and rotate them after a specified time.

If you're on Mac, you can set up your wallpaper in System Preferences -> Desktop and Screen Saver. Here you can also set up wallpapers to change after a specified time.

On Linux, I use feh to manage my wallpapers on i3wm. My config for it is right here.

I even wrote a small script to just launch the wallpaper getter from a shortcut on my desktop:

import subprocess
import sys
import os

config_path = os.path.join(sys.path[0], 'config.json')
get_top_images_path = os.path.join(sys.path[0], 'get_top_images.py')
if os.path.exists(config_path) and os.path.exists(get_top_images_path):
    subprocess.run(['python', get_top_images_path, '-c', config_path])
else:
    print('Put the right files in %r' % sys.path[0], file=sys.stderr)

In regards to the code: I orginally created a class that contained an argparse.ArgumentParser. After some consideration, and the realization that I will probably want to re-use the functionality, I rewrote it to consume the parser as an argument- this separates the parser functionality from the serialization functionality.