Redrum - Reddit Wallpaper Downloader and Ranker ==============================================
Redrum is a Reddit wallpaper downloader which scores wallpapers and selects the best based on resolution, aspect ratio, and number of views. It remembers which wallpapers were selected previously so you never see the same image twice.
Install the systemd units to run the script every two hours.
Install through pip
pip3 install redrum
(optional) Install service for automatic wallpaper changing
# copy service files cp -u systemd/* ~/.config/systemd/user/ # enable and start systemd timer systemctl --user enable redrum.timer systemctl --user start redrum.timer # the service can be triggered manually as well systemctl --user start redrum
note: If using a python3 virtualenv, change
ExecStart
inredrum.service
to/path/to/venv/bin/redrum
Redrum creates a config at ~/.config/redrum.ini
automatically. You should update this file with your screen resolution and preferred subreddits before executing.
>>> redrum No previous score cache found at /home/evan/.cache/redrum_cache.json. Indexing page #0 from subreddit winterporn Indexing page #1 from subreddit winterporn Indexing page #2 from subreddit winterporn ... Selected http://i.imgur.com/3UWbcYG.jpg (EarthPorn) with score 5.21729920261845e-05 out of 5971 images The probability of selecting this image was 0.009851421028579594 Applying wallpaper
Images are scored in three steps as follows:
-
Three input scores are calculated for each image in the cache
pixelscore = [totalimagepixels]/[totalscreenpixels]
ratioscore = [imagex − yratio]/[screenx − yratio]or[screenx − yratio]/[imagex − yratio](whicheverislessthan1)$$views_score = [# views of this image] / [highest # views of all images]$$ -
Each input score is run through a sigmoid function, in this case, the logistic function. This helps to provide stronger differentiation between a good and a bad image than could be afforded with a linear method. The logistic function is defined by its
Logistic function withmidpoint
and the slope at the midpoint,k
.midpoint=0
,k=1
In redrum the logistic function has been normalized such that f(0) = 1.
ratiologisticscore = (1 + pow(math.e, − ratiok * (1 − ratiooff)))/(1 + pow(math.e, − ratiok * (ratioscore − ratiocutoff)))viewslogisticscore = (1 + pow(math.e, − ratiok * (1 − ratiooff)))/(1 + pow(math.e, − viewsk * (viewsscore − viewscutoff)))pixellogisticscore = (1 + pow(math.e, − ratiok * (1 − ratiooff)))/(1 + pow(math.e, − pixelk * (pixelscore − pixelcutoff)))pixel_score
,ratio_score
, andviews_score
each have their ownmidpoint
andk
, which can be set in~/.config/redrum.ini
- The three logistic scores are then multiplied to calculate an image's
final_score
. This score is used to do a random weighted select of all images in the cache. An image with afinal_score
that is twice the score of another image is twice as likely to be selected during the random selection.
You can adjust the scoring algorithm if you aren't satisfied with the images being selected. redrum_tune
allows you to quickly adjust the midpoint
and k
of the logarithmic function and view its effects on the final_score
. You need to run pip install redrum[tune]
to install the extra dependencies (matplotlib, numpy).