dosage - a comic strip downloader and archiver
is an application designed to keep a local mirror of specific web
comics and other picture-based content, such as Picture Of The Day
sites, with a variety of options for updating and maintaining collections.
- -b PATH, --basepath=PATH
- Specifies a base path to put comic subdirectories. The
default is Comics.
- Specifies the base URL for output handlers. The default is
a local file URI.
- -a, --all
- Traverses all available strips backwards from the current
one. This can be useful you want a full collection of a new comic strip,
or update an existing one where files are missing. Catchups can start at a
specific strip by using the index syntax, see the INDEX SYNTAX and
SPECIAL SYNTAX sections for more information. This is useful when
you missed some days and want only to download the missing files.
- -c, --continue
- Same as --all, but stop at the first existing image
file. Useful for cron jobs that are not executed every day.
- -h, --help
- Output brief help information.
- -l, --list
- List available comic modules in multi-column fashion.
- List available comic modules in single-column fashion.
- -m MODULE,
- Output module-specific help for MODULE.
- -o OUTPUT, --output=OUTPUT
- OUTPUT may be any one of the following:
html - Writes out an HTML file linking
to the strips actually downloaded in the current run, named by date (ala
dailystrips). The files can be found in the html directory of your
rss - Writes out an RSS feed detailing
what strips were downloaded in the last 24 hours. The feed can be found in
json - Write a JSON file with all
download infos (URLs, images). Can be used with other scripts, eg.
order-symlinks.py to add symbolic links.
This option can be given multiple times.
- -t, --timestamps
- Print timestamps for all output at any level.
- -v, --verbose
- Increase the output level by one with each occurence.
- -V, --version
- Display the version number.
- Vote for the selected comics to tell others that you like
them. The sum of all votes for a comic will be displayed at the comic
index pages at http://wummel.github.io/dosage/comic-index.html
module At least one valid module must be specified. A list
of valid modules can be found by passing the -l option. Multiple
module arguments can be specified on the command line. Module names
are case insensitive, and it is sufficient to specify a unique substring
of the module name.
Instead of starting at the latest comic strip, an index lets dosage start at a
certain strip. The index can be specified by appending a colon :
the index name after the module. Multiple comma-spearated indices can also be
The index name itself usually is the part of the comic strip URL that
identifiess a strip, eg. a number or a date. The expected format is documented
when using the --modulehelp
- This expands to mean all the comics currently in your
Comics directory. All other specified comic module names will be
- This expands to mean all the comics available to
can not be used with SPECIAL SYNTAX
Retrieve all Mega Tokyo comics:
dosage -a megatokyo
Retrieve the current comic of Cyanide and Happiness:
Retrieve the current strip of all comics in your Comics
Vote for the comics in your Comics
dosage --vote @
Retrieve the current strip of every comic that there is a module for:
Retrieve the Penny Arcade strip for a given index:
Retrieve Calvin and Hobbes strips from a given index going backwards to the
- dosage will use the specified HTTP proxy when
downloading URL contents.
Should retrieval fail on any given strip dosage
will attempt to retry.
However the retry information is only outputted in the second
successive output levels.
At the time of writing, a complete
Dosage collection weighs in at around
The return value greater than zero when
- a program error occurred.
- comics could not be found or downloaded
- the program run was aborted with Ctrl-C
Else the return value is zero.
Users can report or view bugs, patches or feature suggestions at
Jonathan Jacobs, Tristan Seligmann, Bastian Kleineidam
Copyright © 2004-2005 Tristan Seligmann and Jonathan Jacobs
Copyright © 2012-2014 Bastian Kleineidam