Download each and every xkcd comic uploaded! Like ever!
If you have found my little bits of software of any use to you, you can help me pay my internet bills :)
Some of my projects are also on Gratipay
- 1 Features
- 2 Demo
- 3 Usage
- 4 Installation
- 5 Contributing
- 6 Changelog
- 7 Motivation
- 8 Legal stuff
- Can download all the xkcd's uploaded till date(1603 as I am writing this!).
- Download individual xkcd's and store them
- Download ranges of xkcd's and store them
- Download the latest issue xkcd
- Download the meta text inside each xkcd and store it
- No duplicacy in your XKCD database.
- Stores each xkcd in a separate file named as the
titleof the xkcd at your home directory
- Writes a
description.txtfor each xkcd. Storing meta-data like
- url value
- a small description of that xkcd
- The alt text on the comic
- written in uncomplicated
Each Comic is stored in it's own individual folder with a
description.txt placed in it. It contains meta-data like -
Here's a little example for the same
When running for the first time, do a
$ xkcd-dl --update-db XKCD link database updated Stored it in 'xkcd_dict.json'. You can start downloading your XKCD's! Run 'xkcd-dl --help' for more options $
$ xkcd-dl --help usage: xkcd-dl [-h] [-u] [-l] [-d XKCD_NUM | -a] [-r [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]]] [-v] [-P PATH] [-s XKCD_NUM] Run `xkcd-dl --update-db` if running for the first time. optional arguments: -h, --help show this help message and exit -u, --update-db Update the database -l, --download-latest Download most recent comic -d XKCD_NUM, --download XKCD_NUM Download specified comic by number -a, --download-all Download all comics -r [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]], --download-range [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]] Download specified range -v, --version show program's version number and exit -P PATH, --path PATH set path -s XKCD_NUM, --show XKCD_NUM Show specified comic by number
This downloads the last uploaded xkcd comic and stores under the home directory of the user with a brief description
$ xkcd-dl --download-latest Downloading xkcd from 'http://imgs.xkcd.com/comics/flashlights.png' and storing it under '/home/tasdik/xkcd_archive/1603' $
If it has been downloaded, will not do anything
This command will work even if you have not run --update-db yet.
Downloads the particular
XKCDNUMBER(given that it exists and has
not been downloaded already) and stores it in the home directory
$ xkcd-dl --download=143 Downloading xkcd from 'http://xkcd.com/143/' and storing it under '/home/tasdik/xkcd_archive/143' $ xkcd-dl --download=1603 Downloading xkcd from 'http://xkcd.com/1603/' and storing it under '/home/tasdik/xkcd_archive/1603' xkcd number '1603' has already been downloaded! $
--download-range <START> <END>
Will take two number parameters and download all the xkcd's between the two, inclusive.
$ xkcd-dl --download-range 32 36 Downloading xkcd from 'http://xkcd.com/32/' and storing it under '/home/tasdik/xkcd_archive/32' Downloading xkcd from 'http://xkcd.com/33/' and storing it under '/home/tasdik/xkcd_archive/33' Downloading xkcd from 'http://xkcd.com/34/' and storing it under '/home/tasdik/xkcd_archive/34' Downloading xkcd from 'http://xkcd.com/35/' and storing it under '/home/tasdik/xkcd_archive/35' Downloading xkcd from 'http://xkcd.com/36/' and storing it under '/home/tasdik/xkcd_archive/36'
As the name suggests, will download all the xkcd's uploaded till date and store them under the home directory of the user.
$ xkcd-dl --download-all Downloading all xkcd's Till date!! Downloading xkcd from 'http://xkcd.com/1466' and storing it under '/home/tasdik/xkcd_archive/1466' Downloading xkcd from 'http://xkcd.com/381' and storing it under '/home/tasdik/xkcd_archive/381' Downloading xkcd from 'http://xkcd.com/198' and storing it under '/home/tasdik/xkcd_archive/198' Downloading xkcd from 'http://xkcd.com/512' and storing it under '/home/tasdik/xkcd_archive/512' Downloading xkcd from 'http://xkcd.com/842' and storing it under '/home/tasdik/xkcd_archive/842' Downloading xkcd from 'http://xkcd.com/920' and storing it under '/home/tasdik/xkcd_archive/920' .... ....
To use a custom directory to store your xkcd_archive, you can append --path=./any/path/here to the end of any download method. Absolute and relative paths work, but the directory must already exist.
$ xkcd-dl --download=3 --path=comic Downloading xkcd from 'http://xkcd.com/3/' and storing it under '/home/tasdik/comic/xkcd_archive/3' $ xkcd-dl --download-range 54 56 --path=/home/tasdik/xkcd Downloading xkcd from 'http://xkcd.com/54/' and storing it under '/home/tasdik/xkcd/xkcd_archive/54' Downloading xkcd from 'http://xkcd.com/55/' and storing it under '/home/tasdik/xkcd/xkcd_archive/55' Downloading xkcd from 'http://xkcd.com/56/' and storing it under '/home/tasdik/xkcd/xkcd_archive/56'
Opens the specified comic. Downloads it, if not downloaded already. Prints the alt text and metadata to stdout.
$ xkcd-dl --show 32 Downloading xkcd from 'http://xkcd.com/32/' and storing it under '/home/bk/Documents/xkcd-dl/xkcd_dl/xkcd_archive/32' title : Pillar date-publised: 2006-1-1 url: http://xkcd.com/32/ alt: A comic by my brother Doug, redrawn and rewritten by me $ xkcd-dl -s 1000 Downloading xkcd from 'http://xkcd.com/1000/' and storing it under '/home/bk/Documents/xkcd-dl/xkcd_dl/xkcd_archive/1000' xkcd number '1000' has already been downloaded! title : 1000 Comics date-publised: 2012-1-6 url: http://xkcd.com/1000/ alt: Thank you for making me feel less alone.
pip (Suggested way)4.1 Option 1: installing through
$ pip3 install xkcd-dl
If you are behind a proxy
$ pip3 --proxy [username:password@]domain_name:port install xkcd-dl
Note: If you get
command not found then
$ sudo apt-get install python3-pip should fix that
4.2 Option 2: installing from source
$ git clone https://github.com/prodicus/xkcd-dl.git $ cd xkcd-dl/ $ pip3 install -r requirements.txt $ python3 setup.py install
$ pip3 install -U xkcd-dl
$ pip3 uninstall xkcd-dl
Here is the
AUR link for you
I hacked this up in one night, so its a little messy up there. Feel free to contribute.
- Fork it.
- Create your feature branch
git checkout -b my-new-awesome-feature)
- Commit your changes (
git commit -am 'Added <xyz> feature')
- Push to the branch (
git push origin my-new-awesome-feature)
- Create new Pull Request
Big shout out to
- Ian C for fixing issue #2 which stopped the download if a title of a comic had a special character in it and BlitzKraft for pointing it out.
- BlitzKraft for adding the feature to download the alt-text from the the xkcd and major clean ups!
- Braden Best for pointing out the issues when installing from source apart from his valuable input.
- [x] add
- [x] add
- [x] add
- [x] add
xkcd-dl download-range <START> <END>
- [x] add path setting with
- [x] add exclude list to easily recognize and ignore dynamic comics i.e. comics without a default image.
- [x] Remove redundant code in
- [x] Adding support to open a particular xkcd at the CLI itself. Implemented using xdg-open. Opens using your default image viewer.
5.3 Known Issues
- There have been issues when installed from source if you are using
python 2.*as discussed in #5. So using
- If you get
command not foundwhen installing, it may mean that you don't have
$ sudo apt-get install python3-pipshould fix that. To check your version of pip
- Dynamic comics have to be added manually using the excludeList
$ pip3 --version pip 1.5.6 from /usr/lib/python3/dist-packages (python 3.4) $
Please report the bugs at the issue tracker
You can tweet me at @tasdikrahman if you can't get it to work. In fact, you should tweet me anyway.
- bug: fixed relative import error in setup.py added support for gif files when renaming downloaded image (#38)
How about you get to download all of the xkcd which have been uploaded till date? This does just that!
Now I don't know about you, but I just love reading
xkcd's! Had a boring Sunday night looming over, thought why not create something like
youtube-dl but for downloading
And hence xkcd-dl
Cheers to a crazy night!
8 Legal stuff
You can find a copy of the License at http://prodicus.mit-license.org/