summaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2019-11-10 22:14:10 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2019-11-10 22:14:10 -0500
commit0c73e982fa596da07f23b377621ab894a9e64884 (patch)
tree96f6a40a5656c15a2ec7217a8a1efcff5827bcbb /data
parent40f5fe6edef268632d3bc484e85e5b37bad67bff (diff)
New upstream version 1.11.1upstream/1.11.1
Diffstat (limited to 'data')
-rw-r--r--data/completion/gallery-dl17
-rw-r--r--data/man/gallery-dl.1195
-rw-r--r--data/man/gallery-dl.conf.52129
3 files changed, 2341 insertions, 0 deletions
diff --git a/data/completion/gallery-dl b/data/completion/gallery-dl
new file mode 100644
index 0000000..415bf5c
--- /dev/null
+++ b/data/completion/gallery-dl
@@ -0,0 +1,17 @@
+_gallery_dl()
+{
+ local cur prev
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ if [[ "${prev}" =~ ^(-i|--input-file|--cookies|--write-log|--write-unsupported|-c|--config|--config-yaml|--download-archive)$ ]]; then
+ COMPREPLY=( $(compgen -f -- "${cur}") )
+ elif [[ "${prev}" =~ ^(-d|--dest)$ ]]; then
+ COMPREPLY=( $(compgen -d -- "${cur}") )
+ else
+ COMPREPLY=( $(compgen -W "--help --version --dest --input-file --cookies --proxy --clear-cache --quiet --verbose --get-urls --dump-json --simulate --list-keywords --list-modules --list-extractors --write-log --write-unsupported --limit-rate --retries --abort --http-timeout --sleep --no-part --no-mtime --no-download --no-check-certificate --abort-on-skip --config --config-yaml --option --ignore-config --username --password --netrc --download-archive --range --chapter-range --filter --chapter-filter --zip --exec --ugoira-conv --ugoira-conv-lossless --write-metadata --write-tags --mtime-from-date" -- "${cur}") )
+ fi
+}
+
+complete -F _gallery_dl gallery-dl
diff --git a/data/man/gallery-dl.1 b/data/man/gallery-dl.1
new file mode 100644
index 0000000..a775e76
--- /dev/null
+++ b/data/man/gallery-dl.1
@@ -0,0 +1,195 @@
+.TH "GALLERY-DL" "1" "2019-11-09" "1.11.1" "gallery-dl Manual"
+.\" disable hyphenation
+.nh
+
+.SH NAME
+gallery-dl \- download image-galleries and -collections
+
+.SH SYNOPSIS
+.B gallery-dl
+[OPTION]... URL...
+
+.SH DESCRIPTION
+.B gallery-dl
+is a command-line program to download image-galleries and -collections
+from several image hosting sites. It is a cross-platform tool
+with many configuration options and powerful filenaming capabilities.
+
+.SH OPTIONS
+.TP
+.B "\-h, \-\-help"
+Print this help message and exit
+.TP
+.B "\-\-version"
+Print program version and exit
+.TP
+.B "\-d, \-\-dest" \f[I]DEST\f[]
+Destination directory
+.TP
+.B "\-i, \-\-input\-file" \f[I]FILE\f[]
+Download URLs found in FILE ('-' for stdin)
+.TP
+.B "\-\-cookies" \f[I]FILE\f[]
+File to load additional cookies from
+.TP
+.B "\-\-proxy" \f[I]URL\f[]
+Use the specified proxy
+.TP
+.B "\-\-clear\-cache"
+Delete all cached login sessions, cookies, etc.
+.TP
+.B "\-q, \-\-quiet"
+Activate quiet mode
+.TP
+.B "\-v, \-\-verbose"
+Print various debugging information
+.TP
+.B "\-g, \-\-get\-urls"
+Print URLs instead of downloading
+.TP
+.B "\-j, \-\-dump\-json"
+Print JSON information
+.TP
+.B "\-s, \-\-simulate"
+Simulate data extraction; do not download anything
+.TP
+.B "\-K, \-\-list\-keywords"
+Print a list of available keywords and example values for the given URLs
+.TP
+.B "\-\-list\-modules"
+Print a list of available extractor modules
+.TP
+.B "\-\-list\-extractors"
+Print a list of extractor classes with description, (sub)category and example URL
+.TP
+.B "\-\-write\-log" \f[I]FILE\f[]
+Write logging output to FILE
+.TP
+.B "\-\-write\-unsupported" \f[I]FILE\f[]
+Write URLs, which get emitted by other extractors but cannot be handled, to FILE
+.TP
+.B "\-r, \-\-limit\-rate" \f[I]RATE\f[]
+Maximum download rate (e.g. 500k or 2.5M)
+.TP
+.B "\-R, \-\-retries" \f[I]N\f[]
+Maximum number of retries for failed HTTP requests or -1 for infinite retries (default: 4)
+.TP
+.B "\-A, \-\-abort" \f[I]N\f[]
+Abort extractor run after N consecutive file downloads have been skipped, e.g. if files with the same filename already exist
+.TP
+.B "\-\-http\-timeout" \f[I]SECONDS\f[]
+Timeout for HTTP connections (defaut: 30.0)
+.TP
+.B "\-\-sleep" \f[I]SECONDS\f[]
+Number of seconds to sleep before each download
+.TP
+.B "\-\-no\-part"
+Do not use .part files
+.TP
+.B "\-\-no\-mtime"
+Do not set file modification times according to Last-Modified HTTP response headers
+.TP
+.B "\-\-no\-download"
+Do not download any files
+.TP
+.B "\-\-no\-check\-certificate"
+Disable HTTPS certificate validation
+.TP
+.B "\-c, \-\-config" \f[I]FILE\f[]
+Additional configuration files
+.TP
+.B "\-o, \-\-option" \f[I]OPT\f[]
+Additional '<key>=<value>' option values
+.TP
+.B "\-\-ignore\-config"
+Do not read the default configuration files
+.TP
+.B "\-u, \-\-username" \f[I]USER\f[]
+Username to login with
+.TP
+.B "\-p, \-\-password" \f[I]PASS\f[]
+Password belonging to the given username
+.TP
+.B "\-\-netrc"
+Enable .netrc authentication data
+.TP
+.B "\-\-download\-archive" \f[I]FILE\f[]
+Record all downloaded files in the archive file and skip downloading any file already in it.
+.TP
+.B "\-\-range" \f[I]RANGE\f[]
+Index-range(s) specifying which images to download. For example '5-10' or '1,3-5,10-'
+.TP
+.B "\-\-chapter\-range" \f[I]RANGE\f[]
+Like '--range', but applies to manga-chapters and other delegated URLs
+.TP
+.B "\-\-filter" \f[I]EXPR\f[]
+Python expression controlling which images to download. Files for which the expression evaluates to False are ignored. Available keys are the filename-specific ones listed by '-K'. Example: --filter "image_width >= 1000 and rating in ('s', 'q')"
+.TP
+.B "\-\-chapter\-filter" \f[I]EXPR\f[]
+Like '--filter', but applies to manga-chapters and other delegated URLs
+.TP
+.B "\-\-zip"
+Store downloaded files in a ZIP archive
+.TP
+.B "\-\-exec" \f[I]CMD\f[]
+Execute CMD for each downloaded file. Example: --exec 'magick convert {} {}.png && rm {}'
+.TP
+.B "\-\-ugoira\-conv"
+Convert Pixiv Ugoira to WebM (requires FFmpeg)
+.TP
+.B "\-\-ugoira\-conv\-lossless"
+Convert Pixiv Ugoira to WebM in VP9 lossless mode
+.TP
+.B "\-\-write\-metadata"
+Write metadata to separate JSON files
+.TP
+.B "\-\-write\-tags"
+Write image tags to separate text files
+.TP
+.B "\-\-mtime\-from\-date"
+Set file modification times according to 'date' metadata
+
+.SH EXAMPLES
+.TP
+gallery-dl \f[I]URL\f[]
+Download images from \f[I]URL\f[].
+.TP
+gallery-dl -g -u <username> -p <password> \f[I]URL\f[]
+Print direct URLs from a site that requires authentication.
+.TP
+gallery-dl --filter 'type == "ugoira"' --range '2-4' \f[I]URL\f[]
+Apply filter and range expressions. This will only download
+the second, third, and fourth file where its type value is equal to "ugoira".
+.TP
+gallery-dl r:\f[I]URL\f[]
+Scan \f[I]URL\f[] for other URLs and invoke \f[B]gallery-dl\f[] on them.
+.TP
+gallery-dl oauth:\f[I]SITE\-NAME\f[]
+Gain OAuth authentication tokens for
+.IR deviantart ,
+.IR flickr ,
+.IR reddit ,
+.IR smugmug ", and"
+.IR tumblr .
+
+.SH FILES
+.TP
+.I /etc/gallery-dl.conf
+The system wide configuration file.
+.TP
+.I ~/.config/gallery-dl/config.json
+Per user configuration file.
+.TP
+.I ~/.gallery-dl.conf
+Alternate per user configuration file.
+
+.SH BUGS
+https://github.com/mikf/gallery-dl/issues
+
+.SH AUTHORS
+Mike Fährmann <mike_faehrmann@web.de>
+.br
+and https://github.com/mikf/gallery-dl/graphs/contributors
+
+.SH "SEE ALSO"
+.BR gallery-dl.conf (5)
diff --git a/data/man/gallery-dl.conf.5 b/data/man/gallery-dl.conf.5
new file mode 100644
index 0000000..8902f51
--- /dev/null
+++ b/data/man/gallery-dl.conf.5
@@ -0,0 +1,2129 @@
+.TH "GALLERY-DL.CONF" "5" "2019-11-09" "1.11.1" "gallery-dl Manual"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+
+.SH NAME
+gallery-dl.conf \- gallery-dl configuration file
+
+.SH DESCRIPTION
+gallery-dl will search for configuration files in the following places
+every time it is started, unless
+.B --ignore-config
+is specified:
+.PP
+.RS 4
+.nf
+.I /etc/gallery-dl.conf
+.I $HOME/.config/gallery-dl/config.json
+.I $HOME/.gallery-dl.conf
+.fi
+.RE
+.PP
+It is also possible to specify additional configuration files with the
+.B -c/--config
+command-line option or to add further option values with
+.B -o/--option
+as <key>=<value> pairs,
+
+Configuration files are JSON-based and therefore don't allow any ordinary
+comments, but, since unused keys are simply ignored, it is possible to utilize
+those as makeshift comments by settings their values to arbitrary strings.
+
+.SH EXAMPLE
+{
+.RS 4
+"base-directory": "/tmp/",
+.br
+"extractor": {
+.RS 4
+"pixiv": {
+.RS 4
+"directory": ["Pixiv", "Works", "{user[id]}"],
+.br
+"filename": "{id}{num}.{extension}",
+.br
+"username": "foo",
+.br
+"password": "bar"
+.RE
+},
+.br
+"flickr": {
+.RS 4
+"_comment": "OAuth keys for account 'foobar'",
+.br
+"access-token": "0123456789-0123456789abcdef",
+.br
+"access-token-secret": "fedcba9876543210"
+.RE
+}
+.RE
+},
+.br
+"downloader": {
+.RS 4
+"retries": 3,
+.br
+"timeout": 2.5
+.RE
+}
+.RE
+}
+
+.SH EXTRACTOR OPTIONS
+.SS extractor.*.filename
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"{manga}_c{chapter}_{page:>03}.{extension}"
+
+.IP "Description:" 4
+A \f[I]format string\f[] to build the resulting filename
+for a downloaded file.
+
+The available replacement keys depend on the extractor used. A list
+of keys for a specific one can be acquired by calling *gallery-dl*
+with the \f[I]-K\f[]/\f[I]--list-keywords\f[] command-line option.
+For example:
+
+.. code::
+
+$ gallery-dl -K http://seiga.nicovideo.jp/seiga/im5977527
+Keywords for directory names:
+
+category
+seiga
+subcategory
+image
+
+Keywords for filenames:
+
+category
+seiga
+extension
+None
+image-id
+5977527
+subcategory
+image
+
+Note: Even if the value of the \f[I]extension\f[] key is missing or
+\f[I]None\f[], it will filled in later when the file download is
+starting. This key is therefore always available to provide
+a valid filename extension.
+
+.SS extractor.*.directory
+.IP "Type:" 6
+\f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Example:" 4
+["{category}", "{manga}", "c{chapter} - {title}"]
+
+.IP "Description:" 4
+A list of \f[I]format strings\f[] for the resulting target directory.
+
+Each individual string in such a list represents a single path
+segment, which will be joined together and appended to the
+\f[I]base-directory\f[] to form the complete target directory path.
+
+.SS extractor.*.base-directory
+.IP "Type:" 6
+\f[I]Path\f[]
+
+.IP "Default:" 9
+\f[I]"./gallery-dl/"\f[]
+
+.IP "Description:" 4
+Directory path used as the base for all download destinations.
+
+.SS extractor.*.path-restrict
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"auto"\f[]
+
+.IP "Example:" 4
+"/!? (){}"
+
+.IP "Description:" 4
+Set of characters to replace with underscores (\f[I]_\f[])
+in generated path segment names.
+
+Special values:
+
+
+* \f[I]"auto"\f[]: Use characters from \f[I]"unix"\f[] or \f[I]"windows"\f[]
+depending on the local operating system
+
+* \f[I]"unix"\f[]: \f[I]"/"\f[]
+
+* \f[I]"windows"\f[]: \f[I]"\\\\\\\\|/<>:\\"?*"\f[]
+
+Note: In a set with 2 or more characters, \f[I][]^-\\\f[] need to be
+escaped with backslashes, e.g. \f[I]"\\\\[\\\\]"\f[]
+
+.SS extractor.*.path-remove
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"\\\\u0000-\\\\u001f\\\\u007f"\f[] (ASCII control characters)
+
+.IP "Description:" 4
+Set of characters to remove from generated path names.
+
+Note: In a set with 2 or more characters, \f[I][]^-\\\f[] need to be
+escaped with backslashes, e.g. \f[I]"\\\\[\\\\]"\f[]
+
+.SS extractor.*.skip
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls the behavior when downloading files that have been
+downloaded before, i.e. a file with the same filename already
+exists or its ID is in a \f[I]download archive\f[].
+
+__ \f[I]extractor.*.archive\f[]
+
+
+* \f[I]true\f[]: Skip downloads
+
+* \f[I]false\f[]: Overwrite already existing files
+
+
+* \f[I]"abort"\f[]: Abort the current extractor run
+
+* \f[I]"abort:N"\f[]: Skip downloads and abort extractor run
+after \f[I]N\f[] consecutive skips
+
+
+* \f[I]"exit"\f[]: Exit the program altogether
+
+* \f[I]"exit:N"\f[]: Skip downloads and exit the program
+after \f[I]N\f[] consecutive skips
+
+
+* \f[I]"enumerate"\f[]: Append a numeric suffix to the end of the
+original filename (\f[I]file.ext.1\f[], \f[I]file.ext.2\f[], etc)
+
+.SS extractor.*.sleep
+.IP "Type:" 6
+\f[I]float\f[]
+
+.IP "Default:" 9
+\f[I]0\f[]
+
+.IP "Description:" 4
+Number of seconds to sleep before each download.
+
+.SS extractor.*.username & .password
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+The username and password to use when attempting to log in to
+another site.
+
+Specifying username and password is required for the
+\f[I]pixiv\f[], \f[I]nijie\f[], and \f[I]seiga\f[]
+modules and optional (but strongly recommended) for
+\f[I]danbooru\f[], \f[I]exhentai\f[], \f[I]idolcomplex\f[], \f[I]instagram\f[],
+\f[I]luscious\f[], \f[I]sankaku\f[], \f[I]tsumino\f[], and \f[I]twitter\f[].
+
+These values can also be set via the \f[I]-u/--username\f[] and
+\f[I]-p/--password\f[] command-line options or by using a \f[I].netrc\f[] file.
+(see Authentication_)
+
+Note: The password for \f[I]danbooru\f[] is the API key found in your
+user profile, not the password for your account.
+
+.SS extractor.*.netrc
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Enable the use of \f[I].netrc\f[] authentication data.
+
+.SS extractor.*.cookies
+.IP "Type:" 6
+\f[I]Path\f[] or \f[I]object\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+Source to read additional cookies from.
+
+
+* If this is a \f[I]Path\f[], it specifies a
+Mozilla/Netscape format cookies.txt file.
+
+* If this is an \f[I]object\f[], its key-value pairs, which should both
+be \f[I]strings\f[], will be used as cookie-names and -values.
+
+.SS extractor.*.cookies-update
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+If \f[I]extractor.*.cookies\f[] specifies a cookies.txt file, update its
+contents with cookies received during data extraction.
+
+.SS extractor.*.proxy
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]object\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+Proxy (or proxies) to be used for remote connections.
+
+
+* If this is a \f[I]string\f[], it is the proxy URL for all
+outgoing requests.
+
+* If this is an \f[I]object\f[], it is a scheme-to-proxy mapping to
+specify different proxy URLs for each scheme.
+It is also possible to set a proxy for a specific host by using
+\f[I]scheme://host\f[] as key.
+See \f[I]Requests' proxy documentation\f[] for more details.
+
+Example:
+
+.. code::
+
+{
+"http": "http://10.10.1.10:3128",
+"https": "http://10.10.1.10:1080",
+"http://10.20.1.128": "http://10.10.1.10:5323"
+}
+
+Note: All proxy URLs should include a scheme,
+otherwise \f[I]http://\f[] is assumed.
+
+.SS extractor.*.user-agent
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"\f[]
+
+.IP "Description:" 4
+User-Agent header value to be used for HTTP requests.
+
+Note: This option has no effect on pixiv and
+readcomiconline extractors, as these need specific values to
+function correctly.
+
+.SS extractor.*.keywords
+.IP "Type:" 6
+\f[I]object\f[]
+
+.IP "Example:" 4
+{"type": "Pixel Art", "type_id": 123}
+
+.IP "Description:" 4
+Additional key-value pairs to be added to each metadata dictionary.
+
+.SS extractor.*.keywords-default
+.IP "Type:" 6
+any
+
+.IP "Default:" 9
+\f[I]"None"\f[]
+
+.IP "Description:" 4
+Default value used for missing or undefined keyword names in
+format strings.
+
+.SS extractor.*.category-transfer
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+Extractor-specific
+
+.IP "Description:" 4
+Transfer an extractor's (sub)category values to all child
+extractors spawned by it, to let them inherit their parent's
+config options.
+
+.SS extractor.*.archive
+.IP "Type:" 6
+\f[I]Path\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+File to store IDs of downloaded files in. Downloads of files
+already recorded in this archive file will be skipped_.
+
+The resulting archive file is not a plain text file but an SQLite3
+database, as either lookup operations are significantly faster or
+memory requirements are significantly lower when the
+amount of stored IDs gets reasonably large.
+
+.SS extractor.*.archive-format
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"{id}_{offset}"
+
+.IP "Description:" 4
+An alternative \f[I]format string\f[] to build archive IDs with.
+
+.SS extractor.*.postprocessors
+.IP "Type:" 6
+\f[I]list\f[] of \f[I]Postprocessor Configuration\f[] objects
+
+.IP "Example:" 4
+.. code::
+
+[
+{"name": "zip", "compression": "zip"},
+{"name": "exec", "command": ["/home/foobar/script", "{category}", "{image_id}"]}
+]
+
+
+.IP "Description:" 4
+A list of post-processors to be applied to each downloaded file
+in the same order as they are specified.
+
+.SS extractor.*.retries
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]4\f[]
+
+.IP "Description:" 4
+Maximum number of times a failed HTTP request is retried before
+giving up or \f[I]-1\f[] for infinite retries.
+
+.SS extractor.*.timeout
+.IP "Type:" 6
+\f[I]float\f[] or \f[I]null\f[]
+
+.IP "Default:" 9
+\f[I]30\f[]
+
+.IP "Description:" 4
+Amount of time (in seconds) to wait for a successful connection
+and response from a remote server.
+
+This value gets internally used as the \f[I]timeout\f[] parameter for the
+\f[I]requests.request()\f[] method.
+
+.SS extractor.*.verify
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls whether to verify SSL/TLS certificates for HTTPS requests.
+
+If this is a \f[I]string\f[], it must be the path to a CA bundle to use
+instead of the default certificates.
+
+This value gets internally used as the \f[I]verify\f[] parameter for the
+\f[I]requests.request()\f[] method.
+
+.SS extractor.*.download
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls whether to download media files.
+
+Setting this to \f[I]false\f[] won't download any files, but all other
+functions (postprocessors_, \f[I]download archive\f[], etc.)
+will be executed as normal.
+
+.SS extractor.*.image-range
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"10-20",
+.br
+"-5, 10, 30-50, 100-"
+.br
+
+.IP "Description:" 4
+Index-range(s) specifying which images to download.
+
+Note: The index of the first image is \f[I]1\f[].
+
+.SS extractor.*.chapter-range
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Description:" 4
+Like \f[I]image-range\f[], but applies to delegated URLs
+like manga-chapters, etc.
+
+.SS extractor.*.image-filter
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"width >= 1200 and width/height > 1.2",
+.br
+"re.search(r'foo(bar)+', description)"
+.br
+
+.IP "Description:" 4
+Python expression controlling which images to download.
+.br
+Files for which the expression evaluates to \f[I]False\f[]
+.br
+are ignored.
+Available keys are the filename-specific ones listed
+.br
+by \f[I]-K\f[] or \f[I]-j\f[].
+
+.SS extractor.*.chapter-filter
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Description:" 4
+Like \f[I]image-filter\f[], but applies to delegated URLs
+like manga-chapters, etc.
+
+.SS extractor.*.image-unique
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Ignore image URLs that have been encountered before during the
+current extractor run.
+
+.SS extractor.*.chapter-unique
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Like \f[I]image-unique\f[], but applies to delegated URLs
+like manga-chapters, etc.
+
+.SS extractor.*.date-format
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"%Y-%m-%dT%H:%M:%S"\f[]
+
+.IP "Description:" 4
+Format string used to parse \f[I]string\f[] values of
+date-min and date-max.
+
+See \f[I]strptime\f[] for a list of formatting directives.
+
+.SH EXTRACTOR-SPECIFIC OPTIONS
+.SS extractor.artstation.external
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Try to follow external URLs of embedded players.
+
+.SS extractor.danbooru.ugoira
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls the download target for Ugoira posts.
+
+
+* \f[I]true\f[]: Original ZIP archives
+
+* \f[I]false\f[]: Converted video files
+
+.SS extractor.deviantart.extra
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Download extra Sta.sh resources from description texts.
+
+Note: Enabling this option also enables deviantart.metadata_.
+
+.SS extractor.deviantart.flat
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Select the directory structure created by the Gallery- and
+Favorite-Extractors.
+
+
+* \f[I]true\f[]: Use a flat directory structure.
+
+* \f[I]false\f[]: Collect a list of all gallery-folders or
+favorites-collections and transfer any further work to other
+extractors (\f[I]folder\f[] or \f[I]collection\f[]), which will then
+create individual subdirectories for each of them.
+
+.SS extractor.deviantart.folders
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Provide a \f[I]folders\f[] metadata field that contains the names of all
+folders a deviation is present in.
+
+Note: Gathering this information requires a lot of API calls.
+Use with caution.
+
+.SS extractor.deviantart.include
+.IP "Type:" 6
+\f[I]list\f[] of \f[I]strings\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]["gallery"]\f[]
+
+.IP "Description:" 4
+Selects the subcategories to include when processing a user profile.
+
+Possible values are \f[I]"gallery"\f[], \f[I]"scraps"\f[], \f[I]"journal"\f[],
+\f[I]"favorite"\f[].
+
+It is also possible to use a string with the initial character of
+each subcategory, i.e. \f[I]"gsj"\f[] for
+\f[I]["gallery", "scraps", "journal"]\f[]
+
+.SS extractor.deviantart.journals
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"html"\f[]
+
+.IP "Description:" 4
+Selects the output format of journal entries.
+
+
+* \f[I]"html"\f[]: HTML with (roughly) the same layout as on DeviantArt.
+
+* \f[I]"text"\f[]: Plain text with image references and HTML tags removed.
+
+* \f[I]"none"\f[]: Don't download journals.
+
+.SS extractor.deviantart.mature
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Enable mature content.
+
+This option simply sets the \f[I]mature_content\f[] parameter for API
+calls to either \f[I]"true"\f[] or \f[I]"false"\f[] and does not do any other
+form of content filtering.
+
+.SS extractor.deviantart.metadata
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Request extended metadata for deviation objects to additionally
+provide \f[I]description\f[], \f[I]tags\f[], \f[I]license\f[] and \f[I]is_watching\f[]
+fields.
+
+.SS extractor.deviantart.original
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Download original files if available.
+
+Setting this option to \f[I]"images"\f[] only downloads original
+files if they are images and falls back to preview versions for
+everything else (archives, etc.).
+
+.SS extractor.deviantart.quality
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]100\f[]
+
+.IP "Description:" 4
+JPEG quality level of newer images for which
+an original file download is not available.
+
+.SS extractor.deviantart.refresh-token
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+The \f[I]refresh-token\f[] value you get from
+\f[I]linking your DeviantArt account to gallery-dl <OAuth_>\f[].
+
+Using a \f[I]refresh-token\f[] allows you to access private or otherwise
+not publicly available deviations.
+
+Note: Authenticating with a \f[I]refresh-token\f[] requires persistent
+storage in a \f[I]cache file <cache.file_>\f[].
+Otherwise the token will become invalid after its first use.
+
+.SS extractor.deviantart.wait-min
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]0\f[]
+
+.IP "Description:" 4
+Minimum wait time in seconds before API requests.
+
+Note: This value will internally be rounded up
+to the next power of 2.
+
+.SS extractor.exhentai.limits
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Check image download limits
+and stop extraction when they are exceeded.
+
+.SS extractor.exhentai.original
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Download full-sized original images if available.
+
+.SS extractor.exhentai.wait-min & .wait-max
+.IP "Type:" 6
+\f[I]float\f[]
+
+.IP "Default:" 9
+\f[I]3.0\f[] and \f[I]6.0\f[]
+
+.IP "Description:" 4
+Minimum and maximum wait time in seconds between each image
+
+ExHentai detects and blocks automated downloaders.
+*gallery-dl* waits a randomly selected number of
+seconds between \f[I]wait-min\f[] and \f[I]wait-max\f[] after
+each image to prevent getting blocked.
+
+.SS extractor.flickr.access-token & .access-token-secret
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+The \f[I]access_token\f[] and \f[I]access_token_secret\f[] values you get
+from \f[I]linking your Flickr account to gallery-dl <OAuth_>\f[].
+
+.SS extractor.flickr.videos
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Extract and download videos.
+
+.SS extractor.flickr.size-max
+.IP "Type:" 6
+\f[I]integer\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+Sets the maximum allowed size for downloaded images.
+
+
+* If this is an \f[I]integer\f[], it specifies the maximum image dimension
+(width and height) in pixels.
+
+* If this is a \f[I]string\f[], it should be one of Flickr's format specifiers
+(\f[I]"Original"\f[], \f[I]"Large"\f[], ... or \f[I]"o"\f[], \f[I]"k"\f[], \f[I]"h"\f[],
+\f[I]"l"\f[], ...) to use as an upper limit.
+
+.SS extractor.gelbooru.api
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Enable use of Gelbooru's API.
+
+Set this value to false if the API has been disabled to switch
+to manual information extraction.
+
+.SS extractor.gfycat.format
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"mp4"\f[]
+
+.IP "Description:" 4
+The name of the preferred animation format, which can be one of
+\f[I]"mp4"\f[], \f[I]"webm"\f[], \f[I]"gif"\f[], \f[I]"webp"\f[] or \f[I]"mjpg"\f[].
+
+If the selected format is not available, \f[I]"mp4"\f[], \f[I]"webm"\f[]
+and \f[I]"gif"\f[] (in that order) will be tried instead, until an
+available format is found.
+
+.SS extractor.imgur.mp4
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls whether to choose the GIF or MP4 version of an animation.
+
+
+* \f[I]true\f[]: Follow Imgur's advice and choose MP4 if the
+\f[I]prefer_video\f[] flag in an image's metadata is set.
+
+* \f[I]false\f[]: Always choose GIF.
+
+* \f[I]"always"\f[]: Always choose MP4.
+
+.SS extractor.instagram.highlights
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Include *Story Highlights* when downloading a user profile.
+(requires authentication)
+
+.SS extractor.kissmanga.captcha
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"stop"\f[]
+
+.IP "Description:" 4
+Controls how to handle redirects to CAPTCHA pages.
+
+
+* \f[I]"stop\f[]: Stop the current extractor run.
+
+* \f[I]"wait\f[]: Ask the user to solve the CAPTCHA and wait.
+
+.SS extractor.oauth.browser
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls how a user is directed to an OAuth authorization site.
+
+
+* \f[I]true\f[]: Use Python's \f[I]webbrowser.open()\f[] method to automatically
+open the URL in the user's browser.
+
+* \f[I]false\f[]: Ask the user to copy & paste an URL from the terminal.
+
+.SS extractor.photobucket.subalbums
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Download subalbums.
+
+.SS extractor.pixiv.ugoira
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Download Pixiv's Ugoira animations or ignore them.
+
+These animations come as a \f[I].zip\f[] file containing all the single
+animation frames in JPEG format.
+
+.SS extractor.plurk.comments
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Also search Plurk comments for URLs.
+
+.SS extractor.reactor.wait-min & .wait-max
+.IP "Type:" 6
+\f[I]float\f[]
+
+.IP "Default:" 9
+\f[I]3.0\f[] and \f[I]6.0\f[]
+
+.IP "Description:" 4
+Minimum and maximum wait time in seconds between HTTP requests
+during the extraction process.
+
+.SS extractor.readcomiconline.captcha
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"stop"\f[]
+
+.IP "Description:" 4
+Controls how to handle redirects to CAPTCHA pages.
+
+
+* \f[I]"stop\f[]: Stop the current extractor run.
+
+* \f[I]"wait\f[]: Ask the user to solve the CAPTCHA and wait.
+
+.SS extractor.recursive.blacklist
+.IP "Type:" 6
+\f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Default:" 9
+\f[I]["directlink", "oauth", "recursive", "test"]\f[]
+
+.IP "Description:" 4
+A list of extractor categories which should be ignored when using
+the \f[I]recursive\f[] extractor.
+
+.SS extractor.reddit.comments
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]500\f[]
+
+.IP "Description:" 4
+The value of the \f[I]limit\f[] parameter when loading
+a submission and its comments.
+This number (roughly) specifies the total amount of comments
+being retrieved with the first API call.
+
+Reddit's internal default and maximum values for this parameter
+appear to be 200 and 500 respectively.
+
+The value \f[I]0\f[] ignores all comments and significantly reduces the
+time required when scanning a subreddit.
+
+.SS extractor.reddit.morecomments
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Retrieve additional comments by resolving the \f[I]more\f[] comment
+stubs in the base comment tree.
+
+This requires 1 additional API call for every 100 extra comments.
+
+.SS extractor.reddit.date-min & .date-max
+.IP "Type:" 6
+\f[I]Date\f[]
+
+.IP "Default:" 9
+\f[I]0\f[] and \f[I]253402210800\f[] (timestamp of \f[I]datetime.max\f[])
+
+.IP "Description:" 4
+Ignore all submissions posted before/after this date.
+
+.SS extractor.reddit.id-min & .id-max
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"6kmzv2"
+
+.IP "Description:" 4
+Ignore all submissions posted before/after the submission with
+this ID.
+
+.SS extractor.reddit.recursion
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]0\f[]
+
+.IP "Description:" 4
+Reddit extractors can recursively visit other submissions
+linked to in the initial set of submissions.
+This value sets the maximum recursion depth.
+
+Special values:
+
+
+* \f[I]0\f[]: Recursion is disabled
+
+* \f[I]-1\f[]: Infinite recursion (don't do this)
+
+.SS extractor.reddit.refresh-token
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+The \f[I]refresh-token\f[] value you get from
+\f[I]linking your Reddit account to gallery-dl <OAuth_>\f[].
+
+Using a \f[I]refresh-token\f[] allows you to access private or otherwise
+not publicly available subreddits, given that your account is
+authorized to do so,
+but requests to the reddit API are going to be rate limited
+at 600 requests every 10 minutes/600 seconds.
+
+.SS extractor.sankaku.wait-min & .wait-max
+.IP "Type:" 6
+\f[I]float\f[]
+
+.IP "Default:" 9
+\f[I]3.0\f[] and \f[I]6.0\f[]
+
+.IP "Description:" 4
+Minimum and maximum wait time in seconds between each image
+
+Sankaku Channel responds with \f[I]429 Too Many Requests\f[] if it
+receives too many HTTP requests in a certain amount of time.
+Waiting a few seconds between each request tries to prevent that.
+
+.SS extractor.smugmug.videos
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Download video files.
+
+.SS extractor.tumblr.avatar
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Download blog avatars.
+
+.SS extractor.tumblr.date-min & .date-max
+.IP "Type:" 6
+\f[I]Date\f[]
+
+.IP "Default:" 9
+\f[I]0\f[] and \f[I]null\f[]
+
+.IP "Description:" 4
+Ignore all posts published before/after this date.
+
+.SS extractor.tumblr.external
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Follow external URLs (e.g. from "Link" posts) and try to extract
+images from them.
+
+.SS extractor.tumblr.inline
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Search posts for inline images and videos.
+
+.SS extractor.tumblr.reblogs
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+
+* \f[I]true\f[]: Extract media from reblogged posts
+
+* \f[I]false\f[]: Skip reblogged posts
+
+* \f[I]"same-blog"\f[]: Skip reblogged posts unless the original post
+is from the same blog
+
+.SS extractor.tumblr.posts
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Default:" 9
+\f[I]"all"\f[]
+
+.IP "Example:" 4
+"video,audio,link" or ["video", "audio", "link"]
+
+.IP "Description:" 4
+A (comma-separated) list of post types to extract images, etc. from.
+
+Possible types are \f[I]text\f[], \f[I]quote\f[], \f[I]link\f[], \f[I]answer\f[],
+\f[I]video\f[], \f[I]audio\f[], \f[I]photo\f[], \f[I]chat\f[].
+
+You can use \f[I]"all"\f[] instead of listing all types separately.
+
+.SS extractor.twitter.content
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Extract tweet text as \f[I]content\f[] metadata.
+
+.SS extractor.twitter.retweets
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Extract images from retweets.
+
+.SS extractor.twitter.videos
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Control video download behavior.
+
+
+* \f[I]true\f[]: Download videos and use \f[I]youtube-dl\f[] to handle
+HLS \f[I].m3u8\f[] manifests
+
+* \f[I]"ytdl"\f[]: Download videos and let \f[I]youtube-dl\f[] handle all of
+video extraction and download
+
+* \f[I]false\f[]: Skip video Tweets
+
+.SS extractor.wallhaven.api-key
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+Your \f[I]API Key <https://wallhaven.cc/settings/account>\f[] to use
+your account's browsing settings and default filters when searching.
+
+See https://wallhaven.cc/help/api for more information.
+
+.SS extractor.[booru].tags
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Categorize tags by their respective types
+and provide them as \f[I]tags_<type>\f[] metadata fields.
+
+Note: This requires 1 additional HTTP request for each post.
+
+.SS extractor.[manga-extractor].chapter-reverse
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Reverse the order of chapter URLs extracted from manga pages.
+
+
+* \f[I]true\f[]: Start with the latest chapter
+
+* \f[I]false\f[]: Start with the first chapter
+
+.SH DOWNLOADER OPTIONS
+.SS downloader.*.enabled
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Enable/Disable this downloader module.
+
+.SS downloader.*.mtime
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Use \f[I]Last-Modified\f[] HTTP response headers
+to set file modification times.
+
+.SS downloader.*.part
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls the use of \f[I].part\f[] files during file downloads.
+
+
+* \f[I]true\f[]: Write downloaded data into \f[I].part\f[] files and rename
+them upon download completion. This mode additionally supports
+resuming incomplete downloads.
+
+* \f[I]false\f[]: Do not use \f[I].part\f[] files and write data directly
+into the actual output files.
+
+.SS downloader.*.part-directory
+.IP "Type:" 6
+\f[I]Path\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+Alternate location for \f[I].part\f[] files.
+
+Missing directories will be created as needed.
+If this value is \f[I]null\f[], \f[I].part\f[] files are going to be stored
+alongside the actual output files.
+
+.SS downloader.*.rate
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Examples:" 4
+\f[I]"32000"\f[], \f[I]"500k"\f[], \f[I]"2.5M"\f[]
+
+.IP "Description:" 4
+Maximum download rate in bytes per second.
+
+Possible values are valid integer or floating-point numbers
+optionally followed by one of \f[I]k\f[], \f[I]m\f[]. \f[I]g\f[], \f[I]t\f[] or \f[I]p\f[].
+These suffixes are case-insensitive.
+
+.SS downloader.*.retries
+.IP "Type:" 6
+\f[I]integer\f[]
+
+.IP "Default:" 9
+\f[I]extractor.*.retries\f[]
+
+.IP "Description:" 4
+Maximum number of retries during file downloads
+or \f[I]-1\f[] for infinite retries.
+
+.SS downloader.*.timeout
+.IP "Type:" 6
+\f[I]float\f[] or \f[I]null\f[]
+
+.IP "Default:" 9
+\f[I]extractor.*.timeout\f[]
+
+.IP "Description:" 4
+Connection timeout during file downloads.
+
+.SS downloader.*.verify
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]extractor.*.verify\f[]
+
+.IP "Description:" 4
+Certificate validation during file downloads.
+
+.SS downloader.http.adjust-extensions
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Check the file headers of \f[I]jpg\f[], \f[I]png\f[], and \f[I]gif\f[] files
+and adjust their filename extensions if they do not match.
+
+.SS downloader.ytdl.format
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+youtube-dl's default, currently \f[I]"bestvideo+bestaudio/best"\f[]
+
+.IP "Description:" 4
+Video \f[I]format selection
+<https://github.com/ytdl-org/youtube-dl#format-selection>\f[]
+directly passed to youtube-dl.
+
+.SS downloader.ytdl.forward-cookies
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Forward cookies to youtube-dl.
+
+.SS downloader.ytdl.logging
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Route youtube-dl's output through gallery-dl's logging system.
+.br
+Otherwise youtube-dl will write its output directly to stdout/stderr.
+.br
+
+Note: Set \f[I]quiet\f[] and \f[I]no_warnings\f[] in
+\f[I]downloader.ytdl.raw-options\f[] to \f[I]true\f[] to suppress all output.
+
+.SS downloader.ytdl.outtmpl
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+The \f[I]Output Template <https://github.com/ytdl-org/youtube-dl#output-template>\f[]
+used to generate filenames for files downloaded with youtube-dl.
+
+Special values:
+
+
+* \f[I]null\f[]: generate filenames with \f[I]extractor.*.filename\f[]
+
+* \f[I]"default"\f[]: use youtube-dl's default, currently \f[I]"%(title)s-%(id)s.%(ext)s"\f[]
+
+Note: An output template other than \f[I]null\f[] might
+cause unexpected results in combination with other options
+(e.g. \f[I]"skip": "enumerate"\f[])
+
+.SS downloader.ytdl.raw-options
+.IP "Type:" 6
+\f[I]object\f[]
+
+.IP "Example:" 4
+.. code::
+
+{
+"quiet": true,
+"writesubtitles": true,
+"merge_output_format": "mkv"
+}
+
+
+.IP "Description:" 4
+Additional options passed directly to the \f[I]YoutubeDL\f[] constructor.
+.br
+All available options can be found in \f[I]youtube-dl's docstrings
+.br
+<https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/YoutubeDL.py#L138-L318>\f[].
+
+.SH OUTPUT OPTIONS
+.SS output.mode
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"auto"\f[]
+
+.IP "Description:" 4
+Controls the output string format and status indicators.
+
+
+* \f[I]"null"\f[]: No output
+
+* \f[I]"pipe"\f[]: Suitable for piping to other processes or files
+
+* \f[I]"terminal"\f[]: Suitable for the standard Windows console
+
+* \f[I]"color"\f[]: Suitable for terminals that understand ANSI escape codes and colors
+
+* \f[I]"auto"\f[]: Automatically choose the best suitable output mode
+
+.SS output.shorten
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls whether the output strings should be shortened to fit
+on one console line.
+
+.SS output.progress
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Controls the progress indicator when *gallery-dl* is run with
+multiple URLs as arguments.
+
+
+* \f[I]true\f[]: Show the default progress indicator
+(\f[I]"[{current}/{total}] {url}"\f[])
+
+* \f[I]false\f[]: Do not show any progress indicator
+
+* Any \f[I]string\f[]: Show the progress indicator using this
+as a custom \f[I]format string\f[]. Possible replacement keys are
+\f[I]current\f[], \f[I]total\f[] and \f[I]url\f[].
+
+.SS output.log
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]Logging Configuration\f[]
+
+.IP "Default:" 9
+\f[I]"[{name}][{levelname}] {message}"\f[]
+
+.IP "Description:" 4
+Configuration for standard logging output to stderr.
+
+If this is a simple \f[I]string\f[], it specifies
+the format string for logging messages.
+
+.SS output.logfile
+.IP "Type:" 6
+\f[I]Path\f[] or \f[I]Logging Configuration\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+File to write logging output to.
+
+.SS output.unsupportedfile
+.IP "Type:" 6
+\f[I]Path\f[] or \f[I]Logging Configuration\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Description:" 4
+File to write external URLs unsupported by *gallery-dl* to.
+
+The default format string here is \f[I]"{message}"\f[].
+
+.SS output.num-to-str
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Convert numeric values (\f[I]integer\f[] or \f[I]float\f[]) to \f[I]string\f[]
+before outputting them as JSON.
+
+.SH POSTPROCESSOR OPTIONS
+.SS classify.mapping
+.IP "Type:" 6
+\f[I]object\f[]
+
+.IP "Default:" 9
+.. code::
+
+{
+"Pictures" : ["jpg", "jpeg", "png", "gif", "bmp", "svg", "webp"],
+"Video" : ["flv", "ogv", "avi", "mp4", "mpg", "mpeg", "3gp", "mkv", "webm", "vob", "wmv"],
+"Music" : ["mp3", "aac", "flac", "ogg", "wma", "m4a", "wav"],
+"Archives" : ["zip", "rar", "7z", "tar", "gz", "bz2"]
+}
+
+
+.IP "Description:" 4
+A mapping from directory names to filename extensions that should
+be stored in them.
+
+Files with an extension not listed will be ignored and stored
+in their default location.
+
+.SS exec.async
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Controls whether to wait for a subprocess to finish
+or to let it run asynchronously.
+
+.SS exec.command
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Example:" 4
+
+* "convert {} {}.png && rm {}"
+
+* ["echo", "{user[account]}", "{id}"]
+
+.IP "Description:" 4
+The command to run.
+
+
+* If this is a \f[I]string\f[], it will be executed using the system's
+shell, e.g. \f[I]/bin/sh\f[]. Any \f[I]{}\f[] will be replaced
+with the full path of a file or target directory, depending on
+\f[I]exec.final\f[]
+
+
+* If this is a \f[I]list\f[], the first element specifies the program
+name and any further elements its arguments.
+Each element of this list is treated as a \f[I]format string\f[] using
+the files' metadata as well as \f[I]{_path}\f[], \f[I]{_directory}\f[],
+and \f[I]{_filename}\f[].
+
+.SS exec.final
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Controls whether to execute \f[I]exec.command\f[] for each
+downloaded file or only once after all files
+have been downloaded successfully.
+
+.SS metadata.mode
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"json"\f[]
+
+.IP "Description:" 4
+Select how to write metadata.
+
+
+* \f[I]"json"\f[]: all metadata using \f[I]json.dump()
+<https://docs.python.org/3/library/json.html#json.dump>\f[]
+
+* \f[I]"tags"\f[]: \f[I]tags\f[] separated by newlines
+
+* \f[I]"custom"\f[]: result of applying \f[I]metadata.format\f[] to a file's
+metadata dictionary
+
+.SS metadata.extension
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"json"\f[] or \f[I]"txt"\f[]
+
+.IP "Description:" 4
+Filename extension for metadata files.
+
+.SS metadata.format
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Example:" 4
+"tags:\\n\\n{tags:J\\n}\\n"
+
+.IP "Description:" 4
+Custom format string to build content of metadata files.
+
+Note: Only applies for \f[I]"mode": "custom"\f[].
+
+.SS mtime.key
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"date"\f[]
+
+.IP "Description:" 4
+Name of the metadata field whose value should be used.
+
+This value must either be a UNIX timestamp or a
+\f[I]datetime\f[] object.
+
+.SS ugoira.extension
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"webm"\f[]
+
+.IP "Description:" 4
+Filename extension for the resulting video files.
+
+.SS ugoira.ffmpeg-args
+.IP "Type:" 6
+\f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Default:" 9
+\f[I]null\f[]
+
+.IP "Example:" 4
+["-c:v", "libvpx-vp9", "-an", "-b:v", "2M"]
+
+.IP "Description:" 4
+Additional FFmpeg command-line arguments.
+
+.SS ugoira.ffmpeg-location
+.IP "Type:" 6
+\f[I]Path\f[]
+
+.IP "Default:" 9
+\f[I]"ffmpeg"\f[]
+
+.IP "Description:" 4
+Location of the \f[I]ffmpeg\f[] (or \f[I]avconv\f[]) executable to use.
+
+.SS ugoira.ffmpeg-output
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Show FFmpeg output.
+
+.SS ugoira.ffmpeg-twopass
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Enable Two-Pass encoding.
+
+.SS ugoira.framerate
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"auto"\f[]
+
+.IP "Description:" 4
+Controls the frame rate argument (\f[I]-r\f[]) for FFmpeg
+
+
+* \f[I]"auto"\f[]: Automatically assign a fitting frame rate
+based on delays between frames.
+
+* any other \f[I]string\f[]: Use this value as argument for \f[I]-r\f[].
+
+* \f[I]null\f[] or an empty \f[I]string\f[]: Don't set an explicit frame rate.
+
+.SS ugoira.keep-files
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Keep ZIP archives after conversion.
+
+.SS ugoira.libx264-prevent-odd
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+Prevent \f[I]"width/height not divisible by 2"\f[] errors
+when using \f[I]libx264\f[] or \f[I]libx265\f[] encoders
+by applying a simple cropping filter. See this \f[I]Stack Overflow
+thread <https://stackoverflow.com/questions/20847674>\f[]
+for more information.
+
+This option, when \f[I]libx264/5\f[] is used, automatically
+adds \f[I]["-vf", "crop=iw-mod(iw\\\\,2):ih-mod(ih\\\\,2)"]\f[]
+to the list of FFmpeg command-line arguments
+to reduce an odd width/height by 1 pixel and make them even.
+
+.SS zip.compression
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"store"\f[]
+
+.IP "Description:" 4
+Compression method to use when writing the archive.
+
+Possible values are \f[I]"store"\f[], \f[I]"zip"\f[], \f[I]"bzip2"\f[], \f[I]"lzma"\f[].
+
+.SS zip.extension
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"zip"\f[]
+
+.IP "Description:" 4
+Filename extension for the created ZIP archive.
+
+.SS zip.keep-files
+.IP "Type:" 6
+\f[I]bool\f[]
+
+.IP "Default:" 9
+\f[I]false\f[]
+
+.IP "Description:" 4
+Keep the actual files after writing them to a ZIP archive.
+
+.SS zip.mode
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]"default"\f[]
+
+.IP "Description:" 4
+
+* \f[I]"default"\f[]: Write the central directory file header
+once after everything is done or an exception is raised.
+
+
+* \f[I]"safe"\f[]: Update the central directory file header
+each time a file is stored in a ZIP archive.
+
+This greatly reduces the chance a ZIP archive gets corrupted in
+case the Python interpreter gets shut down unexpectedly
+(power outage, SIGKILL) but is also a lot slower.
+
+.SH MISCELLANEOUS OPTIONS
+.SS cache.file
+.IP "Type:" 6
+\f[I]Path\f[]
+
+.IP "Default:" 9
+
+* \f[I]tempfile.gettempdir()\f[] + \f[I]".gallery-dl.cache"\f[] on Windows
+
+* (\f[I]$XDG_CACHE_HOME\f[] or \f[I]"~/.cache"\f[]) + \f[I]"/gallery-dl/cache.sqlite3"\f[] on all other platforms
+
+.IP "Description:" 4
+Path of the SQLite3 database used to cache login sessions,
+cookies and API tokens across gallery-dl invocations.
+
+Set this option to \f[I]null\f[] or an invalid path to disable
+this cache.
+
+.SS ciphers
+.IP "Type:" 6
+\f[I]bool\f[] or \f[I]string\f[]
+
+.IP "Default:" 9
+\f[I]true\f[]
+
+.IP "Description:" 4
+
+* \f[I]true\f[]: Update urllib3's default cipher list
+
+* \f[I]false\f[]: Leave the default cipher list as is
+
+* Any \f[I]string\f[]: Replace urllib3's default ciphers with these
+(See \f[I]SSLContext.set_ciphers() <https://docs.python.org/3/library/ssl.html#ssl.SSLContext.set_ciphers>\f[]
+for details)
+
+.SH API TOKENS & IDS
+.SS extractor.deviantart.client-id & .client-secret
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To:" 4
+
+* login and visit DeviantArt's
+\f[I]Applications & Keys <https://www.deviantart.com/developers/apps>\f[]
+section
+
+* click "Register Application"
+
+* scroll to "OAuth2 Redirect URI Whitelist (Required)"
+and enter "https://mikf.github.io/gallery-dl/oauth-redirect.html"
+
+* scroll to the bottom and agree to the API License Agreement.
+Submission Policy, and Terms of Service.
+
+* click "Save"
+
+* copy \f[I]client_id\f[] and \f[I]client_secret\f[] of your new
+application and put them in your configuration file
+as \f[I]"client-id"\f[] and \f[I]"client-secret"\f[]
+
+* get a new \f[I]refresh-token <extractor.deviantart.refresh-token_>\f[]
+if necessary
+
+.SS extractor.flickr.api-key & .api-secret
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To:" 4
+
+* login and \f[I]Create an App <https://www.flickr.com/services/apps/create/apply/>\f[]
+in Flickr's \f[I]App Garden <https://www.flickr.com/services/>\f[]
+
+* click "APPLY FOR A NON-COMMERCIAL KEY"
+
+* fill out the form with a random name and description
+and click "SUBMIT"
+
+* copy \f[I]Key\f[] and \f[I]Secret\f[] and put them in your configuration
+file
+
+.SS extractor.pawoo.access-token
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To
+:" 4
+
+
+.SS extractor.reddit.client-id & .user-agent
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To:" 4
+
+* login and visit the \f[I]apps <https://www.reddit.com/prefs/apps/>\f[]
+section of your account's preferences
+
+* click the "are you a developer? create an app..." button
+
+* fill out the form, choose "installed app", preferably set
+"http://localhost:6414/" as "redirect uri" and finally click
+"create app"
+
+* copy the client id (third line, under your application's name and
+"installed app") and put it in your configuration file
+
+* use "\f[I]Python:<application name>:v1.0 (by /u/<username>)\f[]" as
+user-agent and replace \f[I]<application name>\f[] and \f[I]<username>\f[]
+accordingly (see Reddit's
+\f[I]API access rules <https://github.com/reddit/reddit/wiki/API>\f[])
+
+.SS extractor.smugmug.api-key & .api-secret
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To:" 4
+
+* login and \f[I]Apply for an API Key <https://api.smugmug.com/api/developer/apply>\f[]
+
+* use a random name and description,
+set "Type" to "Application", "Platform" to "All",
+and "Use" to "Non-Commercial"
+
+* fill out the two checkboxes at the bottom and click "Apply"
+
+* copy \f[I]API Key\f[] and \f[I]API Secret\f[]
+and put them in your configuration file
+
+.SS extractor.tumblr.api-key & .api-secret
+.IP "Type:" 6
+\f[I]string\f[]
+
+.IP "How To:" 4
+
+* login and visit Tumblr's
+\f[I]Applications <https://www.tumblr.com/oauth/apps>\f[] section
+
+* click "Register application"
+
+* fill out the form: use a random name and description, set
+https://example.org/ as "Application Website" and "Default
+callback URL"
+
+* solve Google's "I'm not a robot" challenge and click "Register"
+
+* click "Show secret key" (below "OAuth Consumer Key")
+
+* copy your \f[I]OAuth Consumer Key\f[] and \f[I]Secret Key\f[]
+and put them in your configuration file
+
+.SH CUSTOM TYPES
+.SS Date
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]integer\f[]
+
+.IP "Examples:" 4
+
+* \f[I]"2019-01-01T00:00:00"\f[]
+
+* \f[I]"2019"\f[] with \f[I]"%Y"\f[] as \f[I]date-format\f[]
+
+* \f[I]1546297200\f[]
+
+.IP "Description:" 4
+A \f[I]Date\f[] value represents a specific point in time.
+
+
+* If given as \f[I]string\f[], it is parsed according to date-format_.
+
+* If given as \f[I]integer\f[], it is interpreted as UTC timestamp.
+
+.SS Path
+.IP "Type:" 6
+\f[I]string\f[] or \f[I]list\f[] of \f[I]strings\f[]
+
+.IP "Examples:" 4
+
+* \f[I]"file.ext"\f[]
+
+* \f[I]"~/path/to/file.ext"\f[]
+
+* \f[I]"$HOME/path/to/file.ext"\f[]
+
+* \f[I]["$HOME", "path", "to", "file.ext"]\f[]
+
+.IP "Description:" 4
+A \f[I]Path\f[] is a \f[I]string\f[] representing the location of a file
+or directory.
+
+Simple \f[I]tilde expansion <https://docs.python.org/3/library/os.path.html#os.path.expanduser>\f[]
+and \f[I]environment variable expansion <https://docs.python.org/3/library/os.path.html#os.path.expandvars>\f[]
+is supported.
+
+In Windows environments, backslashes (\f[I]"\\"\f[]) can, in addition to
+forward slashes (\f[I]"/"\f[]), be used as path separators.
+Because backslashes are JSON's escape character,
+they themselves have to be escaped.
+The path \f[I]C:\\path\\to\\file.ext\f[] has therefore to be written as
+\f[I]"C:\\\\path\\\\to\\\\file.ext"\f[] if you want to use backslashes.
+
+.SS Logging Configuration
+.IP "Type:" 6
+\f[I]object\f[]
+
+
+.IP "Examples:" 4
+.. code::
+
+{
+"format": "{asctime} {name}: {message}",
+"format-date": "%H:%M:%S",
+"path": "~/log.txt",
+"encoding": "ascii"
+}
+
+{
+"level": "debug",
+"format": {
+"debug" : "debug: {message}",
+"info" : "[{name}] {message}",
+"warning": "Warning: {message}",
+"error" : "ERROR: {message}"
+}
+}
+
+
+.IP "Description:" 4
+Extended logging output configuration.
+
+
+* format
+
+* General format string for logging messages
+or a dictionary with format strings for each loglevel.
+
+In addition to the default
+\f[I]LogRecord attributes <https://docs.python.org/3/library/logging.html#logrecord-attributes>\f[],
+it is also possible to access the current
+\f[I]extractor <https://github.com/mikf/gallery-dl/blob/2e516a1e3e09cb8a9e36a8f6f7e41ce8d4402f5a/gallery_dl/extractor/common.py#L24>\f[]
+and \f[I]job <https://github.com/mikf/gallery-dl/blob/2e516a1e3e09cb8a9e36a8f6f7e41ce8d4402f5a/gallery_dl/job.py#L19>\f[]
+objects as well as their attributes
+(e.g. \f[I]"{extractor.url}"\f[])
+
+* Default: \f[I]"[{name}][{levelname}] {message}"\f[]
+
+* format-date
+
+* Format string for \f[I]{asctime}\f[] fields in logging messages
+(see \f[I]strftime() directives <https://docs.python.org/3/library/time.html#time.strftime>\f[])
+
+* Default: \f[I]"%Y-%m-%d %H:%M:%S"\f[]
+
+* level
+
+* Minimum logging message level
+(one of \f[I]"debug"\f[], \f[I]"info"\f[], \f[I]"warning"\f[], \f[I]"error"\f[], \f[I]"exception"\f[])
+
+* Default: \f[I]"info"\f[]
+
+* path
+
+* \f[I]Path\f[] to the output file
+
+* mode
+
+* Mode in which the file is opened;
+use \f[I]"w"\f[] to truncate or \f[I]"a"\f[] to append
+(see \f[I]open() <https://docs.python.org/3/library/functions.html#open>\f[])
+
+* Default: \f[I]"w"\f[]
+
+* encoding
+
+* File encoding
+
+* Default: \f[I]"utf-8"\f[]
+
+Note: path, mode and encoding are only applied when configuring
+logging output to a file.
+
+.SS Postprocessor Configuration
+.IP "Type:" 6
+\f[I]object\f[]
+
+
+.IP "Example:" 4
+.. code::
+
+{
+"name": "zip",
+"compression": "store",
+"extension": "cbz",
+"whitelist": ["mangadex", "exhentai", "nhentai"]
+}
+
+
+.IP "Description:" 4
+An object with the \f[I]name\f[] of a post-processor and its options.
+
+See \f[I]Postprocessor Options\f[] for a list of all available
+post-processors and their respective options.
+
+You can also set a \f[I]whitelist\f[] or \f[I]blacklist\f[] to
+only enable or disable a post-processor for the specified
+extractor categories.
+
+
+.SH BUGS
+https://github.com/mikf/gallery-dl/issues
+
+.SH AUTHORS
+Mike Fährmann <mike_faehrmann@web.de>
+.br
+and https://github.com/mikf/gallery-dl/graphs/contributors
+
+.SH "SEE ALSO"
+.BR gallery-dl (1)