GALLERY-DL.CONF(5)

๐Ÿ’– NAME ๐Ÿ’–

gallery-dl.conf โ€” the gallery-dl configuration file, bestie. It's literally just the config file for gallery-dl (manual page GALLERY-DL.CONF(5), section 5, you're so welcome ๐ŸŽ€).


โœจ DESCRIPTION โœจ

So here's the vibe: every single time gallery-dl starts up, it goes looking for configuration files in these places ๐Ÿ‘‡ (unless you pass --ignore-config, which tells it to chill and not look at all):

/etc/gallery-dl.conf
$HOME/.config/gallery-dl/config.json
$HOME/.gallery-dl.conf

You can also absolutely bring your own config files with the -c/--config command-line option, or sprinkle in extra option values with -o/--option as <key>=<value> pairs. Mix and match, it's your world ๐ŸŒˆ

Now, the tea: config files are JSON-based, and JSON does NOT allow ordinary comments. Tragic, I know ๐Ÿ˜ญ. BUT โ€” plot twist โ€” unused keys are simply ignored, so you can use them as makeshift comments by setting their values to arbitrary strings. Iconic loophole behaviour, honestly. ๐Ÿ’…


๐ŸŒธ EXAMPLE ๐ŸŒธ

{
    "base-directory": "/tmp/",
    "extractor": {
        "pixiv": {
            "directory": ["Pixiv", "Works", "{user[id]}"],
            "filename": "{id}{num}.{extension}",
            "username": "foo",
            "password": "bar"
        },
        "flickr": {
            "_comment": "OAuth keys for account 'foobar'",
            "access-token": "0123456789-0123456789abcdef",
            "access-token-secret": "fedcba9876543210"
        }
    },
    "downloader": {
        "retries": 3,
        "timeout": 2.5
    }
}

See that "_comment"? That's the makeshift-comment trick in the wild. She's thriving. ๐Ÿฆ‹


๐Ÿ‘‘ EXTRACTOR OPTIONS ๐Ÿ‘‘

๐ŸŽ€ extractor.*.filename

Type:

  • Format String
  • object (Condition โ†’ Format String)

Example:

"{manga}_c{chapter}_{page:>03}.{extension}"

{ "extension == 'mp4'": "{id}_video.{extension}", "'nature' in title" : "{id}_{title}.{extension}", ""                  : "{id}_default.{extension}" }

Description:

A Format String that generates the filenames for your downloaded files. โœจ

If this is an object, it must contain Conditions mapping to the Format String to use. Those Conditions get evaluated in the specified order until one of them evaluates to True. And when none of them match? The "" entry is used, or the extractor's default filename Format String. Periodt. ๐Ÿ’…

The available replacement keys depend on which extractor you're using. Want the key list for a specific one? Call *gallery-dl* with the -K/--list-keywords command-line option. Like, for example:

$ 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 extension key is missing or None, it will be filled in later when the file download is starting. So this key is always available to give you a valid filename extension. No panic, it's handled. ๐Ÿซถ


๐ŸŽ€ extractor.*.directory

Type:

  • list of Format Strings
  • object (Condition โ†’ Format Strings)

Example:

["{category}", "{manga}", "c{chapter} - {title}"]

{ "'nature' in content": ["Nature Pictures"], "retweet_id != 0"    : ["{category}", "{user[name]}", "Retweets"], ""                   : ["{category}", "{user[name]}"] }

Description:

A list of Format String(s) used to generate the target directory path. ๐Ÿ—‚๏ธ

If this is an object, it must contain Conditions mapping to the list of Format Strings to use.

Each individual string in such a list represents a single path segment, which gets joined together and appended to the base-directory to form the complete target directory path. Slay, path assembly. โœจ


๐ŸŽ€ extractor.*.base-directory

Type:

  • Path
  • object (Condition โ†’ Path)

Default: "./gallery-dl/"

Example:

"~/Downloads/gallery-dl"

{ "score >= 100": "$DL", "duration"    : "$DL/video", ""              : "/tmp/files/" }

Description:

Directory path used as the base for all download destinations. ๐Ÿ 

If this is an object, it must contain Conditions mapping to the Path to use. And heads up: specifying a default Path with "" is required. Don't skip it, bestie. ๐Ÿ˜ญ


๐ŸŽ€ extractor.*.follow

Type:

  • Format String
  • list of Format Strings

Default: null

Example:

  • "{content}"
  • "\fE body or html or text"
  • ["{body}", "{html}", "{text}"]

Description:

Follow URLs found in the given Format String's result and process them with child extractors. It's giving side quest energy. ๐Ÿงš


๐ŸŽ€ extractor.*.async

Type:

  • bool
  • integer

Default:

true imgbox khinsider [Nijie] false otherwise

Description:

Run data extraction in an asynchronous background thread. ๐ŸŒ€

Use an integer value to control the maxsize argument of the underlying message queue. Fancy, I know.


๐ŸŽ€ extractor.*.children

Type: bool

Default: true

Description:

Allow spawning child extractors. Let the babies run. ๐Ÿ‘‘


๐ŸŽ€ extractor.*.parent

Type: bool

Default:

true [chevereto] erome [imagehost]  | urlgalleries false otherwise

Description:

Mark an extractor as a parent and enable the following for it by default:

  • parent-directory
  • parent-metadata
  • parent-session
  • parent-skip

It's the whole parent package deal. ๐Ÿซถ


๐ŸŽ€ extractor.*.parent-directory

Type: bool

Default: extractor.parent

Description:

Use an extractor's current target directory as base-directory for any spawned child extractors. Everyone shares the house. ๐Ÿก


๐ŸŽ€ extractor.*.parent-metadata

Type:

  • bool
  • string

Default:

true extractor.parent "_parent" otherwise

Description:

Forward a parent's metadata to its child extractors. Like handing down the family lore. ๐Ÿ“œ

If this is a string, add a parent's metadata to its children's, into a field named after said string. For example with "parent-metadata": "_p_":

{ "id": "child-id", "_p_": {"id": "parent-id"} }

๐ŸŽ€ extractor.*.parent-session

Type: bool

Default: extractor.parent

Description:

Share a parent's session with its child extractors โ€” including cookies, headers, and other networking settings. โœจ Group session, everyone's invited.


๐ŸŽ€ extractor.*.parent-skip

Type: bool

Default: extractor.parent

Description:

Share the number of skipped downloads between parent and child extractors. The skip counter is communal. ๐Ÿ’€


๐ŸŽ€ extractor.*.path-restrict

Type:

  • string
  • object (character โ†’ replacement character(s))

Default: "auto"

Example:

  • "/!? (){}"
  • {"/": "_", "+": "_+_", "({[": "(", "]})": ")", "a-z": "*"}

Description:

A string of characters to be replaced with the value of path-replace, or an object mapping invalid/unwanted characters, character sets, or character ranges to their replacements for generated path segment names.

Special Values:

  • "auto" โ€” Use characters from "unix" or "windows" depending on the local operating system
  • "unix" โ€” /
  • "windows" โ€” \\/<>:"?* (https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file)
  • "windows+" โ€” {"\\": "โงน", "": "๏ฝœ", "/": "โงธ", "<": "๏ผœ", ">": "๏ผž", ":": "๏ผš", "\"": "๏ผ‚", "?": "๏ผŸ", "*": "๏ผŠ"} (replace characters not allowed by Windows with Unicode alternatives)

Unicode glow-up, honestly gorgeous ๐Ÿ’…

  • "ascii" โ€” ^0-9A-Za-z_. (only ASCII digits, letters, underscores, and dots)
  • "ascii+" โ€” ^0-9@-[\\]-{ #-)+-.;=!}~ (all ASCII characters except the ones not allowed by Windows)

Implementation Detail:

For strings with length >= 2, this option uses a Regular Expression Character Set, meaning that:

  • Using a caret ^ as first character inverts the set ("^...")
  • Character ranges are supported ("0-9a-z")
  • ], -, and \ need to be escaped as \\], \\-, and \\\\ respectively to use them as literal characters
Escape properly or it will not behave like you want. That's the whole warning. ๐Ÿ˜ญ

๐ŸŽ€ extractor.*.path-replace

Type: string

Default: "_"

Description:

The replacement character(s) for path-restrict. Simple. Clean. Iconic. โœจ


๐ŸŽ€ extractor.*.path-remove

Type: string

Default: "\u0000-\u001f\u007f" (ASCII control characters)

Description:

Set of characters to remove from generated path names. Begone. ๐Ÿ‘‹

Note:

In a string with 2 or more characters, []^-\ need to be escaped with backslashes, e.g. "\\[\\]"


๐ŸŽ€ extractor.*.path-strip

Type: string

Default: "auto"

Description:

Set of characters to remove from the end of generated path segment names, using str.rstrip(). Trailing junk? Swept. ๐Ÿงน

Special Values:

  • "auto" โ€” Use characters from "unix" or "windows" depending on the local operating system
  • "unix" โ€” ""
  • "windows" โ€” ". "

๐ŸŽ€ extractor.*.path-sub

Type: object (name โ†’ replacement)

Example:

{ "."  : "[dot]", ".." : "[dotdot]", "foo": "bar" }

Description:

Substitute generated path segment names with the given alternative. A little find-and-replace moment. ๐Ÿฆ‹


๐ŸŽ€ extractor.*.path-convert

Type: Conversion(s)

Example:

  • "g"
  • "Wl"

Description:

Conversion(s) to apply to each path segment after path-restrict replacements. Order matters, bestie.


๐ŸŽ€ extractor.*.path-extended

Type: bool

Default: true

Description:

On Windows, use extended-length paths prefixed with \\?\ to work around the 260 characters path length limit. Windows said 260 max, gallery-dl said absolutely not. ๐ŸŒˆ


๐ŸŽ€ extractor.*.extension-map

Type: object (extension โ†’ replacement)

Default:

{ "jpeg": "jpg", "jpe" : "jpg", "jfif": "jpg", "jif" : "jpg", "jfi" : "jpg", "html": "htm" }

Description:

A JSON object mapping filename extensions to their replacements. โœจ Normalising extensions, as one does.


๐ŸŽ€ extractor.*.skip

Type:

  • bool
  • string

Default: true

Example:

  • "abort:5"
  • "abort:5:2"
  • "abort:5:manga"
  • "terminate:3"

Description:

Controls the behavior when downloading files that have been downloaded before โ€” like, a file with the same filename already exists, or its ID is in a download archive. Here's the full menu ๐Ÿ“:

  • true โ€” Skip downloads
  • false โ€” Overwrite already existing files
  • "abort" โ€” Stop the current extractor
  • "abort:N" โ€” Skip downloads and stop the current extractor after N consecutive skips
  • "abort:N:L" โ€” Skip downloads and stop the current extractor after N consecutive skips; Ascend L levels in the extractor hierarchy
  • "abort:N:SC" โ€” Skip downloads and stop the current extractor after N consecutive skips; Ascend to an extractor with subcategory SC in the extractor hierarchy
  • "terminate" โ€” Stop the current extractor, including parent extractors
  • "terminate:N" โ€” Skip downloads and stop the current extractor, including parent extractors, after N consecutive skips
  • "exit" โ€” Exit the program altogether
  • "exit:N" โ€” Skip downloads and exit the program after N consecutive skips
  • "enumerate" โ€” Add an enumeration index to the beginning of the filename extension (file.1.ext, file.2.ext, etc.)
"exit" really does exit the whole program. It's not playing. Choose wisely, bestie. ๐Ÿ’€

๐ŸŽ€ extractor.*.skip-filter

Type: Condition

Description: Python Expression controlling which skipped files to count towards "abort" / "terminate" / "exit".

  • extractor.*.sleep ๐Ÿ˜ด
    • Type: Duration
    • Default: 5.0 for animepictures, 0 otherwise
    • Description: How many seconds to nap before every single download. yes bestie, we rest ๐Ÿ’ค
  • extractor.*.sleep-skip ๐Ÿ™ˆ
    • Type: Duration
    • Default: 0
    • Description: How many seconds to nap after skipping a file download. no bugging the site again immediately, we're being polite ๐ŸŽ€
  • extractor.*.sleep-extractor ๐Ÿงš
    • Type: Duration
    • Default: 0
    • Description: How many seconds to nap before handling an input URL โ€” i.e. before starting a whole new extractor. little breather between main characters โœจ
  • extractor.*.sleep-retries ๐Ÿ”
    • Type: Duration+
    • Default: "lin=1"
    • Example:
      • "30-50"
      • "exp=40"
      • "lin:20=30-60"
    • Description: How many seconds to nap before retrying an HTTP request. If this is a string, its Duration value can be prefixed with lin[:START[:MAX]] for linear or exp[:BASE[:START[:MAX]]] for exponential growth.
    • Note: lin and exp can be any starting characters of linear and exponential. so like l, li, lin, line, linea, or linear โ€” all valid, she's flexible ๐Ÿ’…
  • extractor.*.sleep-429 ๐Ÿšฆ
    • Type: Duration+
    • Default: 60
    • Example:
      • "30-50"
      • "e=40"
      • "linear:20=30-60"
    • Description: How many seconds to nap when you get hit with a 429 Too Many Requests response before retrying the request. the site said "chill" so we chill ๐Ÿ˜ญ If this is a string, its Duration value can be prefixed with lin[:START[:MAX]] for linear or exp[:BASE[:START[:MAX]]] for exponential backoff.
  • extractor.*.sleep-request โณ
    • Type: Duration
    • Default:
      • "0.5-1.5" โ†’ ao3, arcalive, artfight, booth, civitai, [Danbooru], [E621], [foolfuuka]:search, hdoujin, itaku, [manganelo], newgrounds, [nitter], [philomena], pixiv-novel, plurk, poipiku, pornpics, schalenetwork, scrolller, sizebooru, sofurry, soundgasm, thehentaiworld, urlgalleries, vk, webtoons, weebcentral, xfolio, zerochan
      • "1.0" โ†’ animepictures, furaffinity, pawchive, rule34
      • "1.0-2.0" โ†’ flickr, pexels, weibo, [wikimedia]
      • "1.4" โ†’ wallhaven
      • "2.0-4.0" โ†’ behance, imagefap, [Nijie]
      • "3.0-6.0" โ†’ bilibili, exhentai | [reactor]
      • "6.0-6.1" โ†’ twibooru
      • "6.0-12.0" โ†’ instagram
      • 0 โ†’ otherwise
    • Description: The minimal time interval in seconds between each HTTP request while data extraction is happening. it's giving "we respect the servers" energy ๐Ÿซถ
  • extractor.*.username & .password ๐Ÿ”
    • Type: string
    • Default: null
    • Description: The username and password to use when attempting to log in to another site.

This is supported for

  • aibooru (*)
  • ao3
  • aryion
  • atfbooru (*)
  • bluesky
  • booruvar (*)
  • coomer
  • danbooru (*)
  • deviantart
  • e621 (*)
  • e6ai (*)
  • e926 (*)
  • exhentai
  • girlswithmuscle
  • horne (R)
  • idolcomplex
  • imgbb
  • inkbunny
  • iwara
  • kemono
  • madokami (R)
  • mangadex
  • mangoxo
  • newgrounds
  • nijie (R)
  • nudostarforum
  • pawchive
  • pillowfort
  • poipiku
  • rule34world
  • rule34xyz
  • sankaku
  • scrolller
  • seiga
  • simpcity
  • subscribestar
  • tapas
  • vipergirls
  • zerochan

These values can also be specified via the -u/--username and -p/--password command-line options or by using a .netrc file. (see Authentication_)

  • Note: Leave the password value empty or undefined to be prompted for a password when performing a login (see getpass()).

(*) The password value for these sites should be the API key found in your user profile, not the actual account password. do NOT paste your real password here bestie ๐Ÿ’€

(R) Login with username & password or supplying authenticated cookies is required.

  • extractor.*.init ๐ŸŒฑ
    • Type:
      • bool
      • string
    • Default: false
    • Description: Controls when to initialize extractor internals. (postprocessors, archives, path-* options, etc)
      • true โ†’ Initialize everything immediately upon extractor start
      • false | "lazy" โ†’ Initialize data structures when processing the first post, or not at all when an extractor never yields a post. queen of not doing work she doesn't have to ๐Ÿ‘‘
  • extractor.*.input โŒจ๏ธ
    • Type: bool
    • Default: true if stdin is attached to a terminal, false otherwise
    • Description: Allow prompting the user for interactive input. she's asking your opinion, respectfully ๐Ÿ™ˆ
  • extractor.*.netrc ๐Ÿ“„
    • Type: bool
    • Default: false
    • Description: Enable the use of .netrc authentication data.
  • extractor.*.cookies ๐Ÿช
    • Type:
      • Path
      • object (name โ†’ value)
      • list
    • Description: Source to read additional cookies from. This can be
      • The Path to a Mozilla/Netscape format cookies.txt file:
"~/.local/share/cookies-instagram-com.txt"
  • An object specifying cookies as name-value pairs:
{ "cookie-name": "cookie-value", "sessionid"  : "14313336321%3AsabDFvuASDnlpb%3A31", "isAdult"    : "1" }
  • A list with up to 5 entries specifying a browser profile.
    • The first entry is the browser name
    • The optional second entry is a profile name or an absolute path to a profile directory
    • The optional third entry is the keyring to retrieve passwords for decrypting cookies from
    • The optional fourth entry is a (Firefox) container name ("none" for only cookies with no container (default))
    • The optional fifth entry is the domain to extract cookies for. Prefix it with a dot . to include cookies for subdomains.
["firefox"]
["firefox", null, null, "Personal"]
["chromium", "Private", "kwallet", null, ".twitter.com"]
  • extractor.*.cookies-select ๐ŸŽฒ
    • Type: string
    • Default: null
    • Description: Interpret extractor.cookies as a list of cookie sources and select one of them for each extractor run.
[ "~/.local/share/cookies-instagram-com-1.txt",
  "~/.local/share/cookies-instagram-com-2.txt",
  "~/.local/share/cookies-instagram-com-3.txt",
  ["firefox", null, null, "c1", ".instagram-com"],
]
  • Supported Values:
    • "random" โ€” Select cookies randomly.
    • "rotate" โ€” Select cookies in sequence. Start over from the beginning after reaching the end of the list. we love a lil rotation moment ๐ŸŒˆ
  • extractor.*.cookies-update ๐Ÿ’พ
    • Type:
      • bool
      • Path
    • Default: true
    • Description: Export session cookies in cookies.txt format.
      • If this is a Path, write cookies to the given file path.
      • If this is true and extractor.*.cookies specifies the Path of a valid cookies.txt file, update its contents.
  • extractor.*.proxy ๐ŸŒ
    • Type:
      • string
      • object (scheme โ†’ proxy)
    • Example:
"http://10.10.1.10:3128"
{ "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" }
  • Description: Proxy (or proxies) to be used for remote connections.
    • If this is a string, it is the proxy URL for all outgoing requests.
    • If this is an object, 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 scheme://host as key. See Requests' proxy documentation for more details.
  • Note: If a proxy URL does not include a scheme, http:// is assumed.
  • extractor.*.proxy-env ๐Ÿซง
    • Type: bool
    • Default: true
    • Description: Collect proxy configuration information from environment variables (HTTP_PROXY, HTTPS_PROXY, NO_PROXY) and Windows Registry settings.
  • extractor.*.source-address ๐Ÿ“
    • Type:
      • string
      • list with 1 string and 1 integer as elements
    • Example:
      • "192.168.178.20"
      • ["192.168.178.20", 8080]
    • Description: Client-side IP address to bind to. Can be either a simple string with just the local IP address or a list with IP and explicit port number as elements.
  • extractor.*.user-agent ๐Ÿ•ต๏ธโ€โ™€๏ธ
    • Type: string
    • Default:
"gallery-dl/VERSION"
  • [Danbooru]
  • mangadex
  • [nitter]
  • pawchive
  • weasyl
  • [wikimedia]
  • zerochan
"gallery-dl/VERSION (by mikf)"
  • [E621]
"net.umanle.arca.android.playstore/0.9.75"
  • arcalive
"Patreon/126.9.0.15 (Android; Android 14; Scale/2.10)"
  • patreon
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/LATEST.0.0.0 Safari/537.36"
  • instagram
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:LATEST) Gecko/20100101 Firefox/LATEST"
  • otherwise
  • Example:
    • "curl/8.14.1"
    • "browser"
    • "+chrome"
    • "@/opt/ChromeBrowser/bin/chrome"
  • Description: User-Agent header value used for HTTP requests. Setting this value to "browser" will try to automatically detect and use the User-Agent header of the system's default browser. Starting this value with a + will use the latest User-Agent header of this preset target, e.g. "+ff". (Supported values: firefox ff chrome cr gallery-dl gdl google-bot | bot) Starting this value with an @ will try to automatically detect and use the User-Agent header of this installed browser, e.g. "@C:/Program Files/Zen Browser/zen-browser.exe". she's a chameleon fr fr ๐Ÿฆ‹
  • extractor.*.browser ๐Ÿงญ
    • Type: string
    • Default: "firefox" for artstation, behance, fanbox, simplyhentai, twitter, vsco; "chrome" for comicartfans, instagram; null otherwise
    • Example:
      • "firefox"
      • "firefox/128"
      • "chrome:macos"
      • "chrome/138:macos"
    • Description: Try to emulate a real browser (firefox or chrome) by using its HTTP headers and TLS ciphers for HTTP requests by setting specialized defaults for
      • user-agent
      • headers
      • ciphers

Supported browsers:

  • firefox
  • firefox/153
  • firefox/140
  • firefox/128
  • chrome
  • chrome/150
  • chrome/138
  • chrome/111

The operating system used in the User-Agent header can be specified after a colon : (windows, linux, macos), for example chrome:windows.

  • Note: Any value not matching a supported browser will fall back to "firefox".
requests and urllib3 only support HTTP/1.1, while a real browser would use HTTP/2 and HTTP/3. so likeโ€ฆ she's cosplaying, not actually being the browser ๐Ÿ’€
  • extractor.*.referer ๐Ÿ”—
    • Type:
      • bool
      • string
    • Default: false for 4archive, 4chanarchives, archivedmoe, arena, nsfwalbum, pholder, tumblrgallery; true otherwise
    • Description: Whether to send a Referer header. ๐Ÿ’œ

Okay so, back to the description of that referer option we were literally mid-way through, no skipping ๐Ÿซถ

  • Send Referer headers with all outgoing HTTP requests.
  • If this is a string, send it as Referer instead of the extractor's root domain.

๐Ÿฆ‹ extractor.*.geo-bypass

  • Type: string, or a list of strings
  • Default: "auto"

Examples:

  • "JP"
  • "105.48.0.0/12"
  • "JP,CN,105.48.0.0/12"
  • ["JP", "CN", "105.48.0.0/12"]

Description: use a random IP as a fake X-Forwarded-For header to try and bypass geographic restrictions โœจ

And what can you put in there? Either ISO 3166-2 country codes or IP blocks in CIDR notation. Both are valid, slay.


๐ŸŒธ extractor.*.headers

  • Type: "string", or an object (name โ†’ value)

Default:

{ "User-Agent"     : "<extractor.*.user-agent>", "Accept"        : "*/*",
  "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate",
  "Referer"        : "<extractor.*.referer>" }

Description: extra HTTP headers to be sent along with each HTTP request.

  • Wanna kill a header entirely? Set its value to null. Gone. Not invited. ๐Ÿ™ˆ
  • Set this whole option to "firefox" or "chrome" and you get that browser's default headers instead. iconic behavior honestly.

๐Ÿ’… extractor.*.ciphers

  • Type: string, or a list of strings

Examples:

  • "firefox"
  • (the docs drop a .. code:: json markup line right here, lmao, and then:)
["ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-RSA-AES128-GCM-SHA256",
 "ECDHE-ECDSA-CHACHA20-POLY1305", "ECDHE-RSA-CHACHA20-POLY1305"]

Description: a list of TLS/SSL cipher suites, in OpenSSL cipher list format, that get passed straight to ssl.SSLContext.set_ciphers().

Set this option to "firefox" or "chrome" to use those browsers' default ciphers. no cap ๐Ÿ’–


โœจ extractor.*.tls12

  • Type: bool
  • Default: the manual literally says false artfight artstation behance true otherwise, which is giving "a table got mangled in transit", but bestie, that is character-for-character what it says, so that is what you get ๐Ÿ’€

Description: allow selecting TLS 1.2 cipher suites.

You can disable it to alter your TLS fingerprints and potentially bypass Cloudflare blocks. sneaky, we love that for you ๐ŸŒˆ


๐ŸŽ€ extractor.*.keywords

  • Type: object (name โ†’ value)

Example:

{"type": "Pixel Art", "type_id": 123}

Description: extra name-value pairs to be added to each metadata dictionary. cute little bonus fields ๐Ÿ“


๐Ÿ‘‘ extractor.*.keywords-default

  • Type: any
  • Default: "None"

Description: the default value used for missing or undefined keyword names inside a Format String. no more empty gaps, she's got a fallback โœจ


๐Ÿ’œ extractor.*.keywords-eval

  • Type: bool
  • Default: false

Description: evaluate each keywords and keywords-global string value as a Format String.


๐Ÿฆ‹ extractor.*.keywords-global

  • Type: object (name โ†’ value)

Example:

{"type": "Original", "type_id": 1, "type_category": "meta"}

Description: global name-value pairs to be added to each metadata dictionary.

Note: keywords defined here get overwritten by keywords from extractor.keywords with the same name. so like, global is the vibe but the local one wins the argument ๐Ÿ’…

๐ŸŒธ extractor.*.metadata-url

  • Type: string
  • Default: "_url"

Description: insert a file's download URL into its metadata dictionary under the given name.

For example, setting this option to "gdl_file_url" makes a brand new metadata field named gdl_file_url show up, holding the current file's download URL. And then you can use it in filenames, with a metadata post processor, whatever you want. main character field honestly ๐Ÿ‘‘


โญ extractor.*.metadata-path

  • Type: string
  • Default: "_path"

Description: insert a reference to the current PathFormat data structure into metadata dictionaries under the given name.

For example, setting this option to "gdl_path" would let you access the current file's filename as "{gdl_path.filename}". iykyk โœจ


๐Ÿงš extractor.*.metadata-extractor

  • Type: string
  • Default: "_extr"

Description: insert a reference to the current Extractor object into metadata dictionaries under the given name.


๐Ÿ“ extractor.*.metadata-http

  • Type: string
  • Default: null

Description: insert an object containing a file's HTTP headers, plus the filename, extension, and date parsed out of them, into metadata dictionaries under the given name.

For example, setting this option to "gdl_http" would let you grab the current file's Last-Modified header as "{gdl_http[Last-Modified]}" and its parsed form as "{gdl_http[date]}". so much info, so little time ๐Ÿ’–


๐Ÿ’ซ extractor.*.metadata-version

  • Type: string
  • Default: null

Description: insert an object containing gallery-dl's version info into metadata dictionaries under the given name.

The content of that object is, exactly:

{ "version"         : "string",
  "is_executable"   : "bool",
  "current_git_head": "string or null" }

๐ŸŒˆ extractor.*.category-transfer

  • Type: bool
  • Default: Extractor-specific

Description: transfer an extractor's (sub)category values to all the child extractors it spawns, so they can inherit their parent's config options. hand-me-downs but make it config ๐ŸŽ€


๐Ÿ’… extractor.*.blacklist & .whitelist

  • Type: list of strings
  • Default: ["oauth", "recursive", "test"] + current extractor category

Example: ["imgur", "redgifs:user", "*:image"]

Description: a list of extractor identifiers to ignore (or allow) when spawning child extractors for unknown URLs โ€” like, say, from reddit or plurk.

Each identifier can be:

  • A category or basecategory name (like "imgur", "mastodon")
  • A (base)category-subcategory pair, where both names are separated by a colon (like "redgifs:user"). Both names can be a * or left empty, which matches all possible names ("*:image", ":user").
Note: any blacklist setting will automatically include "oauth", "recursive", and "test". they just show up, uninvited, every time ๐Ÿ’€

๐Ÿฆ‹ extractor.*.tags-blacklist & .tags-whitelist

  • Type: Path, string, or a list of strings

Examples:

  • "/path/to/file.txt"
  • "1girl,long_hair, highres,commentary_request"
  • "1girl long_hair, highres -commentary_request"
  • ["1girl", "long_hair", "highres", "commentary_request"]
  • ["1girl long_hair", "highres -commentary_request"]

Description: a list of tags to exclude/include for processed posts.

Posts containing a blacklisted tag, or not containing any whitelisted tag โ€” including all of their files โ€” will be ignored and not processed any further. periodt. ๐Ÿ™ˆ

Danbooru Blacklist Rules are supported.

This can be:

  • The Path of a plaintext file containing black-/whitelisted tag names separated by newlines
  • A string with tag names separated by commas ("tag1,tag2 tag3,tag4")
  • A list of string tag names (["tag1", "tag2 tag3", "tag4"])

Lines starting with # followed by a space will be ignored, and can be used as comments. For example # this is a comment

Using "/import" as the value will import and apply your account's blacklisted tags list. This is supported for:

  • [Danbooru] & [E621] instances (requires username & api-key)
  • sankaku (requires username & password)
  • gelbooru & [gelbooru_v02] instances (requires authenticated cookies)

๐ŸŒธ extractor.*.archive

  • Type: string, or Path+
  • Default: null

Examples:

  • "$HOME/.archives/gdl.sqlite3"
  • [":~", ".archives", "{category}.sqlite3"]
  • "postgresql://user:pass@host/database"

Description: the file to store IDs of downloaded files in. Downloads of files already recorded in this archive file get skipped. bye, done before โœจ

And okay, important bit: the resulting archive file is not a plain text file โ€” it's an SQLite3 database, because either lookup operations are significantly faster or memory requirements are significantly lower when the amount of stored IDs gets reasonably large. (that's the doc's phrasing, word for word, and yes the "either/or" is doing a little bit of a chaos ๐Ÿ’€)

If this value is a PostgreSQL Connection URI, the archive will use this PostgreSQL database as its backend instead (requires Psycopg).

Note: archive files that don't already exist get generated automatically. And to use replacement fields in a path, specify it as a list of strings (see Path+) โ€” for example [":~", ".archives", "{category}.sqlite3"].

๐Ÿ’œ extractor.*.archive-event

  • Type: string, or a list of strings
  • Default: "file"

Examples:

  • "after,skip"
  • ["after", "skip"]

Description: the event(s) for which IDs get written to an archive.

Available Events:

  • file
  • after
  • skip

โœจ extractor.*.archive-format

  • Type: Format String

Example: "{id}_{offset}"

Description: an alternative Format String to build archive IDs with. you get to make them however you want ๐ŸŽ€


๐Ÿงš extractor.*.archive-mode

  • Type: string
  • Default: "file"

Description: controls when archive IDs get written to the archive database.

  • "file" โ€” write IDs immediately after completing or skipping a file download.
  • "memory" โ€” keep IDs in memory and only write them after successful job completion.

โญ extractor.*.archive-prefix

  • Type: Format String

Default:

  • "" when archive-table is set
  • "{category}" otherwise

Description: prefix for archive IDs.


๐Ÿ“ extractor.*.archive-pragma

  • Type: list of strings

Example: ["journal_mode=WAL", "synchronous=NORMAL"]

Description: a list of SQLite PRAGMA statements to run during archive initialization.

See <https://www.sqlite.org/pragma.html#toc> for the available PRAGMA statements and further details. go read it, it's giving homework but the useful kind ๐Ÿ“š


๐ŸŒˆ extractor.*.archive-reuse

  • Type: bool
  • Default: false

Description: reuse existing archive database connections.


๐Ÿ’ซ extractor.*.archive-table

  • Type: Format String
  • Default: "archive"

Example: "{category}"

Description: a Format String selecting the archive database table name.


๐Ÿฆ‹ extractor.*.actions

  • Type: an object (pattern โ†’ Action(s)), or a list of [pattern, Action(s)] pairs

Examples:

{ "info:Logging in as .+"   : "level = debug",
  "warning:(?i)unable to .+": "exit 127",
  "error"                   : [ "status = 1", "exec notify.sh 'gdl error'", "abort" ] }
[ ["info:Logging in as .+"   , "level = debug"],
  ["warning:(?i)unable to .+", "exit 127"     ],
  ["error"                   , [ "status = 1", "exec notify.sh 'gdl error'", "abort" ]] ]

Description: perform an Action whenever a logging message gets logged that matches pattern.

pattern gets parsed as a severity level (debug, info, warning, error, or an integer value) followed by an optional Python Regular Expression, separated by a colon: <level>:<re>

Using * as the level, or just leaving it empty, matches logging messages of all levels: *:<re> or :<re> ๐Ÿ”ฅ


๐ŸŽ€ extractor.*.postprocessors

  • Type: a Postprocessor Configuration object, or a list of Postprocessor Configuration objects

Example:

[ { "name": "zip" , "compression": "store" }, { "name": "exec",
"command": ["/home/foobar/script", "{category}", "{image_id}"] } ]

Description: bestie this is the to-do list of post processors, applied to every single downloaded file, in exactly the order you wrote them. No queue-jumping. ๐Ÿ’…

Now here's the plot twist that makes this one different from literally every other option: a postprocessors setting at a deeper level does not override a postprocessors setting at a lower level. Nope. Instead, every post processor from every applicable postprocessors setting gets smooshed together into one single list. They all run. Everybody eats. ๐Ÿฝ๏ธ

Like, for example:

  • an mtime post processor at extractor.postprocessors,
  • a zip post processor at extractor.pixiv.postprocessors,
  • and using --exec

will run all three post processors โ€” mtime, zip, exec โ€” for each downloaded pixiv file. Three for the price of one, no cap. ๐Ÿ”ฅ


extractor.*.postprocessor-options

  • Type: object (name โ†’ value)

Example:

{ "archive": null, "keep-files": true }

Description: extra Postprocessor Options that get added to each individual post processor object before initializing it and evaluating filters. Little pre-game pep talk for your post processors. โœจ


extractor.*.retries

  • Type: integer
  • Default: 4

Description: the maximum number of times a failed HTTP request gets retried before it just gives up. Or set it to -1 for infinite retries, if you're feeling unhinged. ๐Ÿ˜ญ


extractor.*.retry-codes

  • Type: list of integers

Example:

[404, 429, 430]

Description: extra HTTP response status codes to retry an HTTP request on.

Heads up though:

  • 2xx codes (success responses) and 3xx codes (redirection messages) will never be retried and always count as success, regardless of this option.
  • 5xx codes (server error responses) will always be retried, regardless of this option.
So this option is really just for the weird in-between codes, iykyk. ๐Ÿซถ

extractor.*.timeout

  • Type: float
  • Default: 30.0

Description: how long (in seconds) to wait for a successful connection and response from a remote server. This value gets internally used as the timeout parameter for the requests.request() method.


extractor.*.verify

  • Type:
    • bool
    • string
  • Default: true

Description: controls whether to verify SSL/TLS certificates for HTTPS requests.

If this is a string, it must be the path to a CA bundle to use instead of the default certificates.

This value gets internally used as the verify parameter for the requests.request() method.


extractor.*.truststore

  • Type: bool
  • Default: false

Description: use a truststore SSLContext for verifying SSL/TLS certificates, so you make use of your system's native certificate stores instead of relying on certifi certificates. Letting your OS handle it. Main character energy. ๐Ÿ‘‘


extractor.*.download

  • Type: bool
  • Default: true

Description: controls whether to download media files.

Setting this to false won't download any files, but all other functions (postprocessors, download archive, etc.) will be executed as normal. So like, the vibes still happen, just no actual media. ๐Ÿฆ‹


extractor.*.fallback

  • Type: bool
  • Default: true

Description: use fallback download URLs when a download fails. Plan B is always in the group chat. ๐Ÿ’–


extractor.*.file-range

  • Type:
    • string
    • list of strings

Example:

  • "10-20"
  • "-5, 10, 30-50, 100-"
  • "10:21, 30:51:2, :5, 100:"
  • ["-5", "10", "30-50", "100-"]

Description: index range(s) selecting which files to download.

These can be specified as

  • index: 3 (file number 3)
  • range: 2-4 (files 2, 3, and 4)
  • slice: 3:8:2 (files 3, 5, and 7)

Arguments for range and slice notation are optional and will default to begin (1) or end (sys.maxsize) if omitted. For example 5-, 5:, and 5:: all mean "Start at file number 5". โœจ

Note: the index of the first file is 1. Not 0. Sorry to all the programmers in the chat. ๐Ÿ™ˆ

extractor.*.post-range

  • Type: string

Description: like file-range, but for posts. Same energy, different target. ๐ŸŽฏ


extractor.*.child-range

  • Type: string

Description: like file-range, but for child extractors handling manga chapters, external URLs, etc. The little ones get their own range too. ๐Ÿงš


extractor.*.file-filter

  • Type:
    • Condition
    • list of Conditions

Example:

  • "re.search(r'foo(bar)+', description)"
  • ["width >= 1200", "width/height > 1.2"]

Description: Python Expression controlling which files to download.

A file only gets downloaded when all of the given Expressions evaluate to True. All of them. Every single one. It's giving strict. ๐Ÿ’…

Available values are the filename-specific ones listed by -K or -j.


extractor.*.post-filter

  • Type:
    • Condition
    • list of Conditions

Example:

  • "post['id'] > 12345"
  • ["date >= datetime(2025, 5, 1)", "print(post_id)"]

Description: like file-filter, but for posts.

Available values are the directory-specific ones listed by -K or -j.


extractor.*.child-filter

  • Type:
    • Condition
    • list of Conditions

Example:

  • "lang == 'en'"
  • ["language == 'French'", "10 <= chapter < 20"]

Description: like file-filter, but for child extractors handling manga chapters, external URLs, etc.


extractor.*.file-unique

  • Type: bool
  • Default: false

Description: ignore file URLs that have been encountered before during the current extractor run. No duplicates on my watch. ๐Ÿšซ


extractor.*.child-unique

  • Type: bool
  • Default: false

Description: like file-unique, but applies to delegated URLs like manga chapters, etc.


extractor.*.date-before

  • Type: Date
  • Default: null

Example:

  • "2025-10-31"
  • "2026-01-09 15:30:00"
  • "2026-01-09T15:30:00Z"
  • 1767972600

Description: process only posts created before this Date.

Accepted values are ISO 8601 dates and Unix timestamps.


extractor.*.date-after

  • Type: Date
  • Default: null

Description: process only posts created after this Date. Stop extraction when encountering a post created before or equal to this Date.

Accepted values are ISO 8601 dates and Unix timestamps.


extractor.*.write-pages

  • Type:
    • bool
    • string
  • Default: false

Description: during data extraction, write received HTTP request data to enumerated files in the current working directory. Debugging queen behavior. ๐Ÿ”

Special Values:

  • "all" โ€” Include HTTP request and response headers. Hide Authorization, Cookie, and Set-Cookie values.
  • "ALL" โ€” Include all HTTP request and response headers.
Yes bestie, "all" and "ALL" are different and yes, the capitalization matters. It's giving case-sensitive. ๐Ÿ˜ญ

๐ŸŒˆ EXTRACTOR-SPECIFIC OPTIONS ๐ŸŒˆ

extractor.ao3.formats

  • Type:
    • string
    • list of strings
  • Default: "pdf"

Example:

  • "azw3,epub,mobi,pdf,html"
  • ["azw3", "epub", "mobi", "pdf", "html"]

Description: format(s) to download. Pick your fighter. ๐Ÿ“š


extractor.arcalive.emoticons

  • Type: bool
  • Default: false

Description: download emoticon images. The little guys. ๐Ÿฅบ


extractor.arcalive.gifs

  • Type:
    • bool
    • string
  • Default: true

Description: try to download .gif versions of .mp4 videos.

  • true | "fallback" โ€” Use the .gif version as primary URL and provide the .mp4 one as fallback.
  • "check" โ€” Check whether a .gif version is available by sending an extra HEAD request.
  • false โ€” Always download the .mp4 version.

extractor.artfight.include

  • Type:
    • string
    • list of strings
  • Default:
    • ["characters", "attacks", "defenses"]

Description: a (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • characters
  • attacks
  • defenses
Note: it is possible to use "all" instead of listing all values separately. Shortcut queen. ๐Ÿ’…

extractor.artstation.external

  • Type: bool
  • Default: false

Description: try to follow external URLs of embedded players. Venturing outside the app, bold. ๐Ÿฆ‹


extractor.artstation.max-posts

  • Type: integer
  • Default: null

Description: limit the number of posts/projects to download.


extractor.artstation.mviews

  • Type: bool
  • Default: true

Description: download .mview files.


extractor.artstation.previews

  • Type: bool
  • Default: false

Description: download embed previews.


extractor.artstation.videos

  • Type: bool
  • Default: true

Description: download video clips. ๐ŸŽฌ


extractor.artstation.search.pro-first

  • Type: bool
  • Default: true

Description: enable the "Show Studio and Pro member artwork first" checkbox when retrieving search results.


extractor.aryion.recursive

  • Type: bool
  • Default: true

Description: controls the post extraction strategy.

  • true โ€” Start on users' main gallery pages and recursively descend into subfolders
  • false โ€” Get posts from "Latest Updates" pages

extractor.bbc.width

  • Type: integer
  • Default: 1920

Description: specifies the requested image width.

This value must be divisble by 16 and gets rounded down otherwise. The maximum possible value appears to be 1920.

Yeah, "divisble" โ€” that's how it's spelled in the original, and I refuse to gaslight you about it. ๐Ÿซถ

extractor.behance.modules

  • Type: list of strings
  • Default: ["image", "video", "mediacollection", "embed"]

Description: selects which gallery modules to download from.

Supported Types:

  • "image"
  • "video"
  • "mediacollection"
  • "embed"
  • "text"

extractor.bellazon.order-posts

  • Type: string
  • Default: "desc"

Description: controls the order in which posts of a thread are processed.

  • "asc" โ€” Ascending order (oldest first)
  • "desc" | "reverse" โ€” Descending order (newest first)

extractor.bellazon.quoted

  • Type: bool
  • Default: false

Description: extract files from quoted content. The receipts count too. ๐Ÿ“Ž


extractor.bilibili.livephoto

  • Type: bool
  • Default: true

Description: download livephoto files.


extractor.[blogger].api-key

  • Type: string

Description: custom Blogger API key.

https://developers.google.com/blogger/docs/3.0/using#APIKey


extractor.[blogger].videos

  • Type: bool
  • Default: true

Description: download embedded videos hosted on https://www.blogger.com/


extractor.bluesky.api-server

Description: server address for API requests.

Can be used when self-hosting a PDS. Do it yourself era. ๐Ÿ‘‘


extractor.bluesky.include

  • Type:
    • string
    • list of strings
  • Default:
    • "posts" if reposts or quoted is enabled
    • "media" otherwise

Example:

  • "avatar,background,posts"
  • ["avatar", "background", "posts"]

Description: a (comma-separated) list of subcategories to include when processing a user profile.

so like, that last option we were hyping up? it takes a whole lil buffet of values, and here they all are in their full glory:

  • info
  • avatar
  • background
  • posts
  • replies
  • media
  • video
  • likes
Note: you do not have to type every single one out, bestie โ€” you can literally just write "all" instead of listing all the values separately. we love a shortcut around here. ๐Ÿ’…

  • extractor.bluesky.likes.endpoint โ€” which API endpoint we hit to go grab those liked posts.
    • Type: string
    • Default: "listRecords"
    • Description: "listRecords" uses the results from com.atproto.repo.listRecords. requires no login and lets you access the likes of all users, but it burns one getPostThread request per post. "getActorLikes" uses the results from app.bsky.feed.getActorLikes. requires login and only lets you access your own likes. pick your fighter ๐ŸฅŠ
  • extractor.bluesky.metadata โ€” pull extra metadata, obviously.
    • Type:
      • bool
      • string
      • list of strings
    • Default: false
    • Example:
      • "facets,user"
      • ["facets", "user"]
    • Description: the values are facets (hashtags, mentions, uris) and user (detailed user metadata for the user referenced in the input URL, via app.bsky.actor.getProfile). โœจ
  • extractor.bluesky.likes.depth โ€” sets the maximum depth of returned reply posts.
    • Type: integer
    • Default: 0
    • Description: (see the depth parameter of app.bsky.feed.getPostThread)
  • extractor.bluesky.quoted โ€” fetch media from quoted posts.
    • Type: bool
    • Default: false
  • extractor.bluesky.reposts โ€” process reposts. yes, we're going there.
    • Type: bool
    • Default: false
  • extractor.bluesky.videos โ€” download videos.
    • Type: bool
    • Default: true
  • extractor.boosty.allowed โ€” request only available posts.
    • Type: bool
    • Default: true
  • extractor.boosty.bought โ€” request only purchased posts for feed results. ๐Ÿ’ธ
    • Type: bool
    • Default: false
  • extractor.boosty.metadata โ€” provide detailed user metadata.
    • Type: bool
    • Default: false
  • extractor.boosty.videos โ€” download videos. if you hand it a list, it picks which format to try to download. it's giving quality selector.
    • Type:
      • bool
      • list of strings
    • Default: true
    • Example: ["full_hd", "high", "medium"]
    • Possible Formats:
      • ultra_hd (2160p)
      • quad_hd (1440p)
      • full_hd (1080p)
      • high (720p)
      • medium (480p)
      • low (360p)
      • lowest (240p)
      • tiny (144p)
  • extractor.booth.strategy โ€” selects how to handle and extract file URLs.
    • Type: string
    • Default: "webpage"
    • Description: "webpage" retrieves the full HTML page and extracts file URLs from it. "fallback" uses fallback URLs to guess each file's correct filename extension.
  • extractor.bunkr.endpoint โ€” the API endpoint for retrieving file URLs.
    • Type: string
    • Default: "/api/_001_v2"
  • extractor.bunkr.tlds โ€” controls which bunkr TLDs to accept.
    • Type: bool
    • Default: false
    • Description:
      • true โ€” match URLs with all possible TLDs (e.g. bunkr.xyz or bunkrrr.duck)
      • false โ€” match only URLs with known TLDs
  • extractor.[chevereto].password โ€” password value(s) used to access protected albums. ๐Ÿ”’
    • Type:
      • string
      • list of strings
    • Default: null
    • Example:
      • pw1,pw2,foobar
      • ["pw1", "pw2", "foobar"]
  • extractor.cien.files โ€” decides the type and order of files to download.
    • Type: list of strings
    • Default: ["image", "video", "download", "gallery"]
    • Available Types:
      • image
      • video
      • cover
      • download
      • gallery
  • extractor.civitai.api โ€” selects which API endpoints to use.
    • Type: string
    • Default: "trpc"
    • Description: "rest" is the public REST API. "trpc" is the internal tRPC API.
  • extractor.civitai.api-key โ€” the API Key value generated in your User Account Settings, used to make authorized API requests.
    • Type: string
    • Description: see API/Authorization for details. ๐Ÿ”‘
  • extractor.civitai.files โ€” determines the type and order of files to download when processing models.
    • Type: list of strings
    • Default: ["image"]
    • Available Types:
      • model
      • image
      • gallery
  • extractor.civitai.include โ€” a (comma-separated) list of subcategories to include when processing a user profile.
    • Type:
      • string
      • list of strings
    • Default: ["user-images", "user-videos"]
    • Supported Values:
      • user-models
      • user-posts
      • user-images
      • user-videos
      • user-collections
    • Note: you can use "all" instead of listing all the values separately. ๐Ÿ’ซ and if you want a more complete set of metadata like model['name'] and post['title'], include user-models and user-posts along with the default user-images and user-videos:
["user-models", "user-posts", "user-images", "user-videos"]
  • extractor.civitai.metadata โ€” extract additional metadata.
    • Type:
      • bool
      • string
      • list of strings
    • Default: false
    • Example:
      • "generation,tags,post,version"
      • ["version", "generation"]
    • Supported Values:
      • generation
      • post
      • tags
      • version
    • Note: this requires 1 additional API request for each selected value, per image or video. so like, budget accordingly bestie ๐Ÿ˜ญ
  • extractor.civitai.nsfw โ€” download NSFW-rated images. ๐Ÿ‘€
    • Type:
      • bool
      • string ("api": "rest")
      • integer ("api": "trpc")
    • Default: true
    • Description:
      • for "api": "rest", this can be one of "None", "Soft", "Mature", "X" to set the highest returned mature content flag.
      • for "api": "trpc", this can be an integer whose bits select the returned mature content flags. for example, 28 (4816) would return only R, X, and XXX rated images, while 3 (1|2) would return only None and Soft rated images.
    • Note: requires api-key or authenticated cookies to allow NSFW content.
  • extractor.civitai.period โ€” sets the period parameter when paginating over results.
    • Type: string
    • Default: "AllTime"
    • Supported Values:
      • "AllTime"
      • "Year"
      • "Month"
      • "Week"
      • "Day"
  • extractor.civitai.sort โ€” sets the sort parameter when paginating over results.
    • Type: string
    • Default: "Newest"
    • Supported Values:
      • "Newest"
      • "Oldest"
      • "Most Reactions"
      • "Most Comments"
      • "Most Collected"
    • Special Values: "asc" for ascending order ("Oldest"), and "desc" | "reverse" for descending order ("Newest").
  • extractor.civitai.quality โ€” a (comma-separated) list of image quality options to pass with every image URL.
    • Type:
      • string
      • list of strings
    • Default: "original=true"
    • Example:
      • "width=1280,quality=90"
      • ["width=1280", "quality=90"]
    • Description: known available options include original, quality, width.
    • Note: set this option to an arbitrary letter, e.g. "w", to download images in JPEG format at their original resolution. sneaky but iconic. ๐Ÿ’…
  • extractor.civitai.quality-videos โ€” a (comma-separated) list of video quality options to pass with every video URL.
    • Type:
      • string
      • list of strings
    • Default: "original"
    • Example:
      • "+transcode=true,quality=100"
      • ["+", "transcode=true", "quality=100"]
    • Description: known available options include original, quality, transcode. use + as the first character to add the given options to the quality ones.
  • extractor.civitai.quality-fallback โ€” video quality options to pass with video fallback URLs.
    • Type: string
    • Default: "transcode=true,original=true,quality=100"
  • extractor.civitai.search-images.token โ€” authorization header value used for /multi-search queries. ๐ŸŽซ
    • Type: string
    • Default: "8c46eb2508e21db1e9828a97968d91ab1ca1caa5f70a00e88a2ba1e286603b61"
  • extractor.coomer.files โ€” determines the type and order of files to be downloaded.
    • Type: list of strings
    • Default: ["file", "attachments", "inline"]
    • Available Types:
      • file
      • attachments
      • inline
  • extractor.clonr.zip โ€” download folder content as a single ZIP archive instead of individual files. ๐Ÿ“ฆ
    • Type: bool
    • Default: false
  • extractor.cosmos.format โ€” selects the file type of downloaded images.
    • Type:
      • string
    • Default: "jpeg"
    • Example: "avif"
  • extractor.cyberdrop.domain โ€” specifies the domain used by cyberdrop, regardless of the input URL.
    • Type: string
    • Default: null
    • Example: "cyberdrop.to"
    • Description: setting this option to "auto" uses the same domain as a given input URL.
  • extractor.cyberfile.password โ€” password value used to access protected files and folders.
    • Type: string
    • Default: ""
    • Description: leave this value empty or undefined to be interactively prompted for a password when needed (see getpass()).
  • extractor.cyberfile.recursive โ€” recursively download files from subfolders. ๐ŸŒ€
    • Type: bool
    • Default: true
  • extractor.[Danbooru].external โ€” for unavailable or restricted posts, follow the source and download from there if possible.
    • Type: bool
    • Default: false
  • extractor.[Danbooru].favgroup.order-posts โ€” controls the order in which pool/favgroup posts are returned.
    • Type: string
    • Default: "pool"
    • Description:
      • "pool" "pool_asc" "asc" "asc_pool" โ€” pool order
      • "pool_desc" "desc_pool" "desc" โ€” reverse pool order
      • "id" "id_desc" "desc_id" โ€” descending Post ID order
      • "id_asc" "asc_id" โ€” ascending Post ID order
  • extractor.[Danbooru].ugoira โ€” controls the download target for Ugoira posts.
    • Type: bool
    • Default: false
    • Description:
      • true โ€” ZIP archives
      • false โ€” converted video files
  • extractor.[Danbooru].metadata โ€” extract additional metadata (notes, artist commentary, parent, children, uploader). ๐ŸŽ€
    • Type:
      • bool
      • string
      • list of strings
    • Default: false
    • Example:
      • "replacements,comments,ai_tags"
      • ["replacements", "comments", "ai_tags"]

It is possible to specify a custom list of metadata includes ๐Ÿ’ซ โ€” check available_includes for the possible field names. and bestie, aibooru also supports ai_metadata.

Note: this costs you 1 additional HTTP request per 200-post batch. so yeah, budget accordingly ๐Ÿซถ

extractor.[Danbooru].threshold

Type:

  • string
  • integer

Default: "auto"

Description: Stop paginating over API results if the length of a batch of returned posts is less than the specified number. It defaults to the per-page limit of the current instance, which is 200.

Note: Changing this setting is normally not necessary. If the value is greater than the per-page limit, gallery-dl will stop after the very first batch. And the value can never be less than 1.


extractor.dankefuerslesen.zip

Type: bool

Default: false

Description: Download every chapter as a single ZIP archive instead of one image per image. cute little bundle โœจ


extractor.deviantart.auto-watch

Type: bool

Default: false

Description: Automatically watch users when you run into "Watchers-Only Deviations" (requires a refresh-token). ๐Ÿ‘€


extractor.deviantart.auto-unwatch

Type: bool

Default: false

Description: After watching someone through auto-watch, unwatch that user at the end of the current extractor run. ghosting, but make it configurable ๐Ÿ’…


extractor.deviantart.comments

Type: bool

Default: false

Description: Extract comments metadata.


extractor.deviantart.comments-avatars

Type: bool

Default: false

Description: Download the avatar of everyone who commented.

Note: enabling this option also enables deviantart.comments_.

extractor.deviantart.extra

Type: bool

Default: false

Description: Download extra Sta.sh resources found in description texts and journals.

Note: enabling this option also enables deviantart.metadata_.

extractor.deviantart.flat

Type: bool

Default: true

Description: Selects the directory structure created by the Gallery- and Favorite-Extractors.

  • true โ€” use a flat directory structure.
  • false โ€” collect a list of all gallery folders or favorites collections and hand off any further work to other extractors (folder or collection), which will then create individual subdirectories for each of them.
Note: going through all gallery folders won't fetch deviations that aren't in any folder. so like, no folder = no vibe ๐Ÿ˜ญ

extractor.deviantart.folders

Type: bool

Default: false

Description: Provide a folders metadata field that contains the names of all the folders a deviation is present in.

Note: gathering this info requires a lot of API calls. use with caution โš ๏ธ

extractor.deviantart.group

Type:

  • bool
  • string

Default: true

Description: Check whether the profile name in a given URL belongs to a group or to a regular user.

When disabled, assume every given profile name belongs to a regular user.

Special Values:

  • "skip" โ€” skip groups

extractor.deviantart.include

Type:

  • string
  • list of strings

Default: "gallery"

Example:

  • "favorite,journal,scraps"
  • ["favorite", "journal", "scraps"]

Description: A (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • avatar
  • background
  • gallery
  • scraps
  • journal
  • favorite
  • status
Note: you can use "all" instead of listing every value separately. slay โœจ

extractor.deviantart.intermediary

Type: bool

Default: true

Description: For older, non-downloadable images, download a higher-quality /intermediary/ version instead.


extractor.deviantart.journals

Type: string

Default: "html"

Description: Selects the output format for textual content. This includes journals, literature and status updates.

  • "html" โ€” HTML with (roughly) the same layout as on DeviantArt.
  • "text" โ€” plain text with image references and HTML tags removed.
  • "none" โ€” don't download textual content at all.

extractor.deviantart.mature

Type: bool

Default: true

Description: Enable mature content.

This option simply sets the mature_content parameter for API calls to either "true" or "false" and does not do any other form of content filtering. it's literally just flipping the flag, bestie ๐Ÿซฃ


extractor.deviantart.metadata

Type:

  • bool
  • string
  • list of strings

Default: false

Example:

  • "stats,submission"
  • ["camera", "stats", "submission"]

Description: Extract additional metadata for deviation objects.

Provides description, tags, license, and is_watching fields when enabled.

It is possible to request extended metadata by specifying a list of:

  • camera โ€” EXIF information, if available
  • stats โ€” deviation statistics
  • submission โ€” submission information
  • collection โ€” favourited folder information (requires a refresh token)
  • gallery โ€” gallery folder information (requires a refresh token)
Note: set this option to "all" to request every extended metadata category.

See /deviation/metadata for official documentation.


extractor.deviantart.original

Type:

  • bool
  • string

Default: false

Description: Download original files if available.

Setting this option to "images" only downloads original files if they're images, and falls back to preview versions for everything else (archives, videos, etc.).

Note:

https://www.deviantart.com/team/status-update/An-adjustments-being-made-to-1307747979

The New Weekly Limits: Non-Core & Core Basic: 10 downloads per week Core+ and higher : 150 downloads per week

extractor.deviantart.pagination

Type: string

Default: "api"

Description: Controls when to stop paginating over API results.

  • "api" โ€” trust the API and stop when has_more is false.
  • "manual" โ€” disregard has_more and only stop when a batch of results is empty.

extractor.deviantart.previews

Type: bool

Default: false

Description: For non-image files (archives, videos, etc.), also download the file's preview image.

Set this option to "all" to download previews for all files.


extractor.deviantart.public

Type: bool

Default: true

Description: Use a public access token for API requests.

Disable this option to force using a private token for all requests when a refresh token is provided.


extractor.deviantart.quality

Type:

  • integer
  • string

Default: 100

Description: JPEG quality level for images where an original file download isn't available.

Set this to "png" to download a PNG version of these images instead.


extractor.deviantart.refresh-token

Type: string

Default: null

Description: The refresh-token value you get from linking your DeviantArt account to gallery-dl.

Using a refresh-token lets you access private or otherwise not publicly available deviations. ๐Ÿ”

Note: the refresh-token becomes invalid after 3 months, or whenever your cache file is deleted or cleared.

extractor.deviantart.wait-min

Type: integer

Default: 0

Description: Minimum wait time in seconds before API requests.


extractor.deviantart.avatar.formats

Type: list of strings

Example: ["original.jpg", "big.jpg", "big.gif", ".png"]

Description: Avatar URL formats to return.

Each format is parsed as SIZE.EXT.

Leave SIZE empty to download the regular, small avatar format.

Note: consider updating archive-format for avatar results to "a_{_username}_{index}{title[6:]}.{extension}" or similar when using an archive, so you can actually handle the different formats ๐Ÿ’–

extractor.deviantart.folder.subfolders

Type: bool

Default: true

Description: Also extract subfolder content.


Type:

  • object (pattern โ†’ replacement)
  • list of [pattern, replacement] pairs

Example:

{ "/foo" : "/bar/baz", "([?&])dl=0\\b": "\\1dl=1" }

[ ["/foo" , "/bar/baz"], ["([?&])dl=0\\b": "\\1dl=1"] ]

Description: Transform URLs by substituting all matching patterns with their respective replacements using re.sub().


extractor.discord.embeds

Type: list of strings

Default: ["image", "gifv", "video"]

Description: Selects which embed types to download from.

Supported embed types are image, gifv, video, rich, article, link.


extractor.discord.threads

Type: bool

Default: true

Description: Extract threads from Discord text channels. ๐Ÿงต


extractor.discord.token

Type: string

Description: Discord Bot Token for API requests.

You can follow this guide to get a token.


extractor.dynastyscans.anthology.metadata

Type: bool

Default: false

Description: Extract alert, description, and status metadata from an anthology's HTML page.


extractor.[E621].metadata

Type:

  • bool
  • string
  • list of strings

Default: false

Example:

  • "notes,pools"
  • ["notes", "pools"]

Description: Extract additional metadata (notes, pool metadata) if available.

Note: this requires 0-2 additional HTTP requests per post.

extractor.[E621].threshold

Type:

  • string
  • integer

Default: "auto"

Description: Stop paginating over API results if the length of a batch of returned posts is less than the specified number. Defaults to the per-page limit of the current instance, which is 320.

Note: changing this setting is normally not necessary. When the value is greater than the per-page limit, gallery-dl will stop after the first batch. The value cannot be less than 1.

extractor.erome.user.reposts

Type: bool

Default: false

Description: Include reposts when extracting albums from a user profile.


extractor.exhentai.domain

Type: string

Default: "auto"

Description:

  • "auto" โ€” use e-hentai.org or exhentai.org depending on the input URL
  • "e-hentai.org" โ€” use e-hentai.org for all URLs
  • "exhentai.org" โ€” use exhentai.org for all URLs

extractor.exhentai.fallback-retries

Type: integer

Default: 2

Description: Number of times a failed image gets retried, or -1 for infinite retries. bestie said never give up ๐Ÿ’€โœจ

extractor.exhentai.fav ๐Ÿ’–

  • Type: string
  • Example:
"4"
  • Description: once a gallery is done downloading, this drops it into your account's favorites under whatever category number you put here. bestie bookmarking service fr.
  • Note: set this to "favdel" and it removes galleries from your favorites instead.
Heads up diva ๐Ÿ’€ applying this to galleries that are already favorited will wipe out any Favorite Notes. no takebacks.

extractor.exhentai.gp โœจ

  • Type: string
  • Default: "resized"
  • Description: tells gallery-dl what to do when it hits a "you do not have enough GP" error.
    • "resized" โ€” keep going, just download the non-original images.
    • "stop" โ€” halt the current extractor run.
    • "wait" โ€” pause and wait for user input before retrying the current image.

extractor.exhentai.limits ๐ŸŒธ

  • Type: integer
  • Default: null
  • Description: set your own custom image download limit, and it'll run limits-action once that limit gets exceeded. iconic little guardrail.

extractor.exhentai.limits-action ๐ŸŽ€

  • Type: string
  • Default: "stop"
  • Description: what to actually do once the image limit is blown past.
    • "stop" โ€” stop the current extractor run.
    • "wait" โ€” wait for user input.
    • "reset" โ€” spend GP to reset your account's image limits. ๐Ÿ’ธ

extractor.exhentai.metadata ๐Ÿ’…

  • Type: bool
  • Default: false
  • Description: pulls extended gallery metadata straight from the API.
    • adds archiver_key, posted, and torrents
    • provides exact date and filesize (not the vague vibes version)

extractor.exhentai.original ๐Ÿ‘‘

  • Type: bool
  • Default: true
  • Description: download the full-sized original images if they're available. main character resolution only.

extractor.exhentai.source ๐Ÿฆ‹

  • Type: string
  • Default: "gallery"
  • Description: picks an alternative source to grab files from.
    • "hitomi" โ€” download the corresponding gallery from hitomi.la
    • "metadata" โ€” load only a gallery's metadata from the API
    • "torrent" โ€” download a gallery's .torrent files

extractor.exhentai.tags ๐ŸŒˆ

  • Type: bool
  • Default: true
  • Description: groups tags by type and hands them over as tags_<type> metadata fields โ€” like tags_artist or tags_character. organized queen behavior.

extractor.facebook.author-followups ๐Ÿ’œ

  • Type: bool
  • Default: false
  • Description: extracts comments that include photo attachments made by the author of the post.

extractor.facebook.fallback-retries โญ

  • Type: integer
  • Default: 2
  • Description: how many times empty pages get retried. set it to -1 for infinite retries, if you truly have that kind of patience ๐Ÿซถ

extractor.facebook.include ๐Ÿ“

  • Type:
    • string
    • list of strings
  • Default: "photos"
  • Example:
    • "avatar,photos"
    • ["avatar", "photos"]
  • Description: a (comma-separated) list of subcategories to include when processing a user profile.
  • Supported Values:
    • info
    • avatar
    • photos
    • albums
  • Note: you can literally just write "all" instead of listing every single value separately. lazy girl slay.

extractor.facebook.loop ๐Ÿงš

  • Type: bool
  • Default: true
  • Description: keeps going when it detects a possible jump back to a set's beginning.

extractor.facebook.videos ๐Ÿ”ฅ

  • Type:
    • bool
    • string
  • Default: true
  • Description: controls video download behavior.
    • true โ€” extract and download video & audio separately.
    • "ytdl" โ€” let ytdl handle video extraction and download, and merge video & audio streams.
    • false โ€” ignore videos.

extractor.fanbox.comments ๐Ÿ’–

  • Type: bool
  • Default: false
  • Description: extracts comments metadata.
  • Note: this requires 1 or more additional API requests per post, depending on how many comments there are. so, y'know, be chill about it.

extractor.fanbox.embeds โœจ

  • Type:
    • bool
    • string
  • Default: true
  • Description: controls behavior on embedded content from external sites.
    • true โ€” extract embed URLs and download them if supported (videos are not downloaded).
    • "ytdl" โ€” like true, but let ytdl handle video extraction and download for YouTube, Vimeo, and SoundCloud embeds.
    • false โ€” ignore embeds.

extractor.fanbox.fee-min ๐ŸŒธ

  • Type: integer
  • Description: do not request API data or extract files from posts that require a fee (feeRequired) less than the specified amount.

extractor.fanbox.fee-max ๐ŸŽ€

  • Type: integer
  • Description: do not request API data or extract files from posts that require a fee (feeRequired) greater than the specified amount.

extractor.fanbox.metadata ๐Ÿ’…

  • Type:
    • bool
    • string
    • list of strings
  • Default: false
  • Example:
    • user,plan,comments
    • ["user", "plan", "comments"]
  • Description: extracts plan and extended user metadata.
  • Supported Fields:
    • comments
    • plan
    • user
  • Note: comments can also be enabled via fanbox.comments

extractor.fanbox.creator.offset ๐Ÿ‘‘

  • Type: integer
  • Default: 0
  • Description: a custom offset starting value for when it paginates over posts.

extractor.fansly.formats ๐Ÿฆ‹

  • Type: list of integers
  • Default: null
  • Example:
[1, 2, 3, 4, 302, 303]
  • Description: the list of file formats to consider during format selection.

extractor.fansly.previews ๐ŸŒˆ

  • Type: bool
  • Default: true
  • Description: downloads previews if no other format is available. leftovers never looked so good.

extractor.fansly.token ๐Ÿ’œ

  • Type: string
  • Example:
"kX7pL9qW3zT2rY8mB5nJ4vC6xF1tA0hD8uE2wG9yR3sQ7iZ4oM5jN6cP8lV0bK2tU9aL1eW"

extractor.fantia.text โญ

  • Type: bool
  • Default: true
  • Description: downloads the content of text-only posts.

extractor.filester.domain ๐Ÿ“

  • Type: string
  • Default: "filester.me"
  • Description: specifies the domain used by filester extractors.

setting this option to "auto" uses the same domain as a given input URL.


extractor.flickr.access-token & .access-token-secret ๐Ÿงš

  • Type: string
  • Default: null
  • Description: the access_token and access_token_secret values you get from linking your Flickr account to gallery-dl.

extractor.flickr.contexts ๐Ÿ”ฅ

  • Type: bool
  • Default: false
  • Description: for each photo, returns the albums and pools it belongs to as set and pool metadata.
  • Note: this requires 1 additional API call per photo. see flickr.photos.getAllContexts for details.

extractor.flickr.exif ๐Ÿ’–

  • Type: bool
  • Default: false
  • Description: for each photo, returns its EXIF/TIFF/GPS tags as exif and camera metadata.
  • Note: this requires 1 additional API call per photo. see flickr.photos.getExif for details.

extractor.flickr.info โœจ

  • Type: bool
  • Default: false
  • Description: for each photo, retrieves its "full" metadata as provided by flickr.photos.getInfo
  • Note: this requires 1 additional API call per photo.

extractor.flickr.metadata ๐ŸŒธ

  • Type:
    • bool
    • string
    • list of strings
  • Default: false
  • Example:
    • license,last_update,machine_tags
    • ["license", "last_update", "machine_tags"]
  • Description: extracts additional metadata (license, date_taken, original_format, last_update, geo, machine_tags, o_dims)

you can also specify a custom list of metadata includes โ€” see the extras parameter in Flickr's API docs for possible field names.


extractor.flickr.profile ๐ŸŽ€

  • Type: bool
  • Default: false
  • Description: extracts additional user profile metadata.
  • Note: this requires 1 additional API call per user profile. see flickr.people.getInfo for details.

extractor.flickr.size-max ๐Ÿ’…

  • Type:
    • integer
    • string
  • Default: null
  • Description: sets the maximum allowed size for downloaded images.
    • if this is an integer, it specifies the maximum image dimension (width and height) in pixels.
    • if this is a string, it should be one of Flickr's format specifiers ("Original", "Large", ... or "o", "k", "h", "l", ...) to use as an upper limit.

extractor.flickr.videos ๐Ÿ‘‘

  • Type: bool
  • Default: true
  • Description: extract and download videos.

extractor.flickr.urls ๐Ÿฆ‹


extractor.foriio.audio ๐ŸŒˆ

  • Type: bool
  • Default: true
  • Description: downloads embedded audio files using ytdl in sound works

extractor.foriio.external ๐Ÿ’œ

  • Type: bool
  • Default: true
  • Description: follow external URLs in web_article works

extractor.foriio.user.posts โญ

  • Type:
    • string
    • list of strings
  • Default: null
  • Example:
    • "image,video,sound"
    • ["web_article", "copy_writing"]
  • Description: only process works of the given types.

extractor.foriio.previews ๐Ÿ“

  • Type: bool
  • Default: false
  • Description: downloads preview images of embedded media.

extractor.foriio.videos ๐Ÿงš

  • Type: bool
  • Default: true
  • Description: downloads embedded (YouTube) videos using ytdl in video works

extractor.furaffinity.comments ๐Ÿ”ฅ

  • Type: string
  • Default: "text"
  • Description: controls the format of text entries in comments metadata fields.
    • "text" โ€” plain text with HTML tags removed
    • "html" โ€” raw HTML content

extractor.furaffinity.descriptions ๐Ÿ’–

  • Type: string
  • Default: "text"
  • Description: controls the format of description metadata fields.
    • "text" โ€” plain text with HTML tags removed
    • "html" โ€” raw HTML content

extractor.furaffinity.external โœจ

  • Type: bool
  • Default: false
  • Description: follow external URLs linked in descriptions.

extractor.furaffinity.include ๐ŸŒธ

  • Type:
    • string
    • list of strings
  • Default: "gallery"
  • Example:
    • "scraps,favorite"
    • ["scraps", "favorite"]
  • Description: a (comma-separated) list of subcategories to include when processing a user profile.
  • Supported Values:
    • gallery
    • scraps
    • favorite
    • journals
  • Note: it is possible to use "all" instead of listing all values separately.

extractor.furaffinity.layout ๐ŸŽ€

  • Type: string
  • Default: "auto"
  • Description: selects which site layout to expect when parsing posts.
    • "auto" โ€” automatically differentiate between "old" and "new"
    • "old" โ€” expect the old site layout
    • "new" โ€” expect the new site layout

extractor.gelbooru.api-key & .user-id ๐Ÿ’…

  • Type: string
  • Default: null
  • Description: Values from the API Access Credentials section found at the bottom of your account's Options page. ๐Ÿ’–

  • extractor.gelbooru.favorite.order-posts โ€” decides what order your favorited posts come back in ๐ŸŽ€
    • Type: string
    • Default: "desc"
    • Description: okay so this one controls the order in which favorited posts are returned, bestie.
      • "asc" Ascending favorite date order (oldest first)
      • "desc" | "reverse" Descending favorite date order (newest first)
  • extractor.generic.enabled โ€” the catch-all gremlin switch โœจ
    • Type: bool
    • Default: false
    • Description: Match all URLs not otherwise supported by gallery-dl, even ones without a generic: prefix. it's giving "I'll take anything" energy ngl.
  • extractor.gofile.api-token โ€” your gofile badge of honor ๐Ÿ”‘
    • Type: string
    • Default: null
    • Description: API token value found at the bottom of your profile page.
    • If not set, a temporary guest token will be used. lowkey fine, but guest vibes only.
  • extractor.gofile.website-token โ€” the token that keeps the API happy ๐Ÿซถ
    • Type: string
    • Description: API token value used during API requests.
    • An invalid or not up-to-date value will result in 401 Unauthorized errors. ๐Ÿ’€ not cute.
    • Keeping this option unset will use an extra HTTP request to attempt to fetch the current value used by gofile. so like, unset = one more request but it stays fresh.
  • extractor.gofile.recursive โ€” subfolder expedition ๐ŸŒธ
    • Type: bool
    • Default: true
    • Description: Recursively download files from subfolders. yes queen, dig deep.
  • extractor.gofile.salt โ€” extra seasoning ๐Ÿง‚
    • Type: string
    • Description: Alternate salt value used during website token generation.

  • extractor.hdoujin.cbz โ€” one gallery, one file, so tidy ๐ŸŽ€
    • Type: bool
    • Default: false
    • Description: Download each gallery as a single .cbz file.
    • Note: Requires a token โš ๏ธ
  • extractor.hdoujin.crt โ€” the mystery query param ๐Ÿ”
    • Type: string
    • Example:
      • "0542daa9-352c-4fd5-a497-6c6d5cf07423"
      • "/12345/a1b2c3d4e5f6?crt=0542daa9-352c-4fd5-a497-6c6d5cf07423"
    • Description: The crt query parameter value sent when fetching gallery data.
    • To get this value:
      1. Open your browser's Developer Tools (F12)
      2. Select Network โ†’ XHR
      3. Open a gallery page
      4. Select the last Network entry and copy its crt value
    • Note: You will also need your browser's user-agent ๐Ÿซ  don't forget bestie.
  • extractor.hdoujin.format โ€” pick your resolution era โœจ
    • Type:
      • string
      • list of strings
    • Default: ["0", "1600", "1280", "980", "780"]
    • Description: Name(s) of the image format to download.
    • When more than one format is given, the first available one is selected. first come, first served ๐Ÿ’…
    • Possible formats are "780", "980", "1280", "1600", "0" (original).
  • extractor.hdoujin.tags โ€” tags but make them organized ๐ŸŒˆ
    • Type: bool
    • Default: false
    • Description: Group tags by type and provide them as tags_<type> metadata fields, for example tags_artist or tags_character.
  • extractor.hdoujin.token โ€” the golden ticket ๐Ÿ‘‘
    • Type: string
    • Example:
      • "3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"
      • "Bearer 3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"
      • "Authorization: Bearer 3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"
    • Description: Authorization header value used for requests to https://api.hdoujin.org to access favorite galleries or download .cbz archives.

  • extractor.hentaifoundry.descriptions โ€” how do we want the lore formatted ๐Ÿ“
    • Type: string
    • Default: "text"
    • Description: Controls the format of description metadata fields.
      • "text" Plain text with HTML tags removed
      • "html" Raw HTML content
  • extractor.hentaifoundry.include โ€” choose your subcategories ๐Ÿฆ‹
    • Type:
      • string
      • list of strings
    • Default: "pictures"
    • Example:
      • "scraps,stories"
      • ["scraps", "stories"]
    • Description: A (comma-separated) list of subcategories to include when processing a user profile.
    • Supported Values:
      • pictures
      • scraps
      • stories
      • favorite
    • Note: It is possible to use "all" instead of listing all values separately. shortcut queen ๐Ÿ’…
  • extractor.hitomi.format โ€” webp girlie or avif girlie? ๐ŸŒธ
    • Type: string
    • Default: "webp"
    • Description: Selects which image format to download.
    • Available Formats:
      • "webp"
      • "avif"

  • extractor.imagechest.access-token โ€” your personal hall pass ๐ŸŽŸ๏ธ
    • Type: string
    • Description: Your personal Image Chest access token.
    • These tokens allow using the API instead of having to scrape HTML pages, providing more detailed metadata. (date, description, etc)
    • See https://imgchest.com/docs/api/1.0/general/authorization for instructions on how to generate such a token. go read it bestie, it's giving tutorial energy ๐Ÿ“š
  • extractor.imgur.client-id โ€” custom ID moment โœจ
    • Type: string
    • Description: Custom Client ID value for API requests.
  • extractor.imgur.mp4 โ€” gif or mp4, the eternal question ๐ŸŽฌ
    • Type:
      • bool
      • string
    • Default: true
    • Description: Controls whether to choose the GIF or MP4 version of an animation.
      • true Follow Imgur's advice and choose MP4 if the prefer_video flag in an image's metadata is set.
      • false Always choose GIF.
      • "always" Always choose MP4.
  • extractor.inkbunny.orderby โ€” sorting the search results ๐Ÿ’ซ
    • Type: string
    • Default: "create_datetime"
    • Description: Value of the orderby parameter for submission searches.
    • (See API#Search for details)

๐Ÿฆ‹ extractor.instagram (the big one, buckle up)

  • extractor.instagram.audio โ€” sound on or sound off ๐Ÿ”Š
    • Type:
      • bool
      • string
    • Default: false
    • Description: Controls audio download behavior.
      • true | "dash" | "ytdl" Download audio from dash_manifest data using ytdl when available and a non-DASH format otherwise
      • "merged" Download non-DASH formats
      • false Do not download audio files
  • extractor.instagram.cursor โ€” where do we even start ๐ŸŒ€
    • Type:
      • bool
      • string
    • Default: true
    • Example: "3414259811154179155_25025320"
    • Description: Controls from which position to start the extraction process from.
      • true Start from the beginning. Log the most recent cursor value when interrupted before reaching the end.
      • false Start from the beginning.
      • any string Start from the position defined by this value.
  • extractor.instagram.include โ€” the subcategory menu ๐Ÿฝ๏ธ
    • Type:
      • string
      • list of strings
    • Default: "posts"
    • Example:
      • "stories,highlights,posts"
      • ["stories", "highlights", "posts"]
    • Description: A (comma-separated) list of subcategories to include when processing a user profile.
    • Supported Values:
      • posts
      • reels
      • tagged
      • stories
      • highlights
      • info
      • avatar
    • Note: It is possible to use "all" instead of listing all values separately. ๐Ÿ’…
  • extractor.instagram.max-posts โ€” cap it off ๐Ÿ”ข
    • Type: integer
    • Default: null
    • Description: Limit the number of posts to download.
  • extractor.instagram.metadata โ€” extra lore, but only by ID ๐ŸŒŸ
    • Type: bool
    • Default: false
    • Description: Provide extended user metadata even when referring to a user by ID, e.g. instagram.com/id:12345678.
    • Note: This metadata is always available when referring to a user by name, e.g. instagram.com/USERNAME.
  • extractor.instagram.order-files โ€” order of the files inside one post ๐Ÿ“
    • Type: string
    • Default: "asc"
    • Description: Controls the order in which files of each post are returned.
      • "asc" Same order as displayed in a post
      • "desc" | "reverse" Reverse order as displayed in a post
    • Note: This option does not affect {num}. To enumerate files in reverse order, use count - num + 1. ๐Ÿง  write that down.
  • extractor.instagram.order-posts โ€” order of the posts themselves ๐Ÿ“Š
    • Type: string
    • Default: "asc"
    • Description: Controls the order in which posts are returned.
      • "asc" Same order as displayed
      • "desc" | "reverse" Reverse order as displayed
      • "id" or "id_asc" Ascending order by ID
      • "id_desc" Descending order by ID
    • Note: This option only affects highlights. ๐Ÿ‘€ yes only highlights, don't @ me.
  • extractor.instagram.pinned โ€” pinned posts stay winning ๐Ÿ“Œ
    • Type: bool
    • Default: true
    • Description: Process pinned posts.
  • extractor.instagram.previews โ€” the little teasers ๐ŸŽž๏ธ
    • Type:
      • bool
      • string
      • list of strings
    • Default: false
    • Example:
      • "video"
      • ["audio", "video"]
    • Description: Download video previews and audio covers.
  • extractor.instagram.static-videos โ€” fake videos from real photos ๐Ÿ™ˆ
    • Type: bool
    • Default: true
    • Description: Download static story/highlight "videos" generated from a photo.
    • Disabling this option downloads the photo version instead.
  • extractor.instagram.user-cache โ€” where do we stash the user data ๐Ÿ—„๏ธ
    • Type:
      • bool
      • string
    • Default: "disk"
    • Example: "disk:86400"
    • Description: Selects how to cache user profile data.
      • true | "disk" Cache user data on disk
      • "disk:EXP" Cache user data on disk. Refresh cache entry after EXP seconds.
      • false | "memory" Cache user data in memory
  • extractor.instagram.user-strategy โ€” the strategy lineup ๐ŸŽฏ
    • Type:
      • string
      • list of strings
    • Default: ["search", "web"]
    • Example:
      • "web,info,search"
      • ["web", "info", "search"]
    • Description: Selects how to retrieve user IDs and profile data.
      • "search" | "topsearch" Use topsearch API results
      • "info" | "web_profile_info" Use web_profile_info API results (high likelihood of 429 Too Many Requests errors) ๐Ÿ˜ญ yeah that one's risky
      • "web" | "webpage" Extract minimal user information from profile webpage
  • extractor.instagram.videos โ€” video download behavior, part two ๐ŸŽฅ
    • Type:
      • bool
      • string
    • Default: true
    • Description: Controls video download behavior.
      • true | "dash" | "ytdl" Download videos from video_dash_manifest data using ytdl
      • "merged" Download pre-merged video formats
      • false Do not download videos
  • extractor.instagram.warn-images โ€” the "bestie this is small" warning ๐Ÿšจ
    • Type:
      • bool
      • string
    • Default: true
    • Description: Show a warning when downloading images with a resolution smaller than the original.
      • true Show a warning when at least one dimension is smaller than the reported original resolution
      • "all" | "both" Show a warning only when both width and height are smaller than the reported original resolution
      • false Do not show a warning
  • extractor.instagram.warn-videos โ€” the video quality heads-up โš ๏ธ
    • Type: bool
    • Default: true
    • Description: Show a warning when downloading videos with a User-Agent header causing potentially lowered video quality.
  • extractor.instagram.wd โ€” the cookie situation ๐Ÿช
    • Type:
      • bool
      • string
    • Default: false
    • Description: Controls how to handle wd cookies, which possibly limit the dimensions of returned photos.
      • true Keep wd cookie
      • false Unset/delete wd cookie
      • any string Set wd cookie to this value
  • extractor.instagram.stories.split โ€” one story element per post, periodt ๐Ÿ’…
    • Type:
      • bool
    • Default: false
    • Description: Split stories elements into separate posts.

  • extractor.itaku.include โ€” pick your subcategories, itaku edition ๐ŸŽ€
    • Type:
      • string
      • list of strings
    • Default: "gallery"
    • Example:
      • "stars,gallery"
      • ["stars", "gallery"]

Description: a (comma-separated) list of subcategories to include when you're processing a user profile. bestie it's a lil checklist okay ๐Ÿ’…

Supported Values:

  • gallery
  • posts
  • followers
  • following
  • stars
Note: you can literally just write "all" instead of listing every value out one by one. so much easier, no cap ๐ŸŒธ

extractor.itaku.order

Type: string

Default: "desc"

Controls the order in which images/posts/users come back to you. โœจ

  • "asc" | "reverse" โ€” ascending order (oldest first)
  • "desc" โ€” descending order (newest first)
  • any other string โ€” custom result order

extractor.itaku.videos

Type: bool

Default: true

Download video files. yes queen, grab the vids too ๐ŸŽ€


extractor.iwara.embeds

Type: bool

Default: false

Download embedded external videos using ytdl. ๐Ÿฆ‹


extractor.iwara.format

Type:

  • string
  • list of strings

Example:

  • "Source"
  • "360,540,Source"
  • ["360", "540", "Source"]

Description: picks your preferred format for video downloads.

When more than one format is given, the first available one gets selected. so order them like a priority list, periodt ๐Ÿ’–


extractor.iwara.include

Type:

  • string
  • list of strings

Default: ["user-images", "user-videos"]

Description: a (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • user-images
  • user-videos
  • user-playlists
Note: "all" works instead of listing every value separately. iconic shortcut fr fr ๐Ÿ‘‘

extractor.joyreactor.embeds

Type: bool

Default: false

Download embedded external videos with ytdl. ๐Ÿ’ซ


extractor.joyreactor.formats

Type:

  • string
  • list of strings

Default: ["webm"]

Example: "gif,mp4,webm"

Description: a (comma-separated) list of video formats to download.

Supported Values:

  • webm
  • mp4
  • gif

extractor.joyreactor.metadata

Type: bool

Default: false

Extract additional metadata. the juicy extra details ๐Ÿ˜Œ


extractor.joyreactor.videos

Type: bool

Default: true

Download videos. ๐ŸŽฌ


extractor.kemono.archives

Type: bool

Default: false

Extract additional metadata for archives files, including file, file_list, and password. ๐Ÿ”

Note: this requires 1 additional HTTP request per archives file. so it's a lil extra work, not free, iykyk

extractor.kemono.archives-format

Type: string

Default: "list"

Description: decides the format/type of the archives metadata field.

  • "list" "array" โ€” plain list with archive files as elements
  • "dict" "object" โ€” a dict with each archive file's hash as key

extractor.kemono.comments

Type: bool

Default: false

Extract comments metadata. ๐Ÿ’ฌ

Note: this requires 1 additional HTTP request per post.

extractor.kemono.duplicates

Type:

  • bool
  • string
  • list of strings

Default: false

Example:

  • "attachment,inline"
  • ["file", "attachment"]

Description: controls how to handle duplicate files in a post. ๐Ÿ˜ญ

  • true โ€” download duplicates
  • false โ€” ignore duplicates
  • any list or string โ€” download a duplicate file if its type is in the given list, ignore it otherwise

extractor.kemono.dms

Type: bool

Default: false

Extract a user's direct messages as dms metadata. ๐Ÿ‘€


extractor.kemono.announcements

Type: bool

Default: false

Extract a user's announcements as announcements metadata. ๐Ÿ“ข


extractor.kemono.expand

Type: bool

Default: false

Description: provide complete post metadata by fetching extra data with an additional API request for each post.

Includes captions, content, embed, poll, tags,


extractor.kemono.favorites

Type: string

Default: "artist"

Description: determines the type of favorites to be downloaded.

Available types are artist and post. ๐Ÿ’œ


extractor.kemono.files

Type: list of strings

Default: ["attachments", "file", "inline"]

Description: determines the type and order of files to be downloaded.

Available Types:

  • file
  • attachments
  • inline

extractor.kemono.max-posts

Type: integer

Default: null

Limit the number of posts to download. โœ‹ so you don't accidentally download the whole internet, bestie


extractor.kemono.metadata

Type: bool

Default: true

Extract username and user_profile metadata. ๐ŸŒˆ


extractor.kemono.original

Type: bool

Default: false

Description: try to download original files.

Download thumbnails/previews if available when this option is disabled. ๐Ÿ–ผ๏ธ


extractor.kemono.revisions

Type:

  • bool
  • string

Default: false

Description: extract post revisions.

Set this to "unique" to filter out duplicate revisions. โœจ

Note: this requires 1 additional HTTP request per post.

extractor.kemono.order-revisions

Type: string

Default: "desc"

Description: controls the order in which revisions are returned.

  • "asc" | "reverse" โ€” ascending order (oldest first)
  • "desc" โ€” descending order (newest first)

extractor.kemono.discord.order-posts

Type: string

Default: "asc"

Description: controls the order in which discord posts are returned.

  • "asc" โ€” ascending order (oldest first)
  • "desc" | "reverse" โ€” descending order (newest first)

extractor.khinsider.covers

Type: bool

Default: false

Download album cover images. ๐ŸŽถ album art stays winning


extractor.khinsider.format

Type: string

Default: "mp3"

Description: the name of the preferred file format to download.

  • use "all" to download all available formats, or
  • a (comma-separated) list to select multiple formats.

If the selected format isn't available, the first in the list gets chosen (usually mp3). ๐Ÿ™ˆ


extractor.koofr.recursive

Type: bool

Default: true

  • true โ€” recursively descent into subfolders while downloading individual files.
  • false โ€” download shared /links/ with multiple files as a single .zip file. ๐Ÿ—‚๏ธ

extractor.lolisafe.domain

Type: string

Default: null

Description: specifies the domain used by a lolisafe extractor regardless of the input URL.

Setting this option to "auto" uses the same domain as a given input URL. ๐ŸŒ€


extractor.luscious.gif

Type: bool

Default: false

Description: the format in which to download animated images.

  • true โ€” download animated images as gifs
  • false โ€” download as mp4 videos ๐ŸŽž๏ธ

extractor.mangadex.api-server

Type: string

Default: "https://api.mangadex.org"

The server to use for API requests. ๐ŸŒ


extractor.mangadex.api-parameters

Type: object (name โ†’ value)

Example: {"order[updatedAt]": "desc"}

Description: additional query parameters to send when fetching manga chapters.

(See /manga/{id}/feed and /user/follows/manga/feed) ๐Ÿ“–

extractor.mangadex.data-saver

Type: bool

Default: false

Enable Data Saver mode and download lower quality versions of chapters. ๐Ÿ“ being nice to ur data fr


extractor.mangadex.lang

Type:

  • string
  • list of strings

Example:

  • "en"
  • "fr,it"
  • ["fr", "it"]

ISO 639-1 code(s) to filter chapters by. ๐ŸŒ


extractor.mangadex.ratings

Type:

  • string
  • list of strings

Default: ["safe", "suggestive", "erotica", "pornographic"]

Example:

  • "safe"
  • "erotica,suggestive"
  • ["erotica", "suggestive"]

List of acceptable content ratings for returned chapters. ๐ŸŒถ๏ธ


extractor.mangadex.manga.covers

Type: bool

Default: false

Download manga cover images. ๐Ÿ“š


extractor.mangafire.manga.lang

Type: string

Default: "en"

ISO 639-1 code selecting which chapters to download. ๐ŸŒธ


extractor.mangareader.manga.lang

Type: string

Default: "en"

Example: "pt-br"

ISO 639-1 code selecting which chapters to download. ๐Ÿ’•


extractor.mangapark.source

Type:

  • string
  • integer

Example:

  • "koala:en"
  • 15150116

Description: select chapter source and language for a manga.

The general syntax is "<source name>:<ISO 639-1 language code>". Both are optional, meaning "koala", "koala:", ":en", or even just ":" are possible as well. ๐Ÿ˜Œ

Specifying the numeric ID of a source is also supported. ๐Ÿ”ข


extractor.[mastodon].access-token

Type: string

Default: null

Description: the access-token value you get from linking your account to gallery-dl.

Note: gallery-dl comes with built-in tokens for mastodon.social, pawoo, and baraag. ๐Ÿ˜ no setup needed for those, lucky you

extractor.[mastodon].cards

Type: bool

Default: false

Fetch media from cards. ๐Ÿƒ


extractor.[mastodon].reblogs

Type: bool

Default: false

Fetch media from reblogged posts. ๐Ÿ”


extractor.[mastodon].replies

Type: bool

Default: true

Fetch media from replies to other posts. ๐Ÿ’ฌ


extractor.[mastodon].text-posts

Type: bool

Default: false

Also emit metadata for text-only posts without media content. ๐Ÿ“


extractor.[misskey].access-token

Type: string

Description: your access token, necessary to fetch favorited notes. ๐Ÿ”‘


extractor.[misskey].date-min & .date-max

Type: Date

Default: null

Retrieve only notes posted after/before this Date. ๐Ÿ—“๏ธ


extractor.[misskey].include

Type:

  • string
  • list of strings

Default: "notes"

Example:

  • "avatar,background,notes"
  • ["avatar", "background", "notes"]

Description: a (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • info
  • avatar
  • background
  • notes
Note: you can use "all" instead of listing all values separately. ๐Ÿฆ‹

extractor.[misskey].order-posts

Type: string

Default: "desc"

Description: controls the order in which posts are processed.

  • "asc" | "reverse" โ€” ascending order (oldest first)
  • "desc" โ€” descending order (newest first)

extractor.[misskey].renotes

Type: bool

  • extractor.[misskey].renotes โ€” bool, default false. Grabs media from renoted notes. yes bestie, the boosts count ๐Ÿ’œ
  • extractor.[misskey].replies โ€” bool, default true. Also pulls media out of replies to other notes. it's giving thorough โœจ
  • extractor.[misskey].text-posts โ€” bool, default false. This one drags in text-only notes too, even the ones with zero media. lowkey completist behaviour ๐Ÿ’…

  • extractor.[moebooru].pool.metadata โ€” bool, default false. Extracts the extended pool metadata, the full lore ๐ŸŽ€
ngl not every moebooru instance supports this, so don't come for me if it ghosts you ๐Ÿ’€
  • extractor.myfigurecollection.include โ€” type is string or list of strings, default "user-pictures". A (comma-separated) list of subcategories to include when processing a user profile.

Supported values:

  • user-collections
  • user-pictures
  • user-albums
psst โ€” you can just write "all" instead of listing every value separately, iykyk ๐Ÿซถ
  • extractor.naver-blog.videos โ€” bool, default true. Downloads the videos. slay ๐ŸŽ€
  • extractor.naver-chzzk.offset โ€” integer, default 0. A custom offset starting value for when you're paginating over comments. main character positioning โœจ
  • extractor.newgrounds.flash โ€” bool, default true. Downloads the original Adobe Flash animations instead of the pre-rendered videos. respect the classics ๐Ÿ’œ
  • extractor.newgrounds.format โ€” type is string or list of string, default "original". Picks the preferred format for video downloads.

Examples:

  • "720p"
  • ["mp4", "mov", "1080p", "720p"]

If your chosen format isn't available, it goes for the next smaller one. and if it's a list, it tries each given filename extension in original resolution or recoded format until it finds one that exists. the way it just keeps trying? obsessed ๐Ÿ˜ญ

  • extractor.newgrounds.include โ€” type is string or list of strings, default "art". A (comma-separated) list of subcategories to include when processing a user profile.

Examples:

  • "movies,audio"
  • ["movies", "audio"]

Supported values:

  • art
  • audio
  • games
  • movies
yep โ€” "all" works here too instead of listing everything out ๐Ÿซถ
  • extractor.nijie.include โ€” type is string or list of strings, default "illustration,doujin". A (comma-separated) list of subcategories to include when processing a user profile.

Supported values:

  • illustration
  • doujin
  • favorite
  • nuita
and again, "all" > listing them all out. periodt ๐Ÿ’…
  • extractor.[nitter].fallback-retries โ€” integer, default 2. How many times fetching a Tweets results page gets retried after an empty response comes back. set it to -1 for infinite retries if you're feeling chaotic ๐Ÿ”ฅ
  • extractor.[nitter].quoted โ€” bool, default false. Fetches media from quoted Tweets. quote-tweet the media, it's canon now โœจ
  • extractor.[nitter].retweets โ€” bool, default false. Fetches media from Retweets.
  • extractor.[nitter].videos โ€” type is bool or string, default true. Controls video download behaviour:
    • true โ€” download videos
    • "ytdl" โ€” download videos using ytdl
    • false โ€” skip video Tweets
  • extractor.oauth.browser โ€” bool, default true. Controls how you get sent over to the OAuth authorization page:
    • true โ€” uses Python's webbrowser.open() method to automatically open the URL in your default browser.
    • false โ€” asks you to copy & paste a URL from the terminal. manual mode era ๐Ÿ™ˆ
  • extractor.oauth.cache โ€” bool, default true. Stores tokens received during OAuth authorizations in cache. so you don't have to keep doing it. iconic behaviour tbh ๐ŸŽ€
  • extractor.oauth.host โ€” string, default "localhost". The host name / IP address to bind to during OAuth authorization.
  • extractor.oauth.port โ€” integer, default 6414. The port number to listen on during OAuth authorization.
โš ๏ธ bestie listen โ€” all redirects go to port 6414, no matter what port you put here. so if you're using a non-default port you'll have to manually fix the port number in your browser's address bar. it's giving extra steps but that's the vibe ๐Ÿ’€
  • extractor.onlyhaven.domain โ€” string, default null. Specifies the domain used by onlyhaven extractors. set it to "auto" and it uses the same domain as the input URL you gave it. cute โœจ
  • extractor.onlyhaven.expand โ€” bool, default false. Gives you complete creator post metadata by fetching extra data with an additional API request for each post. includes originalFilename, comments, links, tags, ๐Ÿซถ
  • extractor.onlyhaven.metadata โ€” bool, default true. Extracts username and user_profile metadata. the essentials ๐Ÿ’…
  • extractor.pawchive.archives โ€” bool, default false. Extracts additional metadata for archives files, including file, file_list, and password.
heads up: this costs 1 additional HTTP request per archives file. so worth it though ๐ŸŒธ
  • extractor.pawchive.archives-format โ€” string, default "list". Determines the format/type of the archives metadata field:
    • "list" / "array" โ€” plain list with archive files as elements
    • "dict" / "object" โ€” a dict with each archive file's hash as key
  • extractor.pawchive.comments โ€” bool, default false. Extracts comments metadata.
note: this needs 1 additional HTTP request per post. the receipts cost requests ๐Ÿ˜ญ
  • extractor.pawchive.deferred โ€” type is bool or string, default true. Extracts and downloads deferred files (i.e. files marked with "Exceeded file size limit, available temporarily").

Set this to "only" to download only deferred files, from posts that contain at least one deferred file. specialist behaviour ๐ŸŽ€

  • extractor.pawchive.domain โ€” string, default null. Specifies the domain used by pawchive extractors. set it to "auto" and it matches the domain of the input URL you gave. same energy as onlyhaven โœจ
  • extractor.pawchive.duplicates โ€” type is bool, string, or list of strings, default false. Controls how duplicate files in a post get handled.

Examples:

  • "attachment,inline"
  • ["file", "attachment"]

Behaviour:

  • true โ€” download duplicates
  • false โ€” ignore duplicates
  • any list or string โ€” download a duplicate file if its type is in the given list, ignore it otherwise
  • extractor.pawchive.expand โ€” bool, default false. Gives you complete post metadata by fetching extra data with an additional API request for each post.
  • extractor.pawchive.favorites โ€” string, default "artist". Determines the type of favorites to be downloaded. the available types are artist and post. pick your fighter ๐Ÿ’œ
  • extractor.pawchive.files โ€” list of strings, default ["file", "attachments", "inline"]. Determines the type and order of files to be downloaded.

Available types:

  • file
  • attachments
  • inline
  • extractor.pawchive.max-posts โ€” integer, default null. Limits the number of posts to download. when you simply cannot do the whole archive today ๐Ÿ™ˆ
  • extractor.pawchive.metadata โ€” bool, default true. Extracts username and user_profile metadata.
  • extractor.pawchive.original โ€” bool, default true. Downloads original files. turn this off and it downloads thumbnails/previews instead, if those are available.
  • extractor.pawchive.previews โ€” bool, default false. Downloads thumbnails/previews for files marked as preview_only, and provides preview fallbacks for original files. cover for the ones that ghost you ๐Ÿซถ
  • extractor.pawchive.revisions โ€” type is bool or string, default false. Extracts post revisions. set it to "unique" to filter out duplicate revisions.
note: 1 additional HTTP request per post. the past is expensive โœจ
  • extractor.pawchive.order-revisions โ€” string, default "desc". Controls the order revisions come back in:
    • "asc" | "reverse" โ€” ascending order (oldest first)
    • "desc" โ€” descending order (newest first)
  • extractor.paheal.metadata โ€” bool, default false. Extracts additional metadata (source, uploader).
note: 1 additional HTTP request per post. ๐Ÿ’…
  • extractor.patreon.cursor โ€” type is bool or string, default true. Controls from which position the extraction process starts.

Example:

"03:eyJ2IjoxLCJjIjoiMzU0NDQ1MjAiLCJ0IjoiIn0=:DTcmjBoVj01o_492YBYqHhqx"

Behaviour:

  • true โ€” start from the beginning. Logs the most recent cursor value when interrupted before reaching the end.
  • false โ€” start from the beginning.
  • any string โ€” start from the position defined by this value.
  • extractor.patreon.files โ€” list of strings, default ["images", "image_large", "attachments", "postfile", "content"]. Determines types and order of files to download.

Available types:

  • postfile
  • images
  • image_large
  • attachments
  • content
  • extractor.patreon.format-images โ€” string, default "download_url". Selects the format of images files.

Available formats:

  • download_url ("a":1,"p":1)
  • url ("w":620)
  • original ("q":100,"webp":0)
  • default ("w":620)
  • default_small ("w":360)
  • default_blurred ("w":620)
  • default_blurred_small ("w":360)
  • thumbnail ("h":360,"w":360)
  • thumbnail_large ("h":1080,"w":1080)
  • thumbnail_small ("h":100,"w":100)
  • extractor.patreon.order-posts โ€” string, default is "collection" "asc" otherwise "desc". Controls the order in which posts are returned and processed.

Examples:

  • "-published_at"
  • "collection_order"

Behaviour:

  • "asc" โ€” ascending order (oldest first)
  • "desc" โ€” descending order (newest first)
  • "reverse" โ€” reverse order
  • any other string โ€” custom sort order
  • extractor.patreon.user.date-max โ€” type Date, default 0. Sets the Date to start from.
  • extractor.[philomena].api-key ๐Ÿ’œ
    • Type: string
    • Default: null
    • Description: This is your account's API Key, bestie โ€” it's what lets your own personal browsing settings and filters ride along with you.
  • extractor.[philomena].filter ๐ŸŽ€
    • Type: integer
    • Default: :derpibooru: 56027 (the Everything filter) ยท :ponybooru: 3 (the Nah. filter) ยท :otherwise: 2
    • Description: The content filter ID you wanna use.
      • Setting an explicit filter ID overrides any default filters, and you can use it to get at 18+ content without an API Key. ๐Ÿ‘€
      • Peep the Filters section for the details.
  • extractor.[philomena].comments ๐Ÿ’ฌ
    • Type: bool
    • Default: false
    • Description: Extract comments metadata.
  • extractor.[philomena].svg ๐Ÿฆ‹
    • Type: bool
    • Default: true
    • Description: Download SVG versions of images when they're available.
      • When this option is disabled, it'll try to download the view_url version of those posts instead.

  • extractor.pillowfort.external ๐ŸŒˆ
    • Type: bool
    • Default: false
    • Description: Follow links out to external sites โ€” like Twitter, for example.
  • extractor.pillowfort.inline โœจ
    • Type: bool
    • Default: true
    • Description: Extract inline images.
  • extractor.pillowfort.reblogs ๐Ÿ”
    • Type: bool
    • Default: false
    • Description: Extract media from reblogged posts.

  • extractor.pinterest.domain ๐Ÿ“Œ
    • Type: string
    • Default: "auto"
    • Description: Picks which domain the pinterest extractors use.
      • Setting this to "auto" means it uses the same domain as whatever input URL you gave it.
  • extractor.pinterest.sections ๐Ÿงท
    • Type: bool
    • Default: true
    • Description: Include pins that live in board sections.
  • extractor.pinterest.stories ๐ŸŒธ
    • Type: bool
    • Default: true
    • Description: Extract files from story pins.
  • extractor.pinterest.videos ๐ŸŽฌ
    • Type: bool
    • Default: true
    • Description: Download from video pins.

  • extractor.pixeldrain.api-key ๐Ÿ”‘
    • Type: string
    • Description: Your account's API key.
  • extractor.pixeldrain.recursive ๐ŸŒ€
    • Type: bool
    • Default: true
    • Description: Recursively download files from subfolders.
  • extractor.pixeldrain.zip ๐Ÿ—œ๏ธ
    • Type: bool
    • Default: false
    • Description: Download albums as a single .zip file.

  • extractor.pixiv.include ๐ŸŽจ
    • Type:
      • string
      • list of strings
    • Default: "artworks"
    • Example:
      • "avatar,background,artworks"
      • ["avatar", "background", "artworks"]
    • Description: A (comma-separated) list of subcategories to include when you're processing a user profile.
    • Supported Values:
      • artworks
      • avatar
      • background
      • favorite
      • novel-user
      • novel-bookmark
      • sketch
    • Note: You can just use "all" instead of listing every single value out separately. iykyk ๐Ÿ’…
  • extractor.pixiv.refresh-token ๐Ÿ”„
    • Type: string
    • Description: The refresh-token value you get from running gallery-dl oauth:pixiv (see OAuth) or by using a third-party tool like gppt.
  • extractor.pixiv.metadata ๐Ÿ“‹
    • Type: bool
    • Default: false
    • Description: Fetch extended user metadata.
  • extractor.pixiv.metadata-bookmark ๐Ÿ”–
    • Type: bool
    • Default: false
    • Description: For works bookmarked by your own account, fetch bookmark tags as tags_bookmark metadata.
    • Note: This costs 1 additional API request per bookmarked post. ๐Ÿ’€
  • extractor.pixiv.captions ๐Ÿ“
    • Type: bool
    • Default: false
    • Description: For works whose caption metadata looks empty, try to grab the actual caption value using the AJAX API.
  • extractor.pixiv.comments ๐Ÿ’ฌ
    • Type: bool
    • Default: false
    • Description: Fetch comments metadata.
    • Note: This needs 1 or more additional API requests per post, depending on how many comments there are. ๐Ÿ˜ญ
  • extractor.pixiv.work.related ๐Ÿ”—
    • Type: bool
    • Default: false
    • Description: Also download related artworks.
  • extractor.pixiv.tags ๐Ÿท๏ธ
    • Type: string
    • Default: "japanese"
    • Description: Controls the tags metadata field.
      • "japanese" โ€” list of Japanese tags
      • "translated" โ€” list of translated tags
      • "original" โ€” the unmodified list with both Japanese and translated tags
  • extractor.pixiv.ugoira ๐ŸŽž๏ธ
    • Type:
      • bool
      • string
    • Default: true
    • Description: Download Pixiv's Ugoira animations.
      • These animations come as a .zip archive containing all animation frames in JPEG format by default.
      • Set this option to "original" to download them as individual, higher-quality frames instead.
      • Use an ugoira post processor to convert them into watchable animations. (Example)
  • extractor.pixiv.max-posts ๐Ÿ”ข
    • Type: integer
    • Default: 0
    • Description: When downloading galleries, this sets the maximum number of posts to get. A value of 0 means no limit.
  • extractor.pixiv.sanity ๐Ÿง 
    • Type: bool
    • Default: true
    • Description: Try to fetch limit_sanity_level works via web API.
  • extractor.pixiv.favorite.cursor ๐Ÿ“
    • Type: string
    • Description: Start from the given bookmark ID.

  • extractor.pixiv-novel.comments ๐Ÿ’ฌ
    • Type: bool
    • Default: false
    • Description: Fetch comments metadata.
    • Note: This needs 1 or more additional API requests per novel, depending on how many comments there are.
  • extractor.pixiv-novel.covers ๐Ÿ–ผ๏ธ
    • Type: bool
    • Default: false
    • Description: Download cover images.
  • extractor.pixiv-novel.embeds ๐Ÿงฉ
    • Type: bool
    • Default: false
    • Description: Download embedded images.
  • extractor.pixiv-novel.full-series ๐Ÿ“š
    • Type: bool
    • Default: false
    • Description: When you download a novel that's part of a series, download all the novels of that series.
  • extractor.pixiv-novel.max-posts ๐Ÿ”ข
    • Type: integer
    • Default: 0
    • Description: When downloading multiple novels, this sets the maximum number of novels to get.
      • A value of 0 means no limit.
  • extractor.pixiv-novel.metadata ๐Ÿ“‹
    • Type: bool
    • Default: false
    • Description: Fetch extended user metadata.
  • extractor.pixiv-novel.metadata-bookmark ๐Ÿ”–
    • Type: bool
    • Default: false
    • Description: For novels bookmarked by your own account, fetch bookmark tags as tags_bookmark metadata.
    • Note: This costs 1 additional API request per bookmarked post.
  • extractor.pixiv-novel.refresh-token ๐Ÿ”„
    • Type: string
    • Description: The refresh-token value you get from running gallery-dl oauth:pixiv (see OAuth) or by using a third-party tool like gppt.
      • This can be the same value as extractor.pixiv.refresh-token.
  • extractor.pixiv-novel.tags ๐Ÿท๏ธ
    • Type: string
    • Default: "japanese"
    • Description: Controls the tags metadata field.
      • "japanese" โ€” list of Japanese tags
      • "translated" โ€” list of translated tags
      • "original" โ€” the unmodified list with both Japanese and translated tags
  • extractor.pixiv-novel.bookmark.cursor ๐Ÿ“
    • Type: string
    • Description: Start from the given bookmark ID.

  • extractor.plurk.comments ๐Ÿ’ญ
    • Type: bool
    • Default: false
    • Description: Also search Plurk comments for URLs.
  • extractor.plurk.external ๐ŸŒ
    • Type: bool
    • Default: false
    • Description: Follow external links in Plurk posts that aren't hosted on images.plurk.com or imgs.plurk.com.
  • extractor.plurk.replurk ๐Ÿ”
    • Type: bool
    • Default: false
    • Description: Process replurked posts in addition to original posts.

  • extractor.[postmill].save-link-post-body ๐Ÿ“ฎ
    • Type: bool
    • Default: false
    • Description: Whether or not to save the body for link/image posts. Simple as that.

  • extractor.reactor.gif ๐ŸŽž๏ธ
    • Type: bool
    • Default: false
    • Description: The format to download animated images in.
      • Use true to download animated images as gifs, and false to download as mp4 videos.

  • extractor.reddit.api ๐Ÿงก
    • Type: string
    • Default: "auto"
    • Description: Selects which API endpoints to use.
      • "auto" โ€” use "oauth" when a client_id is given, "rest" otherwise.
      • "oauth" โ€” use the OAuth API at https://oauth.reddit.com
        • Requires client-id & user-agent (extractor.reddit.client-id & .user-agent-oauth) and uses a refresh token for authentication.
      • "rest" โ€” use the REST API at https://www.reddit.com
        • Uses cookies for authentication.
  • extractor.reddit.comments ๐Ÿ’ฌ
    • Type: integer
    • Default: 0
    • Description: The value of the limit 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 0 ignores all comments and significantly cuts down the time required when scanning a subreddit. โšก
  • extractor.reddit.morecomments โž•
    • Type: bool
    • Default: false
    • Description: Retrieve additional comments by resolving the more comment stubs in the base comment tree.
    • Note: This requires 1 additional API call for every 100 extra comments. ๐Ÿ˜ญ
  • extractor.reddit.embeds ๐Ÿงฉ
    • Type: bool
    • Default: true
    • Description: Download embedded comments media.
  • extractor.reddit.date-min & .date-max ๐Ÿ“…
    • Type: Date
    • Default: 0 and 253402210800 (timestamp of datetime.max)
    • Description: Ignore all submissions posted before/after this date.
  • extractor.reddit.id-min & .id-max ๐Ÿ†”
    • Type: string
    • Example: "6kmzv2"
    • Description: Ignore all submissions posted before/after the submission with this ID.
  • extractor.reddit.limit ๐Ÿ”ข
    • Type: integer
    • Default: null
    • Description: Number of results to return in a single API query.
      • This value specifies the limit parameter used for API requests when retrieving paginated results.
      • null means not including this parameter at all and letting Reddit choose a default.
  • extractor.reddit.pinned ๐Ÿ“Œ
    • Type: bool
    • Default: true
    • Description: Process pinned submissions.
  • extractor.reddit.previews ๐Ÿ‘€
    • Type: bool
    • Default: true
    • Description: For failed downloads from external URLs / child extractors, download Reddit's preview image/video if one's available.
  • extractor.reddit.recursion ๐ŸŒ€
    • Type: integer
    • Default: 0
    • Description: Reddit extractors can recursively visit other submissions linked to in the initial set of submissions. This value sets the maximum recursion depth.
    • Special Values:
      • 0 โ€” recursion is disabled
      • -1 โ€” infinite recursion (don't do this ๐Ÿ™ˆ)
  • extractor.reddit.refresh-token ๐Ÿ”„
    • Type: string
    • Default: null

Description: the refresh-token value you get from linking your Reddit account to gallery-dl, bestie ๐Ÿ’–

Using a refresh-token lets you get into private or otherwise not-publicly-available subreddits โ€” if your account is authorized to do so โ€” but heads up, requests to the reddit API get rate limited at 600 requests every 10 minutes/600 seconds. That's the price, no cap.


๐Ÿ“ extractor.reddit.selftext

Type: bool

Default:

  • true if comments are enabled
  • false otherwise

Description: follow links that are chilling inside the original post's selftext โœจ


๐ŸŒธ extractor.reddit.videos

Type:

  • bool
  • string

Default: "dash"

Description: this one controls the whole video download situation ๐ŸŽฌ

  • true โ€” download videos and use ytdl to handle HLS and DASH manifests
  • "ytdl" โ€” download videos and let ytdl handle all of the video extraction and download
  • "dash" โ€” extract DASH manifest URLs and use ytdl to download and merge them. (*)
  • false โ€” ignore videos entirely, not me pretending they don't exist ๐Ÿ™ˆ

Note:

(*) This saves 1 HTTP request per video and might potentially be able to download otherwise deleted videos, but it will not always get the best video quality available. Lowkey a tradeoff, bestie.

๐Ÿ’… extractor.reddit.user.only

Type: bool

Default:

  • true for user-saved, user-upvoted, user-downvoted
  • false otherwise

Description: only process and return posts from the user specified in the input URL. Nobody else gets a crumb ๐Ÿ‘‘


๐Ÿฆ‹ extractor.redgifs.format

Type:

  • string
  • list of strings

Default: ["hd", "sd", "gif"]

Description: list of names of the preferred animation format ๐Ÿ’–

If a selected format is not available, the next one in the list will be tried until an available format is found. It's giving "we'll keep looking till we find one that slays."

If the format is given as a string, it will be extended with ["hd", "sd", "gif"]. Use a list with one element to restrict it to only one possible format.

Available Formats:

  • "hd"
  • "sd"
  • "gif"
  • "thumbnail"
  • "vthumbnail"
  • "poster"

๐ŸŒˆ extractor.rule34.api-key & .user-id

Type: string

Default: null

Description: values from the API Access Credentials section found near the bottom of your account's Options page.

Enable Generate New Key? and click Save if the value after &api_key= is empty, e.g. &api_key=&user_id=12345 โ€” yes, an empty one, we fix that ๐Ÿซถ


๐ŸŽ€ extractor.rule34xyz.format

Type:

  • string
  • list of strings

Default: ["10", "40", "41", "2"]

Example: "33,34,4"

Description: selects the file format to extract.

When more than one format is given, the first available one is selected. First come, first served, periodt โœจ


โญ extractor.sankaku.refresh

Type: bool

Default: false

Description: refresh download URLs before they expire. Catching them before they ghost you ๐Ÿ’€


๐Ÿ’œ extractor.sankaku.tags

Type:

  • bool
  • string

Default: false

Description: group tags by type and provide them as tags_<type> and tag_string_TYPE metadata fields, for example tags_artist and tags_character. Obsessed with organization honestly.

  • true โ€” enable general tags categories

Requires:

  • 1 additional API request per 100 tags per post
  • "extended" โ€” group tags by the new, extended tag category system used on chan.sankakucomplex.com

Requires:

  • 1 additional HTTP request per post
  • authenticated cookies to fetch full tags category data
  • false โ€” disable tags categories

๐ŸŒธ extractor.sankakucomplex.embeds

Type: bool

Default: false

Description: download video embeds from external sites. Going off-site for the vibes ๐Ÿฆ‹


โœจ extractor.sankakucomplex.videos

Type: bool

Default: true

Description: download videos. Simple as that ๐Ÿ’…


๐Ÿ”ฅ extractor.schalenetwork.cbz

Type: bool

Default: false

Description: download each gallery as a single .cbz file.

Note:

Requires a token ๐Ÿ‘‘

๐Ÿงš extractor.schalenetwork.crt

Type: string

Example:

  • "0542daa9-352c-4fd5-a497-6c6d5cf07423"
  • "/12345/a1b2c3d4e5f6?crt=0542daa9-352c-4fd5-a497-6c6d5cf07423"

Description: the crt query parameter value sent when fetching gallery data.

To get this value:

  • Open your browser's Developer Tools (F12)
  • Select Network โ†’ XHR
  • Open a gallery page
  • Select the last Network entry and copy its crt value

Note:

You will also need your browser's user-agent ๐Ÿซถ

๐Ÿ’– extractor.schalenetwork.format

Type:

  • string
  • list of strings

Default: ["0", "1600", "1280", "980", "780"]

Description: name(s) of the image format to download.

When more than one format is given, the first available one is selected. Main character gets picked first, obviously โœจ

Formats:

  • "780"
  • "980"
  • "1280"
  • "1600"
  • "0" (original)

๐ŸŽ€ extractor.schalenetwork.tags

Type: bool

Default: true

Description: group tags by type and provide them as tags_<type> metadata fields, for example tags_artist or tags_character. So tidy, so iconic ๐Ÿ’…


๐Ÿ‘‘ extractor.schalenetwork.token

Type: string

Example:

  • "3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"
  • "Bearer 3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"
  • "Authorization: Bearer 3f1a9b72-4e4d-4f4e-9e5d-4a2b99f7c893"

Description: authorization header value used for requests to https://api.schale.network to access favorite galleries or download .cbz archives. This is the key to the vault bestie ๐Ÿ”‘


๐Ÿ“ extractor.sexcom.gifs

Type: bool

Default: true

Description: download animated images as .gif instead of .webp ๐ŸŒˆ


๐Ÿ’€ extractor.sizebooru.metadata

Type: bool

Default: false

Description: extract additional metadata:

  • approver
  • artist
  • date
  • date_approved
  • favorite
  • source
  • tags
  • uploader
  • views

Note:

This requires 1 additional HTTP request per post. Paying the toll, fr fr.

๐ŸŒธ extractor.skeb.article

Type: bool

Default: false

Description: download article images ๐Ÿ“ฐ


๐Ÿฆ‹ extractor.skeb.include

Type:

  • string
  • list of strings

Default:

  • ["works", "sentrequests"] if sent-requests are enabled
  • ["works"] otherwise

Example:

  • "works,sentrequests"
  • ["works", "sentrequests"]

Description: a (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • works
  • sentrequests

Note:

It is possible to use "all" instead of listing all values separately. Shortcut queen ๐Ÿ‘‘

โœจ extractor.skeb.sent-requests

Type: bool

Default: false

Description: download sent requests. The ones you put out into the world, now coming home ๐Ÿซถ


๐ŸŽ€ extractor.skeb.thumbnails

Type: bool

Default: false

Description: download thumbnails ๐Ÿ’…


๐Ÿ” extractor.skeb.search.filters

Type:

  • string
  • list of strings

Default: ["genre:art", "genre:voice", "genre:novel", "genre:video", "genre:music", "genre:correction"]

Example: "genre:music OR genre:voice"

Description: filters used during searches. Narrow it down, bestie ๐ŸŒˆ


๐Ÿ’œ extractor.smugmug.videos

Type: bool

Default: true

Description: download video files ๐ŸŽฌ


๐Ÿ“ extractor.sofurry.include

Type:

  • string
  • list of strings

Default: "gallery"

Description: a (comma-separated) list of subcategories to include when processing a user profile.

Supported Values:

  • gallery
  • favorite

Note:

It is possible to use "all" instead of listing all values separately. Yes, again, it's that easy โœจ

๐ŸŒˆ extractor.sofurry.original

Type: bool

Default: true

Description: download original files.

Submissions containing more than one file will be downloaded as .zip archive.

Disabling this option will download files via their display URL in .webp format. Your call bestie ๐Ÿ’…


๐Ÿงš extractor.steamgriddb.animated

Type: bool

Default: true

Description: include animated assets when downloading from a list of assets ๐ŸŽž๏ธ


๐Ÿ’– extractor.steamgriddb.epilepsy

Type: bool

Default: true

Description: include assets tagged with epilepsy when downloading from a list of assets.


๐Ÿ“ extractor.steamgriddb.dimensions

Type:

  • string
  • list of strings

Default: "all"

Example:

  • "1024x512,512x512"
  • ["460x215", "920x430"]

Description: only include assets that are in the specified dimensions. all can be used to specify all dimensions.

Valid Values:

  • Grids: 460x215, 920x430, 342x482, 600x900, 660x930, 512x512, 1024x1024
  • Heroes: 1600x650, 1920x620, 3840x1240
  • Logos: N/A (will be ignored)
  • Icons: 8x8, 10x10, 14x14, 16x16, 20x20, 24x24, 28x28, 32x32, 35x35, 40x40, 48x48, 54x54, 56x56, 57x57, 60x60, 64x64, 72x72, 76x76, 80x80, 90x90, 96x96, 100x100, 114x114, 120x120, 128x128, 144x144, 150x150, 152x152, 160x160, 180x180, 192x192, 194x194, 256x256, 310x310, 512x512, 768x768, 1024x1024

๐ŸŽ€ extractor.steamgriddb.file-types

Type:

  • string
  • list of strings

Default: "all"

Example:

  • "png,jpeg"
  • ["jpeg", "webp"]

Description: only include assets that are in the specified file types. all can be used to specify all file types.

Valid Values:

  • Grids: png, jpeg, jpg, webp
  • Heroes: png, jpeg, jpg, webp
  • Logos: png, webp
  • Icons: png, ico

๐Ÿ–ผ๏ธ extractor.steamgriddb.download-fake-png

Type: bool

Default: true

Description: download fake PNGs alongside the real file. Yes, both. We don't discriminate here ๐Ÿ’…


๐Ÿ˜‚ extractor.steamgriddb.humor

Type: bool

Default: true

Description: include assets tagged with humor when downloading from a list of assets. Comedy is content ๐Ÿคญ


๐ŸŒ extractor.steamgriddb.languages

Type:

  • string
  • list of strings

Default: "all"

Example:

  • "en,km"
  • ["fr", "it"]

Description: only include assets that are in the specified languages.

Valid Values:

  • ISO 639-1 codes

Note:

all can be used to specify all languages. Polyglot era ๐Ÿซถ

๐Ÿ”ฅ extractor.steamgriddb.nsfw

Type: bool

Default: true

Description: include assets tagged with adult content when downloading from a list of assets. Do with that information what you will ๐Ÿ™ˆ


โญ extractor.steamgriddb.sort

Type: string

Default: "score_desc"

Description: set the chosen sorting method when downloading from a list of assets.

Supported Values:

  • score_desc โ€” (Highest Score (Beta))
  • score_asc โ€” (Lowest Score (Beta))
  • score_old_desc โ€” (Highest Score (Old))
  • score_old_asc โ€” (Lowest Score (Old))
  • age_desc โ€” (Newest First)
  • age_asc โ€” (Oldest First)

๐ŸŒธ extractor.steamgriddb.static

Type: bool

Default: true

  • Description: Include static assets when downloading from a list of assets. ๐ŸŽ€

๐Ÿ–ผ๏ธ extractor.steamgriddb.untagged

  • Type: bool
  • Default: true
  • Description: Include untagged assets when you're pulling down a whole list of assets. bestie we are NOT leaving the untagged ones behind ๐Ÿ’…

๐Ÿ” extractor.[szurubooru].username & .token

  • Type: string
  • Description: Your username and login token for the account, so you can get into the private resources. the exclusive stuff, iykyk ๐Ÿ™ˆ

To generate a token, go to /user/USERNAME/list-tokens and hit Create Token. that's it, that's the whole ritual โœจ


๐ŸŽฌ extractor.tenor.format

  • Type:
    • string
    • list of strings
  • Default: ["gif", "mp4", "webm", "webp"]
  • Description: A list of names for the animation format you'd prefer. If your chosen format isn't available, it just moves on to the next one in the list until something works out. it's giving "no worries, next option" energy ๐Ÿ’…
  • Available Formats:
    • gif
    • gif_transparent
    • mediumgif
    • gifpreview
    • tinygif
    • tinygif_transparent
    • mp4
    • tinymp4
    • webm
    • webp
    • webp_transparent
    • tinywebp
    • tinywebp_transparent

๐ŸŽง extractor.tiktok.audio

  • Type:
    • bool
    • string
  • Default: true
  • Description: This one runs the whole audio-download situation:
    • true โ€” Download audio tracks
    • "ytdl" โ€” Download audio tracks using ytdl
    • false โ€” Ignore audio tracks

literally pick ur fighter ๐Ÿซถ


๐ŸŒธ extractor.tiktok.covers

  • Type:
    • bool
    • string
  • Default: false
  • Description: Download video covers.
    • true โ€” Download the first cover found, checking in this order:
      • thumbnail
      • cover
      • originCover
      • dynamicCover
    • false โ€” Do not download covers
    • "all" โ€” Download all available covers

cover girl behavior, honestly ๐Ÿ‘‘


๐Ÿ“ธ extractor.tiktok.photos

  • Type: bool
  • Default: true
  • Description: Download photos. yes. the pics. the whole point. ๐Ÿ“ทโœจ

๐Ÿ’ฌ extractor.tiktok.subtitles

  • Type:
    • bool
    • string
  • Default: false
  • Example:
    • "all"
    • "ASR,MT,LC"
    • "ASR,eng-US"
  • Description: Download video subtitles. You can filter the subtitles by source or by language. These are the source types you can filter on:
    • ASR โ€” Automatic Speech Recognition
    • MT โ€” Machine Translation
    • LC โ€” Local Captions / Creator Captions

If you hand over both source types and language codes, then only the subtitles matching both get downloaded. picky, but make it fashion ๐Ÿ’…

  • true โ€” Download all subtitles tagged ASR
  • false โ€” Do not download subtitles
  • "all" โ€” Download all available subtitles.
  • "ASR,MT,eng-US,cmn-Hans-CN" โ€” Download english and simplified chinese subtitles that are either automatically recognized or machine translated.

The source types and the languages can be listed in any order. no gatekeeping on ordering here ๐Ÿฆ‹

  • Note:
You can't filter all subtitles of one specific source type while ALSO filtering for extra languages of another source type. (like, any ASR subtitle + fra-FR of any source type โ€” nope, not happening.) For that, go look at extractor.*.file-filter. ๐Ÿ˜ญ

๐ŸŽฅ extractor.tiktok.videos

  • Type:
    • bool
    • string
  • Default: true
  • Description: Controls the video download behavior:
    • true โ€” Download videos
    • "ytdl" โ€” Download videos using ytdl
    • false โ€” Ignore videos

๐Ÿ“Š extractor.tiktok.tiktok-range

  • Type: string
  • Default: ""
  • Example: "1-20"
  • Description: The range or playlist indices of tiktok posts to extract.

When you're using ytdl, check out ytdl/playlist_items for the deets. ๐Ÿ”


๐Ÿ—‚๏ธ extractor.tiktok.posts.order-posts

  • Type: string
  • Default: "desc"
  • Description: Controls the order in which posts get processed.
    • "asc" | "reverse" โ€” Ascending order (oldest first)
    • "desc" โ€” Descending order (newest first)
    • "popular" โ€” Popular order

chronologically scrolling vs. letting the algorithm cook ๐Ÿ”ฅ


โฌ‡๏ธ extractor.tiktok.posts.ytdl

  • Type: bool
  • Default: false
  • Description: Extract user posts with ytdl.

๐Ÿงฉ extractor.tiktok.posts.module

  • Type: Module
  • Default: null
  • Description: The ytdl Module to use when extracting posts from a tiktok user profile.

See extractor.ytdl.module. ๐Ÿซถ


๐Ÿ‘ค extractor.tiktok.user.include

  • Type:
    • string
    • list of strings
  • Default: ["avatar", "posts"]
  • Description: A (comma-separated) list of subcategories to include when you're processing a user profile.
  • Supported Values:
    • avatar
    • posts
    • reposts
    • stories
    • likes
    • saved
  • Note:
You can just use "all" instead of listing every single value separately. we love a shortcut ๐Ÿ’–

๐Ÿงš extractor.tumblr.avatar

  • Type: bool
  • Default: false
  • Description: Download blog avatars. the little pfp moment ๐ŸŒธ

๐Ÿ“… extractor.tumblr.date-min & .date-max

  • Type: Date
  • Default: 0 and null
  • Description: Ignore all posts published before / after this date. out with the old, bestie ๐Ÿ•ฐ๏ธ

๐Ÿ”— extractor.tumblr.external

  • Type: bool
  • Default: false
  • Description: Follow external URLs (like, from "Link" posts) and try to extract images from them. going off-site, bold of us, slay ๐Ÿฆ‹

๐Ÿ–ผ๏ธ extractor.tumblr.inline

  • Type:
    • bool
    • string
  • Default: true
  • Description:
    • true โ€” Search posts for inline images and videos
    • false โ€” Don't extract inline files
    • "original" โ€” Extract inline media files. For reblogged posts, extract them only from the original post text.
    • "reblog" โ€” Extract inline media files. For reblogged posts, extract them only from the reblog text.

choosing your source text like choosing your main character ๐Ÿ’…


๐Ÿ”ข extractor.tumblr.offset

  • Type: integer
  • Default: 0
  • Description: A custom offset starting value for paginating over blog posts.

It lets you skip past posts without burning through API calls. efficiency is iconic โœจ


๐Ÿ’Ž extractor.tumblr.original

  • Type: bool
  • Default: true
  • Description: Download full-resolution photo and inline images.

For every photo with "maximum" resolution (width equal to 2048 or height equal to 3072) or every inline image, it makes an extra HTTP request to find the URL of its full-resolution version. worth it for the quality, no cap ๐Ÿ“ธ


๐Ÿ“„ extractor.tumblr.pagination

  • Type: string
  • Default:
    • "before" if date-max is set
    • "offset" otherwise
  • Description: Controls how to paginate over blog posts.
    • "api" โ€” next parameter provided by the API (potentially misses posts due to a bug in Tumblr's API)
    • "before" โ€” Timestamp of last post
    • "offset" โ€” Post offset number

heads up on that API bug, it's literally in the source ๐Ÿ™ˆ


โณ extractor.tumblr.ratelimit

  • Type: string
  • Default: "abort"
  • Description: Picks how to handle going over the daily API rate limit.
    • "abort" โ€” Raise an error and stop extraction
    • "wait" โ€” Wait until rate limit reset

fight or sit politely in the queue ๐Ÿ˜ญ


๐Ÿ” extractor.tumblr.reblogs

  • Type:
    • bool
    • string
  • Default: true
  • Description:
    • true โ€” Extract media from reblogged posts
    • false โ€” Skip reblogged posts
    • "same-blog" โ€” Skip reblogged posts unless the original post is from the same blog

๐Ÿ—ƒ๏ธ extractor.tumblr.posts

  • Type:
    • string
    • list of strings
  • Default: "all"
  • Example:
    • "video,audio,link"
    • ["video", "audio", "link"]
  • Description: A (comma-separated) list of post types to extract images, etc. from.

Possible types are text, quote, link, answer, video, audio, photo, chat.

You can use "all" instead of listing all the types separately. one word, zero effort, ate ๐Ÿ’…


โฑ๏ธ extractor.tumblr.fallback-delay

  • Type: float
  • Default: 120.0
  • Description: Number of seconds to wait between retries when fetching full-resolution images. patience is a virtue or whatever ๐Ÿ’œ

๐Ÿ”„ extractor.tumblr.fallback-retries

  • Type: integer
  • Default: 2
  • Description: Number of retries for fetching full-resolution images, or -1 for infinite retries. go off, never give up ๐Ÿซถ

๐Ÿ”‘ extractor.twibooru.api-key

  • Type: string
  • Default: null
  • Description: Your Twibooru API Key, so it can use your account's browsing settings and filters. personalization nation โœจ

๐Ÿšง extractor.twibooru.filter

  • Type: integer
  • Default: 2 (Everything filter)
  • Description: The content filter ID to use.

Setting an explicit filter ID overrides any default filters, and it can be used to access 18+ content without an API Key. ๐Ÿ”ฅ

See Filters for details.


๐ŸŽจ extractor.twibooru.svg

  • Type: bool
  • Default: true
  • Description: Download SVG versions of images when they're available.

When this option is disabled, it tries to download the view_url version of these posts instead. vector girlies, this one's for you ๐Ÿฆ‹


๐Ÿ“ข extractor.twitter.ads

  • Type: bool
  • Default: false
  • Description: Fetch media from promoted Tweets. yes, the ads. they're posts too, unfortunately ๐Ÿ˜ญ

๐Ÿ“ฐ extractor.twitter.articles

  • Type:
    • bool
    • string
    • list of strings
  • Default: true
  • Example: ["media", "document", "metadata"]
  • Description: Process article Tweets.

You can choose which files to download and which article metadata to extract by handing over a list of targets:

  • cover โ€” Download article cover images
  • media โ€” Download article media files
  • html โ€” Extract article content as html
  • metadata, meta โ€” Extract article metadata (id, title, date, date_updated)
  • document, doc โ€” Download article contents as HTML document

mix and match, build your own lil bundle ๐Ÿ’–


๐Ÿƒ extractor.twitter.cards

  • Type:
    • bool
    • string
  • Default: false
  • Description: Controls how Twitter Cards get handled.
    • false โ€” Ignore cards
    • true โ€” Download image content from supported cards
    • "ytdl" โ€” Additionally download video content from unsupported cards using ytdl

๐Ÿšซ extractor.twitter.cards-blacklist

  • Type: list of strings
  • Example: ["summary", "youtube.com", "player:twitch.tv"]
  • Description: A list of card types to ignore.

Possible values are:

  • card names
  • card domains
  • <card name>:<card domain>

blocklist but make it precise ๐ŸŽ€


๐Ÿ—ฃ๏ธ extractor.twitter.conversations

If this option is equal to "accessible", it only downloads from conversation Tweets if the given initial Tweet is accessible. the whole thread, if we're allowed in ๐Ÿ™ˆ


๐Ÿ›ก๏ธ extractor.twitter.csrf

  • Type: string
  • Default: "cookies"
  • Description: Controls how Cross Site Request Forgery (CSRF) tokens get handled.
    • "auto" โ€” Always auto-generate a token.
    • "cookies" โ€” Use token given by the ct0 cookie if present.

๐ŸŽฏ extractor.twitter.cursor

  • Type:
    • bool
    • string
  • Default: true
  • Example: "1/DAABCgABGVKi5lE___oKAAIYbfYNcxrQLggAAwAAAAIAAA"
  • Description: Controls which position the extraction process starts from. pick your starting line and go ๐Ÿ’…
  • true โ€” Start from the beginning.
  • Log the most recent cursor value when interrupted before reaching the end.
  • false โ€” Start from the beginning.
  • any string โ€” Start from the position defined by this value.
Note: ๐Ÿซถ a cursor value from one timeline cannot be used with another. They're not transferable, bestie. Different timeline, different cursor, no swapsies.

extractor.twitter.expand

Type: bool

Default: false

Description:

For each Tweet, return all Tweets from that initial Tweet's conversation or thread โ€” like, expand every Twitter thread. ๐Ÿ’ฅ

Going through a timeline with this option turned on is basically the same as running gallery-dl https://twitter.com/i/web/status/<TweetID> with the conversations option enabled, for every single Tweet in that timeline. Yeah. Every one. ๐Ÿ˜ญ

Note: this needs at least 1 additional API call per initial Tweet. Your rate limit is gonna feel it, fr fr.

extractor.twitter.unavailable

Type: bool

Default: false

Description:

Try to download media that's marked as Unavailable โ€” think Geoblocked videos. ๐Ÿšซ๐ŸŒ

extractor.twitter.include

Type:

  • string
  • list of strings

Default: "timeline"

Example:

  • "avatar,background,media"
  • ["avatar", "background", "media"]

Description:

A (comma-separated) list of subcategories to include when processing a user profile. Pick your faves. โœจ

Supported Values:

  • info
  • avatar
  • background
  • timeline
  • tweets
  • media
  • with-replies
  • highlights
  • likes
Note: you can just write "all" instead of listing every single value out one by one. It's giving efficiency. ๐Ÿ’…

extractor.twitter.transform

Type: bool

Default: true

Description:

Transform Tweet and User metadata into a simpler, uniform format. Cleaner, tidier, slay. ๐Ÿงผ

extractor.twitter.tweet-endpoint

Type: string

Default: "auto"

Description:

Selects the API endpoint used to retrieve single Tweets. ๐Ÿ‘‘

  • "restid" โ†’ /TweetResultByRestId โ€” accessible to guest users
  • "detail" โ†’ /TweetDetail โ€” more stable
  • "auto" โ†’ "detail" when logged in, "restid" otherwise

extractor.twitter.size

Type: list of strings

Default: ["orig", "4096x4096", "large", "medium", "small"]

Description:

The image version to download. Any entries after the first one will be used for potential fallback URLs. ๐Ÿ“ธ

Known available sizes are

  • orig
  • large
  • medium
  • small
  • 4096x4096
  • 900x900
  • 360x360

extractor.twitter.limit

Type:

  • integer
  • list of integers

Default: 50

Example:

[40, 30, 20, 10, 5]

Description:

Number of requested results per API query.

When given as a list, start with the first element as count parameter and switch to the next element whenever no results are returned. ๐Ÿ”

extractor.twitter.logout

Type: bool

Default: false

Description:

Logout and retry as guest when access to another user's Tweets is blocked. ๐Ÿšชโœจ

extractor.twitter.metadata-user

Type: bool

Default: false

Description:

Extract additional metadata for user accounts (author, user)

  • based_in
  • friends_mutual
  • location_accurate
  • name_changes
  • source
Note: this requires 2 additional HTTP requests per user. Worth it? You decide, bestie. ๐Ÿซ 

extractor.twitter.pinned

Type: bool

Default: false

Description:

Fetch media from pinned Tweets. ๐Ÿ“Œ

extractor.twitter.previews

Type: bool

Default: false

Description:

Download video previews. ๐ŸŽฌ

extractor.twitter.quoted

Type: bool

Default: false

Description:

Fetch media from quoted Tweets.

If this option is enabled, gallery-dl will try to fetch a quoted (original) Tweet when it sees the Tweet which quotes it. ๐Ÿ”

extractor.twitter.quoted-expand

Type: bool

Default: extractor.twitter.quoted

Description:

When encountering a quoted Tweet with empty/missing data, fetch its complete body via an additional API request. ๐Ÿ•ต๏ธโ€โ™€๏ธ

extractor.twitter.ratelimit

Type: string

Default: "wait"

Description:

Selects how to handle exceeding the API rate limit. The vibes get tense. ๐Ÿšฆ

  • "abort" โ€” Raise an error and stop extraction
  • "abort:N" โ€” Raise an error and stop extraction after waiting N times until rate limit reset
  • "wait" โ€” Wait until rate limit reset
  • "wait:N" โ€” Wait for N seconds

extractor.twitter.locked

Type: string

Default: "abort"

Description:

Selects how to handle "account is temporarily locked" errors. ๐Ÿ”’

  • "abort" โ€” Raise an error and stop extraction
  • "wait" โ€” Wait until the account is unlocked and retry

extractor.twitter.replies

Type: bool

Default: true

Description:

Fetch media from replies to other Tweets. ๐Ÿ’ฌ

If this value is "self", only consider replies where reply and original Tweet are from the same user.

Note: Twitter will automatically expand conversations if you use the /with_replies timeline while logged in. For example, media from Tweets which the user replied to will also be downloaded. It is possible to exclude unwanted Tweets using file-filter <extractor.*.file-filter_>.

extractor.twitter.retries-api

Type: integer

Default: 9

Description:

Maximum number of retries for API requests when encountering server errors, or -1 for infinite retries. โ™พ๏ธ

extractor.twitter.retweets

Type: bool

Default: false

Description:

Fetch media from Retweets. ๐Ÿ”

If this value is "original", metadata for these files will be taken from the original Tweets, not the Retweets.

extractor.twitter.search-limit

Type:

  • integer
  • list of integers

Default: 20

Example:

[50, 20, 10, 5, 2]

Description:

Number of requested results per search query.

When given as a list, start with the first element as count parameter and switch to the next element when search-stop is reached. ๐Ÿ”Ž

extractor.twitter.search-pagination

Type: string

Default: "max_id"

Description:

Selects how to paginate over search results. ๐Ÿ“œ

  • "cursor" โ€” Use cursor values provided by the API
  • "max_id" | "maxid" | "id" โ€” Update the max_id search query parameter to the Tweet ID value of the last retrieved Tweet.
  • "until" | "date" | "datetime" | "dt" โ€” Update the until search query parameter to the date value of the last retrieved Tweet.

extractor.twitter.search-results

Type: string

Default: "latest"

Description:

Determines the target of search results. ๐ŸŽฏ

Supported Values:

  • "top"
  • "media"
  • "latest" | "live"

extractor.twitter.search-stop

Type: integer

Default: 3

Description:

Number of empty search result batches to accept before stopping. ๐Ÿ›‘

extractor.twitter.showmore

Type: bool

Default: true

Description:

Expand Show more / Show probable spam stubs. ๐Ÿ‘€

extractor.twitter.showreplies

Type: bool

Default: true

Description:

Expand Show replies stubs. ๐Ÿ’ฌ

extractor.twitter.timeline.strategy

Type: string

Default: "auto"

Description:

Controls the strategy / tweet source used for timeline URLs (https://twitter.com/USER/timeline). ๐Ÿงญ

  • "tweets" โ†’ /tweets timeline + search
  • "media" โ†’ /media timeline + search
  • "with_replies" โ†’ /with_replies timeline + search
  • "auto" โ†’ "tweets" or "media", depending on retweets and text-tweets settings

extractor.twitter.text-tweets

Type: bool

Default: false

Description:

Also emit metadata for text-only Tweets without media content. ๐Ÿ“

This only has an effect with a metadata (or exec) post processor with "event": "post" and appropriate filename. iykyk ๐Ÿซถ

extractor.twitter.twitpic

Type: bool

Default: false

Description:

Extract TwitPic embeds. ๐Ÿ–ผ๏ธ

extractor.twitter.unique

Type: bool

Default: true

Description:

Ignore previously seen Tweets. ๐Ÿ™ˆ

extractor.twitter.users

Type: string

Default: "user"

Example:

"https://twitter.com/search?q=from:{core[screen_name]}"

Description:

Basic format string for user URLs generated from following and list-members queries, whose replacement field values come from Twitter user objects (Example). โœจ

Special Values:

Note: to allow gallery-dl to follow custom URL formats, set the blacklist for twitter to a non-default value, e.g. an empty string "".

extractor.twitter.videos

Type:

  • bool
  • string

Default: true

Description:

Control video download behavior. ๐ŸŽฅ

  • true โ€” Download videos
  • "ytdl" โ€” Download videos using ytdl
  • false โ€” Skip video Tweets

extractor.unsplash.format

Type: string

Default: "raw"

Description:

Name of the image format to download. ๐Ÿ–ผ๏ธ

Available Formats:

  • "raw"
  • "full"
  • "regular"
  • "small"
  • "thumb"

extractor.vipergirls.domain

Type: string

Default: "viper.click"

Description:

Specifies the domain used by vipergirls extractors. ๐ŸŒ

For example "viper.click" if the main domain is blocked or to bypass Cloudflare,

extractor.vipergirls.like

Type: bool

Default: false

Description:

Automatically like posts after downloading their images. โค๏ธ

Note: requires login or cookies ๐Ÿช

extractor.vipergirls.order-posts

Type: string

Default: "desc"

Description:

Controls the order in which posts of a thread are processed. ๐Ÿ“š

  • "asc" โ€” Ascending order (oldest first)
  • "desc" | "reverse" โ€” Descending order (newest first)

extractor.vk.domain

Type: string

Default: "auto"

Description:

Specifies the domain used by cyberdrop regardless of input URL.

Setting this option to "auto" uses the same domain as a given input URL.

extractor.vk.offset

Type: integer

Default: 0

Description:

Custom offset starting value when paginating over image results. โฉ

extractor.vsco.include

Type:

  • string
  • list of strings

Default: "gallery"

Example:

  • "avatar,collection"
  • ["avatar", "collection"]

Description:

A (comma-separated) list of subcategories to include when processing a user profile. ๐ŸŽ€

Supported Values:

  • avatar
  • gallery
  • spaces
  • collection
  • Note: It is possible to use "all" instead of listing all values separately. one word, all the things, periodt ๐Ÿ’…

  • extractor.vsco.videos โ€” grab the video files too.
    • Type: bool
    • Default: true
  • extractor.wallhaven.api-key โ€” your Wallhaven API Key, bestie. Use it so your account's browsing settings and default filters get applied while searching.
  • extractor.wallhaven.include โ€” which subcategories to pull in when you're processing a user profile. A (comma-separated) list, or a list of strings, your call ๐Ÿฆ‹
    • Type:
      • string
      • list of strings
    • Default: "uploads"
    • Example:
      • "uploads,collections"
      • ["uploads", "collections"]
    • Supported Values:
      • uploads
      • collections
    • Note: It is possible to use "all" instead of listing all values separately. no cap, it just does all of them for you โœจ
  • extractor.wallhaven.metadata โ€” extract extra metadata (tags, uploader).
    • Type: bool
    • Default: false
    • Note: this costs you 1 additional HTTP request per post. the way that adds upโ€ฆ ๐Ÿ˜ญ
  • extractor.weasyl.api-key โ€” your Weasyl API Key, so all your account's browsing settings and filters get used.
    • Type: string
    • Default: null
  • extractor.weasyl.metadata โ€” fetch extra submission metadata during gallery downloads.
    • Type: bool
    • Default: false
    • That means: (comments, description, favorites, folder_name, tags, views) โ€” a whole lil info dump fr fr ๐ŸŽ€
    • Note: this requires 1 additional HTTP request per submission.
  • extractor.webtoons.bgm โ€” download an episode's background music if it's available. ๐ŸŽต
    • Type:
      • bool
      • string
    • Default: true
    • Example: "aac"
    • If this is a string, remux the downloaded background music file into the given format.
    • Note: requires ytdl for downloads and ffmpeg for remuxing.
  • extractor.webtoons.quality โ€” controls the quality of downloaded files by messing with the URLs' type parameter. iconic behavior honestly.
    • Type:
      • integer
      • string
      • object (ext โ†’ type)
    • Default: "original"
    • Example:
      • 90
      • "q50"
      • {"jpg": "q80", "jpeg": "q80", "png": false}
    • Description:
      • "original" โ€” Download minimally compressed versions of JPG files
      • any integer โ€” Use "q<VALUE>" as type parameter for JPEG files
      • any string โ€” Use this value as type parameter for JPEG files
      • any object โ€” Use the given values as type parameter for URLs with the specified extensions
        • Set a value to false to completely remove these extension's type parameter
        • Omit an extension to leave its URLs unchanged
  • extractor.webtoons.banners โ€” download the active comic's banner. ๐ŸŽ€
    • Type: bool
    • Default: false
  • extractor.webtoons.thumbnails โ€” download the active episode's thumbnail.
    • Type: bool
    • Default: false
    • Super useful for creating CBZ archives with actual source thumbnails ๐Ÿ’–
  • extractor.weibo.gifs โ€” download gif files.
    • Type:
      • bool
      • string
    • Default: true
    • Set this to "video" to download GIFs as video files ๐ŸŽฌ
  • extractor.weibo.include โ€” a (comma-separated) list of subcategories to include when processing a user profile.
    • Type:
      • string
      • list of strings
    • Default: "feed"
    • Supported Values:
      • home
      • feed
      • videos
      • newvideo
      • article
      • album
      • subalbums
    • Note: it is possible to use "all" instead of listing all values separately. ๐ŸŒˆ
  • extractor.weibo.likes โ€” download from like (่ตž่ฟ‡) posts. ๐Ÿ’œ
    • Type: bool
    • Default: false
  • extractor.weibo.livephoto โ€” download livephoto files. the way these are literally both a pic AND a vid, obsessed.
    • Type:
      • bool
      • string
    • Default: true
    • true โ€” Download image & video files
    • false โ€” Download images only
    • "video" โ€” Download videos only
  • extractor.weibo.movies โ€” download movie videos. ๐Ÿฟ
    • Type: bool
    • Default: false
  • extractor.weibo.retweets โ€” fetch media from retweeted posts. ๐Ÿ”
    • Type: bool
    • Default: false
    • If this value is "original", metadata for these files will be taken from the original posts, not the retweeted posts. iykyk
  • extractor.weibo.text โ€” extract full text & text_raw metadata for statuses with truncated text.
    • Type: bool
    • Default: false
  • extractor.weibo.videos โ€” download video files. ๐ŸŽฅ
    • Type: bool
    • Default: true
  • extractor.weibo.album.subalbums โ€” extract subalbum media.
    • Type: bool
    • Default: false
  • extractor.wikimedia.format โ€” sets the format query parameter value added to all download URLs.
    • Type: string
    • Default: fandom | wikigg "original" otherwise ""
  • extractor.wikimedia.image-revisions โ€” number of revisions to return for a single image.
    • Type: integer
    • Default: 1
    • The default value of 1 only returns the latest revision.
    • The value must be between 1 and 500. stay in range bestie, the API will not vibe with anything else ๐Ÿ™ˆ
    • Note: the API sometimes returns image revisions on article pages even when this option is set to 1. However, setting it to a higher value may reduce the number of API requests. fewer requests = fewer vibes lost โœจ
  • extractor.wikimedia.limit โ€” number of results to return in a single API query.
    • Type: integer
    • Default: 50
    • The value must be between 10 and 500.
  • extractor.wikimedia.subcategories โ€” for Category: pages, recursively descent into subcategories. ๐ŸŒธ
    • Type: bool
    • Default: true
  • extractor.xasiat.format โ€” selects video download format.
    • Type: string
    • Default: "best"
    • "HD", "hd", "best", "Best Quality" โ€” "Best Quality" format
    • "SD", "sd", "480p" โ€” "SD" format
  • extractor.[xenforo].attachments โ€” extract forum post attachments. ๐Ÿ“Ž
    • Type: bool
    • Default: true
  • extractor.[xenforo].embeds โ€” extract URLs of forum post embeds.
    • Type: bool
    • Default: true
  • extractor.[xenforo].metadata โ€” extract detailed metadata for media files.
    • Type: bool
    • Default: false
    • Note: this requires 1 additional HTTP request per file. every single file. we love an expensive option ๐Ÿ˜ญ
  • extractor.[xenforo].order-posts โ€” controls the order in which posts of a thread or media files are processed. ๐Ÿฆ‹
    • Type: string
    • Default: thread "desc" otherwise "asc"
    • "asc" โ€” Ascending order (oldest first)
    • "desc", "reverse" โ€” Descending order (newest first)
    • "reaction", "score" โ€” Reaction Score order (threads only)
  • extractor.[xenforo].quoted โ€” extract files from quoted content.
    • Type: bool
    • Default: false
  • extractor.xfolio.fullsize โ€” download posts' files as Full Size Download ZIP container if available and purchased. ๐Ÿ’…
    • Type: bool
    • Default: true
  • extractor.ytdl.cmdline-args โ€” additional ytdl options specified as command-line arguments.
    • Type:
      • string
      • list of strings
    • Example:
      • "--quiet --write-sub --merge-output-format mkv"
      • ["--quiet", "--write-sub", "--merge-output-format", "mkv"]
    • See yt-dlp options / youtube-dl options ๐Ÿ“
  • extractor.ytdl.config-file โ€” location of a ytdl configuration file to load options from.
    • Type: Path
    • Example: "~/.config/yt-dlp/config"
  • extractor.ytdl.deprecations โ€” allow ytdl to warn about deprecated options and features.
    • Type: bool
    • Default: false
  • extractor.ytdl.enabled โ€” process URLs otherwise unsupported by gallery-dl with ytdl. the main-character upgrade fr fr ๐Ÿ‘‘
    • Type: bool
    • Default: false
  • extractor.ytdl.format โ€” ytdl format selection string.
    • Type: string
    • Default: Default of the ytdl module used. ("bestvideo*+bestaudio/best" for yt_dlp, "bestvideo+bestaudio/best" for youtube_dl)
    • See yt-dlp format selection / youtube-dl format selection โญ
  • extractor.ytdl.generic โ€” enables the use of ytdl's Generic extractor.
    • Type:
      • bool
      • string
    • Default: true
    • Set this option to "force" for the same effect as --force-generic-extractor. ๐Ÿ’ฅ
  • extractor.ytdl.generic-category โ€” when using ytdl's Generic extractor, change category to "ytdl-generic" and set subcategory to the input URL's domain.
    • Type: bool
    • Default: true
  • extractor.ytdl.logging โ€” route ytdl's output through gallery-dl's logging system. Otherwise it'll be written directly to stdout/stderr.
    • Type: bool
    • Default: true
    • Note: set quiet and no_warnings in extractor.ytdl.raw-options to true to suppress all output. silence unlocked ๐Ÿ”‡
  • extractor.ytdl.module โ€” the ytdl Module to import.
    • Type: Module
    • Default: null
    • Example:
      • "yt-dlp"
      • "/home/user/.local/lib/python3.13/site-packages/youtube_dl"
    • Setting this to null will try to import "yt_dlp" followed by "youtube_dl" as fallback. ๐Ÿซถ
  • extractor.ytdl.raw-options โ€” additional options passed directly to the YoutubeDL constructor.
    • Type: object (name โ†’ value)
    • Example:
{ "quiet": true, "writesubtitles": true, "merge_output_format": "mkv" }
  • Available options can be found in yt-dlp's docstrings / youtube-dl's docstrings ๐Ÿ“š
  • extractor.zerochan.extensions โ€” list of filename extensions to try when dynamically building download URLs ("pagination": "api" + "metadata": false).
    • Type:
      • string
      • list of strings
    • Default: ["jpg", "png", "webp", "gif"]
    • Example:
      • "gif"
      • ["webp", "gif", "jpg"}
  • extractor.zerochan.metadata โ€” extract additional metadata (date, md5, tags, ...).
    • Type: bool
    • Default: false
    • Note: this requires 1-2 additional HTTP requests per post. two. TWO ๐Ÿ˜ญ
  • extractor.zerochan.pagination โ€” controls how to paginate over tag search results. ๐Ÿฆ‹
    • Type: string
    • Default: "api"
    • "api" โ€” Use the JSON API (no extension metadata)
    • "html" โ€” Parse HTML pages (limited to 100 pages * 24 posts)
  • extractor.zerochan.redirects โ€” automatically follow tag redirects. ๐Ÿ’ซ
    • Type: bool
    • Default: false
  • extractor.[booru].tags โ€” the booru tags option, bestie.
    • Type: bool
    • Default: false

okay so this one groups tags by type and gives them to you as tags_<type> metadata fields โ€” like tags_artist, tags_character, you get the idea. organizing queen behavior fr. ๐Ÿ‘‘

heads up bestie: this costs 1 additional HTTP request per post. every post. so only turn it on if you're committed. ๐Ÿ’€

  • extractor.[booru].notes โ€” pulls the overlay notes out (position + text), yk the little annotation boxes.
    • Type: bool
    • Default: false
    • heads up: 1 additional HTTP request per post. yeah. again. ๐Ÿซ 
  • extractor.[booru].url โ€” the alternate field name to grab download URLs from instead of the usual one.
    • Type:
      • string
      • list of strings
    • Default: "file_url"
    • Example: "preview_url" or ["sample_url", "preview_url", "file_url"]
    • the way this works: when you hand it multiple names, it just goes down the list and downloads the first available one. first come, first served, no drama. โœจ
  • extractor.[manga-extractor].chapter-reverse โ€” flips the order of chapter URLs pulled from manga pages. going backwards, wild of you, love that.
    • Type: bool
    • Default: false
    • true โ†’ start with the latest chapter
    • false โ†’ start with the first chapter
  • extractor.[manga-extractor].page-reverse โ€” downloads the pages inside a manga chapter in reverse order. โœจ
    • Type: bool
    • Default: false

๐Ÿซถ DOWNLOADER OPTIONS ๐Ÿซถ

this is where all the actual grabbing-your-files magic lives, so like, pay attention bestie ๐Ÿ’…

  • downloader.*.enabled โ€” turns this downloader module on or off. simple as that.
    • Type: bool
    • Default: true
  • downloader.*.filesize-min & .filesize-max โ€” the min/max file size allowed, in bytes. anything smaller/larger than your limit just... doesn't get downloaded. bye. ๐Ÿ™ˆ
    • Type: string
    • Default: null
    • Example: "32000", "500k", "2.5M"
    • the values can be valid integer or floating-point numbers, optionally with one of k, m, g, t, or p stuck on the end โ€” and those suffixes are case-insensitive, so 500K and 500k are the same vibe. โœจ
  • downloader.*.mtime โ€” uses the Last-Modified HTTP response headers to set your files' modification times. timestamps stay accurate, we love a well-kept archive. ๐Ÿ•ฐ๏ธ
    • Type: bool
    • Default: true
  • downloader.*.part โ€” controls whether .part files get used while downloading.
    • Type: bool
    • Default: true
    • true โ†’ downloaded data goes into .part files and gets renamed on completion. bonus: this mode supports resuming incomplete downloads. iconic. ๐Ÿ”ฅ
    • false โ†’ no .part files, data gets written directly into the actual output files.
  • downloader.*.part-directory โ€” alternate location(s) for your .part files, if you don't want them chilling next to the outputs.
    • Type:
      • Path
      • object (Condition โ†’ Path)
    • Default: null
    • Example:
"/tmp/.gdl"

{ "size > 100000": "~/.gdl/part", "duration"     : "/tmp/.gdl/video", }
  • > note: if this value is null, or no Conditions apply, the .part files are stored alongside the actual output files.
  • > for a single Path, missing directories will be created as needed. so don't stress, she builds her own house. ๐Ÿ 
  • downloader.*.progress โ€” number of seconds before a download progress indicator for the current download shows up.
    • Type: float
    • Default: 3.0
    • set it to null if you want zero indicator, no progress bar, just vibes. ๐Ÿฆ‹
  • downloader.*.rate โ€” maximum download rate in bytes per second. throttle her. ๐Ÿข
    • Type:
      • string
      • list with 2 strings
    • Default: null
    • Example: "32000", "500k", "1M - 2.5M", ["1M", "2.5M"]
    • values are valid integer or floating-point numbers, optionally followed by one of k, m, g, t, or p, case-insensitive as always.
    • if you give it as a range, the maximum download rate gets randomly chosen before each download. (see random.randint()) randomness, slay.
  • downloader.*.retries โ€” max number of retries during file downloads, or -1 for infinite retries. living dangerously, periodt.
    • Type: integer
    • Default: extractor.*.retries
  • downloader.*.timeout โ€” connection timeout during file downloads.
    • Type: float
    • Default: extractor.*.timeout
  • downloader.*.verify โ€” certificate validation during file downloads. ๐Ÿ”’
    • Type:
      • bool
      • string
    • Default: extractor.*.verify
  • downloader.*.proxy โ€” the proxy server used for file downloads.
    • Type:
      • string
      • object (scheme โ†’ proxy)
    • Default: extractor.*.proxy
    • want no proxy for downloads? explicitly set this option to null. that's it. bye proxy. ๐Ÿ™ˆ
  • downloader.http.adjust-extensions โ€” checks the file headers of downloaded files and adjusts their filename extensions if they don't match. lying filenames get corrected, we love accountability. ๐Ÿ‘‘
    • Type: bool
    • Default: true
    • example: this changes the filename extension ({extension}) of a file called example.png from png to jpg when said file actually contains JPEG/JFIF data. catfished by a file extension, not anymore bestie.
  • downloader.http.consume-content โ€” what happens when an HTTP response counts as unsuccessful.
    • Type: bool
    • Default: false
    • true โ†’ consume the response body. this avoids closing the connection, which improves connection reuse. efficient queen. โœจ
    • false โ†’ immediately close the connection without reading the response. useful if the server is known to send huge bodies for error responses. save yourself the bandwidth.
  • downloader.http.chunk-size โ€” number of bytes per downloaded chunk.
    • Type:
      • integer
      • string
    • Default: 32768
    • Example: "50k", "0.8M"
    • values are integer numbers, optionally followed by one of k, m, g, t, or p, case-insensitive. โœจ
  • downloader.http.headers โ€” extra HTTP headers to send when downloading files.
    • Type: object (name โ†’ value)
    • Example: {"Accept": "image/webp,*/*", "Referer": "https://example.org/"}
  • downloader.http.retry-codes โ€” additional HTTP response status codes that should trigger a download retry.
    • Type: list of integers
    • Default: extractor.*.retry-codes
    • > the codes 200, 206, and 416 (when resuming a partial download) will never be retried and always count as success, no matter what this option says.
    • > 5xx codes (server error responses) will always be retried, also no matter what this option says.
    • so like, don't fight the rules, they're the rules ๐Ÿ’…
  • downloader.http.sleep-429 โ€” number of seconds to sleep when you get a 429 Too Many Requests response before retrying the request. nap time. ๐Ÿ˜ด
    • Type: Duration
    • Default: extractor.*.sleep-429
    • > note: this requires retry-codes to include 429. otherwise it's just a girl standing in front of a nap that never happens. ๐Ÿ’€
  • downloader.http.validate โ€” checks for invalid responses.
    • Type: bool
    • Default: true
    • it fails a download when a file doesn't pass, instead of downloading a potentially broken file. protection. ๐Ÿซถ
  • downloader.http.validate-html โ€” checks for unexpected HTML responses.
    • Type: bool
    • Default: true
    • it fails file downloads with a text/html Content-Type header when a media file was expected. yes, that's a login page, not a jpg, we can tell. ๐Ÿ™„
  • downloader.ytdl.cmdline-args โ€” extra ytdl options given as command-line arguments.
    • Type:
      • string
      • list of strings
    • Example: "--quiet --write-sub --merge-output-format mkv" or ["--quiet", "--write-sub", "--merge-output-format", "mkv"]
    • see yt-dlp options / youtube-dl options for the full menu, iykyk โญ
  • downloader.ytdl.config-file โ€” location of a ytdl configuration file to load options from.
    • Type: Path
    • Example: "~/.config/yt-dlp/config"
  • downloader.ytdl.deprecations โ€” lets ytdl warn you about deprecated options and features. snitch mode, opt-in. ๐Ÿซ 
    • Type: bool
    • Default: false
  • downloader.ytdl.format โ€” the ytdl format selection string.
    • Type: string
    • Default: the default of the ytdl module being used โ€” "bestvideo*+bestaudio/best" for yt_dlp, "bestvideo+bestaudio/best" for youtube_dl
    • see yt-dlp format selection / youtube-dl format selection. choose wisely โœจ
  • downloader.ytdl.forward-cookies โ€” forwards gallery-dl's cookies over to ytdl. sharing is caring. ๐Ÿ“
    • Type: bool
    • Default: true
  • downloader.ytdl.logging โ€” routes ytdl's output through gallery-dl's logging system. otherwise it gets written directly to stdout/stderr. pick your lane. ๐ŸŒˆ
    • Type: bool
    • Default: true
    • > note: set quiet and no_warnings in downloader.ytdl.raw-options to true if you want to suppress all output. silence, gorgeous. ๐Ÿคซ
  • downloader.ytdl.module โ€” which ytdl Module to import.
    • Type: Module
    • Default: null
    • Example: "yt-dlp" or "/home/user/.local/lib/python3.13/site-packages/youtube_dl"
    • setting this to null tries to import "yt_dlp" first, then falls back to "youtube_dl". plan B energy. ๐Ÿ’…
  • downloader.ytdl.outtmpl โ€” the Output Template used to generate filenames for files downloaded with ytdl.
    • Type: string
    • Default: null
    • see yt-dlp output template / youtube-dl output template.
    • Special Values:
      • null โ†’ generate filenames with extractor.*.filename
      • "default" โ†’ use ytdl's default, currently "%(title)s [%(id)s].%(ext)s" for yt-dlp / "%(title)s-%(id)s.%(ext)s" for youtube-dl
    • > note: an output template other than null might cause unexpected results in combination with certain options (e.g. "skip": "enumerate"). you've been warned bestie ๐Ÿ˜ญ
  • downloader.ytdl.raw-options โ€” extra options passed directly to the YoutubeDL constructor.
    • Type: object (name โ†’ value)
    • Example: { "quiet": true, "writesubtitles": true, "merge_output_format": "mkv" }
    • the available options live in yt-dlp's docstrings / youtube-dl's docstrings โ€” go read them, they're giving documentation ๐Ÿ“š

โœจ OUTPUT OPTIONS โœจ

output.mode ๐Ÿ’…

Type:

  • string
  • object (key โ†’ format string)

Default: "auto"

Description: this one controls the output string format AND the little status indicators, bestie. It's giving โœจmain character of the terminalโœจ.

  • "null" โ€” no output, silence, ghost mode
  • "pipe" โ€” suitable for piping to other processes or files
  • "terminal" โ€” suitable for the standard Windows console
  • "color" โ€” suitable for terminals that understand ANSI escape codes and colors
  • "auto" โ€” "pipe" if not on a TTY, "terminal" on Windows with output.ansi disabled, "color" otherwise.

You can also build your own custom output format strings by setting this option to an object and specifying start, success, skip, progress, and progress-total.

For example, the following will replicate the same output as mode: color:

{ "start"  : "{}", "success": "\r\u001b[1;32m{}\u001b[0m\n", "skip" : "\u001b[2m{}\u001b[0m\n", "progress"      : "\r{0:>7}B {1:>7}B/s ", "progress-total": "\r{3:>3}% {0:>7}B {1:>7}B/s " }

start, success, and skip are used to output the current filename, where {} or {0} is replaced with said filename. If a given format string contains printable characters other than that, their number needs to be specified as [<number>, <format string>] to get the correct results for output.shorten. For example

"start"  : [12, "Downloading {}"]

progress and progress-total are used when displaying the download progress indicator โ€” progress when the total number of bytes to download is unknown, progress-total otherwise.

For these format strings:

  • {0} is number of bytes downloaded
  • {1} is number of downloaded bytes per second
  • {2} is total number of bytes
  • {3} is percent of bytes downloaded to total bytes

output.stdout & .stdin & .stderr ๐Ÿซถ

Type:

  • string
  • object

Example:

"utf-8"
{ "encoding": "utf-8", "errors": "replace", "line_buffering": true }

Description: reconfigure a standard stream. Yes, all three of them, they're a lil trio ๐Ÿ‘‘

Possible options are:

  • encoding
  • errors
  • newline
  • line_buffering
  • write_through

When this option is specified as a simple string, it is interpreted as {"encoding": "<string-value>", "errors": "replace"}

Note: errors always defaults to "replace" ๐Ÿ’–

output.shorten ๐ŸŽ€

Type: bool

Default: true

Description: controls whether the output strings should be shortened to fit on one console line.

Set this option to "eaw" (East Asian Width) to display the correct result for east-asian characters with a display width greater than 1. iykyk โœจ


output.colors ๐ŸŒˆ

Type:

  • bool
  • object (key โ†’ ANSI color)

Default:

{ "success": "1;32", "skip"   : "2", "debug"  : "0;37", "info"
: "1;37", "warning": "1;33", "error"  : "1;31" }

Description: controls the ANSI colors used for various outputs. The whole aesthetic, honestly.

  • true โ€” use default ANSI colors.
  • false โ€” disable ANSI colors.
  • object โ€” use custom ANSI colors.

Keys for mode: color

  • success: successfully downloaded files
  • skip: skipped files

Keys for Logging Messages

  • debug: debug logging messages
  • info: info logging messages
  • warning: warning logging messages
  • error: error logging messages

output.ansi ๐ŸŒธ

Type: bool

Default: true

Description: on Windows, enable ANSI escape sequences and colored output by setting the ENABLE_VIRTUAL_TERMINAL_PROCESSING flag for stdout and stderr.

Note: to disable colored output, set output.colors to false. That's the move, not this one ๐Ÿ’…

output.skip โญ

Type: bool

Default: true

Description: show skipped file downloads. Let the world know what you dodged ๐Ÿ™ˆ


output.fallback ๐Ÿฆ‹

Type: bool

Default: true

Description: include fallback URLs in the output of -g/--get-urls.


output.jsonl ๐Ÿ’œ

Type: bool

Default: false

Description: output -j/--dump-json & -J/--resolve-json data in JSON Lines format.


output.private ๐Ÿ”ฅ

Type: bool

Default: false

Description: include private fields, i.e. fields whose name starts with an underscore, in the output of -K/--list-keywords and -j/--dump-json.


output.progress ๐Ÿ‘‘

Type:

  • bool
  • string

Default: true

Description: controls the progress indicator when gallery-dl is run with multiple URLs as arguments.

  • true โ€” show the default progress indicator ("[{current}/{total}] {url}")
  • false โ€” do not show any progress indicator
  • Any string โ€” show the progress indicator using this as a custom format string. Possible replacement keys are current, total and url.

output.log ๐Ÿ’–

Type:

  • Format String
  • Logging Configuration

Default: "[{name}][{levelname}] {message}"

Description: configuration for logging output to stderr.


output.logfile ๐Ÿ“

Type:

  • Path
  • Logging Configuration

Description: file to write logging output to.


output.unsupportedfile ๐Ÿซถ

Type:

  • Path
  • Logging Configuration

Description: file to write external URLs unsupported by gallery-dl to.


output.errorfile ๐Ÿ˜ญ

Type:

  • Path
  • Logging Configuration

Description: file to write input URLs which returned an error to.

When combined with -I/--input-file-comment or -x/--input-file-delete, this option will cause all input URLs from these files to be commented/deleted after processing them and not just successful ones. Read that again bestie, all of them, not just the ones that slayed.


output.num-to-str ๐ŸŽ€

Type: bool

Default: false

Description: convert numeric values (integer or float) to string before outputting them as JSON.


๐Ÿ’ซ POSTPROCESSOR OPTIONS ๐Ÿ’ซ

actions.action โœจ

Type: Action(s)

Description: the Action(s) to perform.

Note: this option can also be set as mode, making it possible to use "name": "actions/<action>@<event>"

actions.event ๐ŸŒธ

Type:

  • string
  • list of strings

Default: "prepare"

Description: the event(s) for which actions.action is triggered.

See metadata.event for a list of available events. ๐Ÿ‘€


classify.mapping ๐Ÿ—‚๏ธ

Type: object (directory โ†’ extensions)

Default:

{ "Pictures" : ["jpg", "jpeg", "png", "gif", "bmp", "svg", "webp", "avif", "heic", "heif", "ico", "psd"], "Video"    : ["flv", "ogv", "avi", "mp4", "mpg", "mpeg", "3gp", "mkv", "webm", "vob", "wmv", "m4v", "mov"], "Music"    : ["mp3", "aac", "flac", "ogg", "wma", "m4a", "wav"], "Archives" : ["zip", "rar", "7z", "tar", "gz", "bz2"], "Documents": ["txt", "pdf"] }

Description: 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. No folder for you, sorry babe ๐Ÿ™ˆ


compare.action ๐Ÿ”

Type: string

Default: "replace"

Description: the action to take when files do not compare as equal.

  • "replace" โ€” Replace/Overwrite the old version with the new one
  • "enumerate" โ€” Add an enumeration index to the filename of the new version like skip = "enumerate"

compare.equal โš–๏ธ

Type: string

Default: "null"

Description: the action to take when files do compare as equal.

  • "abort:N" โ€” Stop the current extractor run after N consecutive files compared as equal.
  • "terminate:N" โ€” Stop the current extractor run, including parent extractors, after N consecutive files compared as equal.
  • "exit:N" โ€” Exit the program after N consecutive files compared as equal.

compare.shallow ๐Ÿซง

Type: bool

Default: false

Description: only compare file sizes. Do not read and compare their content.


directory.event ๐Ÿ“

Type:

  • string
  • list of strings

Default: "prepare"

Description: the event(s) for which directory Format Strings are (re)evaluated.

See metadata.event for a list of available events. ๐Ÿ’œ


exec.archive ๐Ÿ—„๏ธ

Type:

  • string
  • Path

Description: database to store IDs of executed commands in, similar to extractor.*.archive.

The following archive options are also supported:

  • archive-format
  • archive-prefix
  • archive-pragma
  • archive-reuse
  • archive-table

exec.async โณ

Type: bool

Default: false

Description: controls whether to wait for a subprocess to finish or to let it run asynchronously.


exec.command ๐Ÿ’ป

Type:

  • string
  • list of strings

Example:

  • "convert {} {}.png && rm {}"
  • ["echo", "{user[account]}", "{id}"]

Description: the command to run.

  • If this is a string, it will be executed using the system's shell, e.g. /bin/sh. Any {} will be replaced with the full path of a file or target directory, depending on exec.event
  • If this is a list, the first element specifies the program name and any further elements its arguments.

Each element of this list is evaluated as a Format String using the files' metadata as well as {_path}, {_temppath}, {_directory}, and {_filename}.


exec.commands ๐ŸŽฌ

Type: list of commands

Example:

[ ["echo", "{user[account]}", "{id}"] ["magick", "convert" "{_path}",  "\fF {_path.rpartition('.')[0]}.png"], "rm {}", ]

Description: multiple commands to run in succession.

All commands after the first returning with a non-zero exit status will not be run. One bad apple and the queue just stops, periodt ๐Ÿ’€


exec.event ๐ŸŽฏ

Type:

  • string
  • list of strings

Default: "after"

Description: the event(s) for which exec.command is run.

See metadata.event for a list of available events.


exec.output ๐Ÿ“บ

Type: boolean

Default: true

Description: show output of spawned subprocesses.


exec.session ๐Ÿงš

Type: bool

Default: false

Description: start subprocesses in a new session.

On Windows, this means passing CREATE_NEW_PROCESS_GROUP as a creationflags argument to subprocess.Popen

On POSIX systems, this means enabling the start_new_session argument of subprocess.Popen to have it call setsid().


exec.verbose ๐Ÿ—ฃ๏ธ

Type: bool

Default: true

Description: include command arguments in logging messages.


exec.success ๐ŸŽ‰

Type: Action(s)

Description: run these Action(s) when command succeeds and returns with exit status 0.


exec.error ๐Ÿ˜ญ

Type: Action(s)

Description: run these Action(s) when command fails and returns with a non-zero exit status.


hash.chunk-size ๐Ÿงฉ

Type: integer

Default: 32768

Description: how many bytes get nibbled off at a time while a file hash is being computed. little sips, bestie ๐Ÿ“


hash.event ๐ŸŒธ

Type:

  • string
  • list of strings

Default: "file"

Description: which event(s) the file hashes actually get computed for. pew pew ๐ŸŽ€

peep metadata.event for the full menu of available events, iykyk โœจ

hash.filename ๐Ÿ’…

Type:

  • bool

Default: false

Description: rebuild the filenames once the hash digests are computed and dropped into the metadata dict. glow up the file names fr fr ๐Ÿ’–

hash.hashes ๐Ÿฆ‹

Type:

  • string
  • object (field name โ†’ hash algorithm)

Default: "md5,sha1"

Example:

"sha256:hash_sha,sha3_512:hash_sha3"

{ "hash_sha" : "sha256", "hash_sha3": "sha3_512" }

Description: the hash digests you want computed. no cap ๐Ÿ‘‘

wanna see every hash algorithm that's even available? run this:

python -c "import hashlib; print('\n'.join(hashlib.algorithms_available))"

or go look at python/hashlib.

  • if this is a string, it gets parsed as a a comma-separated list of algorthm-fieldname pairs, like this:
[<hash algorithm> ":"] <field name> ["," ...]
when <hash algorithm> is left out, <field name> is used as the algorithm name instead. periodt ๐Ÿ’œ
  • if this is an object, it's a <field name> to <algorithm name> mapping of the hash digests to compute. cute, organized, obsessed ๐ŸŒˆ
Note: this option can also be set as mode, which means you can go "name": "hash/<fieldname>@<event>" ๐Ÿ’ซ

metadata.mode โœจ

Type: string

Default: "json"

Description: picks how metadata gets processed. here are your options, bestie:

  • "json" โ€” Write metadata using json.dump()
  • "jsonl" โ€” Write metadata in JSON Lines format
  • "tags" โ€” Write tags separated by newlines
  • "print" โ€” Write the result of applying content-format to stdout
  • "custom" โ€” Write the result of applying content-format to a file
  • "modify" โ€” Add or modify metadata entries
  • "delete" โ€” Remove metadata entries

metadata.filename ๐ŸŽ€

Type: Format String

Default: null

Example: "{id}.data.json"

Description: a Format String that generates the filenames for metadata files (see extractor.filename). main character filename energy ๐Ÿ’…

slipping "-" in as the filename makes all the output go to stdout. so, like, watch out ๐Ÿซถ

if this option is set, then metadata.extension and metadata.extension-format get straight up ignored. bye bestie ๐Ÿ˜ญ

metadata.directory ๐ŸŒธ

Type:

  • string
  • list of strings

Default: "."

Example:

  • "metadata"
  • ["..", "metadata", "\fF {id // 500 * 500}"]

Description: where the metadata files live, relative to metadata.base-directory. cozy little home ๐Ÿก

metadata.base-directory ๐Ÿ’–

Type:

  • bool
  • Path

Default: false

Description: picks the relative location for metadata files. the vibe check:

  • false โ€” current target location for file downloads (base-directory + directory_)
  • true โ€” current base-directory location
  • any Path โ€” custom location โœจ

metadata.extension ๐Ÿฆ‹

Type: string

Default: "json" or "txt"

Description: the filename extension for metadata files, which gets appended to the original file names. slay ๐Ÿ’œ

metadata.extension-format ๐ŸŒˆ

Type: Format String

Example:

  • "{extension}.json"
  • "json"

Description: a custom Format String that generates filename extensions for metadata files โ€” and it replaces the original filename extension. not me being dramatic but it fully takes over ๐Ÿ’€

Note: when this option is set, metadata.extension is ignored. sorry girl ๐Ÿ™ˆ

metadata.metadata-path ๐ŸŒŸ

Type: string

Example: "_meta_path"

Description: shoves the path of the generated files into the metadata dictionaries, filed under whatever name you picked. iconic ๐ŸŽ€

metadata.event ๐ŸŒธ

Type:

  • string
  • list of strings

Default: "file"

Example:

  • "prepare,file,after"
  • ["prepare-after", "skip"]

Description: which event(s) metadata gets written to a file for. here's the whole roster, no gatekeeping:

  • init โ€” After post processor initialization and before the first file download
  • finalize โ€” On extractor shutdown, e.g. after all files were downloaded
  • finalize-success โ€” On extractor shutdown when no error occurred
  • finalize-error โ€” On extractor shutdown when at least one error occurred
  • prepare โ€” Before a file download
  • prepare-after โ€” Before a file download, but after building and checking file paths
  • file โ€” When completing a file download, but before it gets moved to its target location
  • after โ€” After a file got moved to its target location
  • skip โ€” When skipping a file download
  • error โ€” After a file download failed
  • post โ€” When starting to download all files of a post, e.g. a Tweet on Twitter or a post on Patreon.
  • post-after โ€” After downloading all files of a post
  • child โ€” When spawning a new child extractor
  • child-after โ€” After a child extractor ran

metadata.include ๐Ÿ’…

Type: list of strings

Example: ["id", "width", "height", "description"]

Description: only these top-level keys get written when writing JSON data. strict little guest list ๐Ÿšชโœจ

Note: missing or undefined fields get silently ignored. not a peep ๐Ÿ˜ถ

metadata.exclude ๐Ÿ™ˆ

Type: list of strings

Example: ["blocked", "watching", "status"]

Description: kicks all the given keys out of the written JSON data. bye felicia ๐Ÿ’…

Note: cannot be used together with metadata.include. pick a lane bestie ๐Ÿ˜ญ

metadata.fields ๐Ÿฆ‹

Type:

  • list of strings
  • object (field name โ†’ Format String)

Example:

["blocked", "watching", "status[creator][name]"]

{ "blocked"         : "***", "watching"        : "\fE 'yes' if watching else 'no'", "status[username]": "{status[creator][name]!l}" }

Description:

  • "mode": "delete" โ€” a list of metadata field names to remove.
  • "mode": "modify" โ€” an object with metadata field names mapping to a Format String, and that Format String's result gets assigned to that field name. chef's kiss ๐Ÿ‘‘
Note:: unlike standard Format Strings, the replacement fields in here keep the original type of their value instead of automatically converting it to type-str. genuinely so real of them ๐Ÿ’œ

metadata.content-format ๐ŸŒˆ

Type:

  • Format String
  • list of Format Strings

Example:

  • "tags:\n\n{tags:J\n}\n"
  • ["tags:", "", "{tags:J\n}"]

Description: custom Format String(s) that build the content of metadata files. you're the author now โœ๏ธโœจ

Note: only applies to "mode": "custom".

metadata.ascii โญ

Type: bool

Default: false

Description: escape all the non-ASCII characters. keeping it simple ๐Ÿ’–

see the ensure_ascii argument of json.dump() for the full deets. Note: only applies to "mode": "json" and "jsonl".

metadata.indent ๐ŸŽ€

Type:

  • integer
  • string

Default: 4

Description: how indented the JSON output is. pretty formatting slay ๐ŸŒธ

see the indent argument of json.dump() for the full deets. Note: only applies to "mode": "json".

metadata.separators ๐Ÿ’ซ

Type: list with two string elements

Default: [", ", ": "]

Description: the <item separator> - <key separator> pair used to separate JSON keys and values with. it's giving punctuation ๐Ÿ’…

see the separators argument of json.dump() for the full deets. Note: only applies to "mode": "json" and "jsonl".

metadata.sort ๐Ÿ”ฅ

Type: bool

Default: false

Description: sort the output by key. so organized, so demure โœจ

see the sort_keys argument of json.dump() for the full deets. Note: only applies to "mode": "json" and "jsonl".

metadata.empty ๐Ÿซถ

Type: bool

Default: false

Description: write empty JSON / tags / content-format data and create empty files. zero thoughts, head empty, file exists ๐Ÿ˜Œ

metadata.open ๐ŸŒธ

Type: string

Default: "w"

Description: the mode metadata files get opened in.

like, use "a" to append onto a file's content, or "w" to truncate it. choose wisely bestie ๐Ÿ’€

see the mode argument of open() for the full deets.

metadata.encoding ๐Ÿฆ‹

Type: string

Default: "utf-8"

Description: the name of the encoding used to encode a file's content.

see the encoding argument of open() for the full deets.

metadata.newline ๐ŸŽ€

Type: string

Default: null

Description: the newline sequence used in metadata files.

if it's null, then any \n characters that get written are translated to the system default line separator.

see the newline argument of open() for the full deets.

Supported Values:

  • null โ€” Any \n characters written are translated to the system default line separator.
  • "" "\n" โ€” Don't replace newline characters.
  • "\r" "\r\n" โ€” Replace newline characters with the given sequence.

metadata.private ๐Ÿ’œ

Type: bool

Default: false

Description: include private fields, i.e. fields whose name starts with an underscore. let the secrets out ๐Ÿ™ˆ

metadata.skip ๐Ÿ’…

Type: bool

Default: false

Description: do not overwrite files that already exist. we respect boundaries here ๐Ÿซถ

metadata.archive ๐ŸŒˆ

Type:

  • string
  • Path

Description: the database where the IDs of generated metadata files get stored, similar to extractor.*.archive. lil memory box ๐ŸŽ

the following archive options are also supported:

  • archive-format
  • archive-prefix
  • archive-pragma
  • archive-reuse
  • archive-table

metadata.mtime โญ

Type: bool

Default: false

Description: set the modification times of generated metadata files according to the accompanying downloaded file. matching timestamps, couples costume energy ๐Ÿ’ž

turning this on will only ever have an effect if there is actual mtime metadata available, that is:

  • after a file download ("event": "file" (default), "event": "after")
  • when running after an mtime post processes for the same event

for example, a metadata post processor for "event": "post" will not be able to set its file's modification time unless an mtime post processor with "event": "post" runs before it. order matters, bestie ๐Ÿ˜ค

mtime.event ๐ŸŒธ

Type:

  • string
  • list of strings

Default: "post-after" "target": "directory" "file" otherwise

Description: which event(s) mtime.key or mtime.value get evaluated for.

see metadata.event for the full menu of available events. โœจ

mtime.target ๐Ÿ’–

Type: string

Default: "file"

Description: the target that mtime.key or mtime.value gets applied to.

supported values are "file" and "directory". both iconic, both valid ๐ŸŽ€

mtime.key ๐Ÿฆ‹

Type: string

Default: "date"

Description: the name of the metadata field whose value should be used.

this value has to be either a Unix timestamp or a type-datetime object. no random strings allowed ๐Ÿšซ

Note: this option is ignored if mtime.value is set. so don't even worry about it ๐Ÿ’…

mtime.value ๐Ÿ”ฅ

Type: Format String

Default: null

Example:

  • "{status[date]}"
  • "{content[0:6]:R22/2022/D%Y%m%d/}"

Description: the Format String whose value should be used. you built it, you own it โœจ

The resulting value must be either a Unix timestamp or a type-datetime object.

Note: unlike standard Format Strings, replacement fields here preserve the original type of their value instead of automatically converting it to type-str. no cap, that's the whole point โœจ

๐Ÿ python.archive

Type:

  • string
  • Path

Description: Database to store the IDs of called Python functions in, similar to extractor.*.archive.

The following archive options are also supported:

  • archive-format
  • archive-prefix
  • archive-pragma
  • archive-reuse
  • archive-table

๐Ÿ python.event

Type:

  • string
  • list of strings

Default: "file"

Description: The event(s) for which python.function is called or python.expression is evaluated.

๐Ÿ‘‰ See metadata.event for a list of available events.


๐Ÿ python.expression

Type: Expression

Example:

  • "print('Foo Bar')"
  • "terminate()"

Description: A Python Expression to evaluate. ๐Ÿ’…

Note: only used with "mode": "eval"

๐Ÿ python.function

Type: string

Example:

  • "my_module:generate_text"
  • "~/.local/share/gdl_utils.py:resize"

Description: The Python function to call.

This function is specified as <module>:<function name>, where <module> is a Module and <function name> is the name of the function in that module.

It gets called with the current metadata dict as argument. iconic honestly


๐Ÿ python.args

Type: list of Format Strings

Example:

["{username!c}", "\fE width*height", "\fF {site//(1024*1024)}MB"]

Description: List of additional positional arguments that get passed to python.function.


๐Ÿ python.kwargs

Type: object (name โ†’ Format String)

Example:

{ "user"  : "{username!c}", "pixels": "\fE width*height", "size"  :
"\fF {size//(1024*1024)}MB"]` }

Description: Mapping of additional keyword arguments that get passed to python.function.


๐Ÿ python.mode

Type: string

Default: "function"

Description: Selects what Python code to run.

  • "eval" โ€” Evaluate an expression
  • "function" โ€” Call a function

๐Ÿ” rename.from

Type: Format String

Description: The Format String for filenames to rename. ๐ŸŽ€

When no value is given, extractor.*.filename is used.


๐Ÿ” rename.to

Type: Format String

Description: The Format String for target filenames.

When no value is given, extractor.*.filename is used.


๐Ÿ” rename.skip

Type: bool

Default: true

Description: Do not rename a file when another file with the target name already exists.


๐ŸŽž๏ธ ugoira.extension

Type: string

Default: "webm"

Description: Filename extension for the resulting video files.


๐ŸŽž๏ธ ugoira.ffmpeg-args

Type: list of strings

Default: null

Example:

["-c:v", "libvpx-vp9", "-an", "-b:v", "2M"]

Description: Additional ffmpeg command-line arguments.


๐ŸŽž๏ธ ugoira.mode

Type: string

Default: "auto"

Description: ffmpeg demuxer to read and process input files with.

Supported Values:

  • "auto" โ€” use mkvmerge if available, fall back to concat otherwise
  • "concat" โ€” https://ffmpeg.org/ffmpeg-formats.html#concat-1 Inaccurate frame timecodes for non-uniform frame delays
  • "image2" โ€” https://ffmpeg.org/ffmpeg-formats.html#image2-1 Accurate timecodes, requires nanosecond file timestamps, i.e. no Windows or macOS
  • "mkvmerge" โ€” Accurate timecodes, only WebM or MKV, requires mkvmerge
  • "archive" โ€” Store "original" frames in a .zip archive

๐ŸŽž๏ธ ugoira.ffmpeg-location

Type: Path

Default: "ffmpeg"

Description: Location of the ffmpeg (or avconv) executable to use.


๐ŸŽž๏ธ ugoira.mkvmerge-args

Type: list of strings

Default: null

Example:

["--no-date", "--disable-lacing"]

Description: Additional mkvmerge command-line arguments.


๐ŸŽž๏ธ ugoira.mkvmerge-location

Type: Path

Default: "mkvmerge"

Description: Location of the mkvmerge executable for use with the mkvmerge demuxer.


๐ŸŽž๏ธ ugoira.mkvmerge-metadata

Type: bool

Default: true

Description: Let mkvmerge write BPS, DURATION, NUMBER_OF_BYTES, and NUMBER_OF_FRAMES metadata tags.

Implementation Detail: Disabling this option passes --disable-track-statistics-tags to mkvmerge.


๐ŸŽž๏ธ ugoira.mkvmerge-mtime

Type: bool

Default: false

Description: Set the date segment information field of files processed with mkvmerge.

Note: requires mkvmerge version 95.0 or higher ๐Ÿ’€

๐ŸŽž๏ธ ugoira.mkvmerge-output

Type: bool

Default: false

Description: Enable mkvmerge output.


๐ŸŽž๏ธ ugoira.ffmpeg-output

Type:

  • bool
  • string

Default: "error"

Description: Controls ffmpeg output.

  • true โ€” Enable ffmpeg output
  • false โ€” Disable all ffmpeg output
  • any string โ€” Pass -hide_banner and -loglevel with this value as argument to ffmpeg

๐ŸŽž๏ธ ugoira.ffmpeg-twopass

Type: bool

Default: false

Description: Enable Two-Pass encoding. ๐Ÿ”ฅ


๐ŸŽž๏ธ ugoira.framerate

Type: string

Default: "auto"

Description: Controls the frame rate argument (-r) for ffmpeg.

  • "auto" โ€” Automatically assign a fitting frame rate based on delays between frames.
  • "uniform" โ€” Like auto, but assign an explicit frame rate only to Ugoira with uniform frame delays.
  • any other string โ€” Use this value as argument for -r.
  • null or an empty string โ€” Don't set an explicit frame rate.

๐ŸŽž๏ธ ugoira.keep-files

Type: bool

Default: false

Description: Keep ZIP archives after conversion.


๐ŸŽž๏ธ ugoira.libx264-prevent-odd

Type: bool

Default: true

Description: Prevent "width/height not divisible by 2" errors when using libx264 or libx265 encoders by applying a simple cropping filter. See this Stack Overflow thread for more information.

This option, when libx264/5 is used, automatically adds ["-vf", "crop=iw-mod(iw\\,2):ih-mod(ih\\,2)"] to the list of ffmpeg command-line arguments to reduce an odd width/height by 1 pixel and make them even.


๐ŸŽž๏ธ ugoira.metadata

Type:

  • bool
  • string

Default: true

Description: When using "mode": "archive", save Ugoira frame delay data as animation.json within the archive file.

If this is a string, use it as alternate filename for frame delay files.


๐ŸŽž๏ธ ugoira.mtime

Type: bool

Default: true

Description: Set modification times of generated ugoira animations.


๐ŸŽž๏ธ ugoira.repeat-last-frame

Type: bool

Default: true

Description: Allow repeating the last frame when necessary to prevent it from only being displayed for a very short amount of time. โœจ


๐ŸŽž๏ธ ugoira.skip

Type: bool

Default: true

Description: Do not convert frames if target file already exists.


๐Ÿ—œ๏ธ zip.compression

Type: string

Default: "store"

Description: Compression method to use when writing the archive.

Supported Values:

  • "store"
  • "zip"
  • "bzip2"
  • "lzma"

๐Ÿ—œ๏ธ zip.extension

Type: string

Default: "zip"

Description: Filename extension for the created ZIP archive.


๐Ÿ—œ๏ธ zip.files

Type: list of Path

Example:

["info.json"]

Description: List of extra files to be added to a ZIP archive.

Note: relative paths are relative to the current download directory.

๐Ÿ—œ๏ธ zip.keep-files

Type: bool

Default: false

Description: Keep the actual files after writing them to a ZIP archive.


๐Ÿ—œ๏ธ zip.mode

Type: string

Default: "default"

Description:

  • "default" โ€” Write the central directory file header once after everything is done or an exception is raised.
  • "safe" โ€” 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. ๐Ÿ’…

๐Ÿงฉ extractor.modules

Type: list of strings

Default: the modules list in extractor/__init__.py

Example:

["reddit", "danbooru", "mangadex"]

Description: the list of internal modules to load when gallery-dl is out here hunting for a suitable extractor class ๐Ÿ”. Setting this is lowkey a glow-up for your startup time and memory usage, because you're not loading the whole world every single time. slay ๐Ÿ’…


๐Ÿงฉ extractor.module-sources

Type:

  • list of Path instances
  • list of object

Example:

["~/.config/gallery-dl/modules", null]

[ { "from": "~/.config/gallery-dl/modules", "import": ["custom_module1", "custom_module2"] }, null ]

Description: the list of sources to load (external) extractor modules from ๐ŸŒธ.

The following elements are supported:

  • Path โ€” a path to a directory containing custom extractor modules. All files in this directory with a .py filename extension will be imported and searched for extractors, i.e. classes with a pattern attribute.
  • object โ€” an object describing module imports in a specific directory.

The following keys are required:

  • from โ€” a Path to the directory the modules are located in. This directory will be available on the module search path (sys.path) during import.
  • รฌmport โ€” a list of strings of filenames to import. The names must be given without .py extension.
  • null โ€” internal extractors defined in extractor/__init__.py or by extractor.modules.

๐Ÿงฉ extractor.category-map

Type:

  • object (category โ†’ category)
  • string

Example:

{ "danbooru": "booru", "gelbooru": "booru" }

Description: a JSON object mapping category names to their replacements ๐Ÿ—บ๏ธโœจ

Special Values:

  • "compat"
{ "coomer"             : "coomerparty",
  "kemono"             : "kemonoparty",
  "turbo"              : "saint",
  "schalenetwork"      : "koharu",
  "naver-chzzk"        : "chzzk",
  "naver-blog"         : "naver",
  "naver-webtoon"      : "naverwebtoon",
  "pixiv-novel"        : "pixiv",
  "pixiv-novel:novel"  : ["pixiv", "novel"],
  "pixiv-novel:user"   : ["pixiv", "novel-user"],
  "pixiv-novel:series" : ["pixiv", "novel-series"],
  "pixiv-novel:bookmark": ["pixiv", "novel-bookmark"] }

๐Ÿงฉ extractor.config-map

Type:

  • object (src-category โ†’ dest-category)
  • list of [src-category, dest-category] pairs

Default:

{ "coomerparty"  : "coomer",
  "kemonoparty"  : "kemono",
  "giantessbooru": "sizebooru",
  "koharu"       : "schalenetwork",
  "chzzk"        : "naver-chzzk",
  "naver"        : "naver-blog",
  "naverwebtoon" : "naver-webtoon",
  "pixiv"        : "pixiv-novel",
  "saint"        : "turbo" }

Description: duplicate the configuration settings of extractor categories to other names ๐Ÿ‘ฏ

For example, a "naver": "naver-blog" key-value pair will make all naver config settings available for naver-blog extractors as well. iconic behaviour honestly ๐Ÿ’–


๐Ÿงฉ jinja.environment

Type: object (name โ†’ value)

Example:

{ "variable_start_string": "(((", "variable_end_string" : ")))", "keep_trailing_newline": true }

Description: initialization parameters for the jinja Environment object ๐ŸŽ€


๐Ÿงฉ jinja.policies

Type: object (name โ†’ value)

Example:

{ "urlize.rel": "nofollow noopener", "ext.i18n.trimmed": true }

Description: jinja Policies ๐Ÿฆ‹


๐Ÿงฉ jinja.filters

Type: Module

Description: a Python Module containing custom jinja filters โœจ


๐Ÿงฉ jinja.tests

Type: Module

Description: a Python Module containing custom jinja tests ๐ŸŒธ


๐Ÿงฉ globals

Type: Module

Description: a Python Module whose namespace, in addition to the GLOBALS dict in util.py, is used as globals parameter for compiled Expressions_ ๐ŸŒˆ


๐Ÿงฉ cache.file

Type: Path

Default:

  • (%APPDATA% or "~") + "/gallery-dl/cache.sqlite3" on Windows
  • ($XDG_CACHE_HOME or "~/.cache") + "/gallery-dl/cache.sqlite3" on all other platforms

Description: the path of the SQLite3 database used to cache login sessions, cookies and API tokens across gallery-dl invocations ๐Ÿช๐Ÿ’พ

Set this option to ":memory:", null, or an invalid path to disable creating a file for this cache. no file, no notes, no problem bestie ๐Ÿ’…

๐Ÿงฉ environment

Type:

  • object (name โ†’ value)
  • list of [name, value] pairs

Example:

{ "_config" : "~/.config/gallery-dl", "_cookies": "$_config/cookies" }

[ ["_config" , "~/.config/gallery-dl"], ["_cookies", "$_config/cookies"] ]

Description: additional environment variable values that get set during program initialization ๐ŸŒฑ

Note:

  • These can then be used as replacements in Path values.

๐Ÿงฉ environment-expand

Type: bool

Default: true

Description: expand environment variables and tildes ~ in environment values ๐Ÿ”


๐Ÿงฉ filters-environment

Type:

  • bool
  • string

Default: true

Description: evaluate Expressions in a special environment preventing them from raising fatal exceptions ๐Ÿ›ก๏ธ

  • true / "tryexcept" โ€” wrap expressions in a try/except block; evaluate expressions raising an exception as false
  • false / "raw" โ€” do not wrap expressions in a special environment
  • "defaultdict" โ€” prevent exceptions when accessing undefined variables by using a defaultdict

๐Ÿงฉ format-operator-dot

Type: bool

Default: true

Description: in standard Format Strings, allow the dot operator . to function as a general access operator in addition to regular attribute access ๐Ÿ‘‘

  • obj.attribute
  • dict.fieldname
  • list.123

๐Ÿงฉ format-separator

Type: string

Default: "/"

Description: the character(s) used as argument separator in Format String format specifiers ๐ŸŽ€

For example, setting this option to "#" would allow a replacement operation to be Rold#new# instead of the default Rold/new/ โ€” tiny change, huge vibe shift โœจ


๐Ÿงฉ input-files

Type: list of Path

Example:

["~/urls.txt", "$HOME/input"]

Description: additional input files ๐Ÿ“‚


Type: bool

Default: false

Description: when updating the contents of

  • --cookies
  • --input-file-comment
  • --input-file-delete

files, follow symlinks and update their targets ๐Ÿ”—

Otherwise, symlinks are replaced with regular files. so likeโ€ฆ choose wisely bestie ๐Ÿ’€


๐Ÿงฉ signals-ignore

Type: list of strings

Example:

["SIGTTOU", "SIGTTIN", "SIGTERM"]

Description: the list of signal names to ignore, i.e. set SIG_IGN as signal handler for ๐Ÿ™ˆ


๐Ÿงฉ signals-actions

Type: object (signal โ†’ Action(s))

Example:

{ "SIGINT" : "flag download = stop",
  "SIGUSR1": [ "print Received SIGUSR1", "exec notify.sh", "exit 127" ] }

Description: action(s) to perform when a signal is received โšก


๐Ÿงฉ subconfigs

Type: list of Path

Example:

["~/cfg-twitter.json", "~/cfg-reddit.json"]

Description: additional configuration files to load ๐Ÿ“š


๐Ÿงฉ warnings

Type: string

Default: "default"

Description: the Warnings Filter action used for (urllib3) warnings โš ๏ธ


๐Ÿงฉ server.host

Type: string

Default: "127.0.0.1"

Description: host to bind the server/socket to ๐Ÿ–ฅ๏ธ


๐Ÿงฉ server.port

Type: int

Default: 64696

Description: port to bind the server/socket to ๐Ÿ”Œ


๐Ÿงฉ server.key

Type: string

Default: "gallery_dl"

Description: a string that is added to the front of each request to differentiate and avoid random requests sent to the listener from the gallery_dl specific ones ๐Ÿ”‘โœจ


๐Ÿงฉ server.enabled

Type: bool

Default: false

Description: send input URLs to a gallery-dl server queue ๐Ÿ“ฅ


๐Ÿงฉ server.timeout

Type: int

Default: 10

Description: sets maximum timeout before queue ends and turns off the server if queue is empty โณ If set to -1, then the server will run forever โ€” main character energy, never leaving the party ๐Ÿ‘‘

๐Ÿ‘‘ API TOKENS & IDS ๐Ÿ‘‘

okay bestie, this is the part where you go get your little โœจkeysโœจ so gallery-dl can actually talk to some of these sites. it's giving "bureaucracy but make it cute". each one is a string, and yes you literally paste it into your config file. let's go ๐Ÿ’…


๐Ÿ’– extractor.deviantart.client-id & .client-secret

Type: string

How To:

  1. login and visit DeviantArt's Applications & Keys section ๐Ÿ”‘
  2. click "Register Application"
  3. scroll to "OAuth2 Redirect URI Whitelist (Required)" and enter https://mikf.github.io/gallery-dl/oauth-redirect.html
  4. scroll to the bottom and agree to the API License Agreement, Submission Policy, and Terms of Service. (yes you have to actually read-agree, no skipping bestie ๐Ÿ˜ญ)
  5. click "Save"
  6. copy client_id and client_secret of your new application and put them in your configuration file as "client-id" and "client-secret"
  7. clear your cache to delete any remaining access-token entries.
gallery-dl --clear-cache deviantart
  1. get a new refresh-token for the new client-id
gallery-dl oauth:deviantart

๐ŸŒธ extractor.flickr.api-key & .api-secret

Type: string

How To:

  1. login and Create an App in Flickr's App Garden ๐ŸŒท
  2. click "APPLY FOR A NON-COMMERCIAL KEY"
  3. fill out the form with a random name and description and click "SUBMIT" (yes, random. nobody's grading you ๐Ÿ“)
  4. copy Key and Secret and put them in your configuration file as "api-key" and "api-secret"

๐ŸŽ€ extractor.mangadex.client-id & .client-secret

Type: string

How To:

  1. login and go to your User Settings
  2. open the "API Clients" section
  3. click "+ Create"
  4. choose a name
  5. click "โœ”๏ธ Create" (yes the checkmark emoji is literally part of the button, iconic)
  6. wait for approval / reload the page โณ
  7. copy the value after "AUTOAPPROVED ACTIVE" in the form "personal-client-..." and put it in your configuration file as "client-id"
  8. click "Get Secret", then "Copy Secret", and paste it into your configuration file as "client-secret"

๐Ÿฆ‹ extractor.reddit.client-id & .user-agent-oauth

Type: string

How To:

  1. login and visit the apps section of your account's preferences
  2. click the "are you a developer? create an app..." button
  3. fill out the form:
    • choose a name
    • select "installed app"
    • set "redirect uri" to http://localhost:6414/
    • solve the "I'm not a robot" challenge if needed ๐Ÿค–
    • click "create app"
  4. copy the client id (third line, under your application's name and "installed app") and put it in your configuration file as "client-id"
  5. use Python:<application name>:v1.0 (by /u/<username>) as user-agent-oauth and replace <application name> and <username> accordingly (see Reddit's API access rules) ๐Ÿ‘€
  6. clear your cache to delete any remaining access-token entries.
gallery-dl --clear-cache reddit
  1. get a refresh-token for the new client-id
gallery-dl oauth:reddit

๐Ÿซถ extractor.smugmug.api-key & .api-secret

Type: string

How To:

  1. login and Apply for an API Key
  2. fill out the form:
    • choose a random name and description
    • set "Type" to "Application"
    • set "Platform" to "All"
    • set "Use" to "Non-Commercial"
    • tick the two checkboxes at the bottom โ˜‘๏ธโ˜‘๏ธ
    • click "Apply"
  3. copy API Key and API Secret and put them in your configuration file as "api-key" and "api-secret"

๐Ÿงš extractor.tumblr.api-key & .api-secret

Type: string

How To:

  1. login and visit Tumblr's Applications section
  2. click "Register application"
  3. fill out the form:
    • choose a random name and description
    • set "Application Website" to https://example.org/
    • set "Default callback URL" to https://example.org/
    • solve the "I'm not a robot" challenge ๐Ÿค–
    • click "Register"
  4. click "Show secret key" (below "OAuth Consumer Key")
  5. copy your OAuth Consumer Key and Secret Key and put them in your configuration file as "api-key" and "api-secret"

it's giving certified developer, honestly. go get those keys bestie, you got this ๐Ÿ’œ

๐ŸŒˆ CUSTOM TYPES ๐ŸŒˆ

okay bestie, these are the lil building-block types that get reused ALL over every config file ๐Ÿ’– each one is literally the same shape every time it shows up, so once you know them you know them. periodt.


๐ŸŽ€ Date ๐ŸŽ€

Type:

  • string
  • integer

Example:

  • "2019-01-01"
  • "2019-01-01 03:00:00"
  • "2019-03-08T12:30:00Z"
  • 1546297200

Description:

A Date value is literally one specific point in time, like a screenshot of the clock ๐Ÿ“ธ

  • if you hand it a string, it gets parsed according to ISO 8601
  • if you hand it an integer, it's read as a UTC timestamp

โณ Duration โณ

Type:

  • float
  • list with 2 floats
  • string

Example:

  • 2.85
  • [1.5, 3.0]
  • "2.85", "1.5-3.0"

Description:

A Duration is a span of time, measured in seconds โฑ๏ธ

  • if it's a single float, that's justโ€ฆ the value. used exactly as-is.
  • if it's a list with 2 floating-point numbers a & b, it gets randomly chosen with a uniform distribution such that a <= N <= b (peep random.uniform() bestie, that's the vibe)
  • if it's a string, it can be either a single float value ("2.85") or a range ("1.5-3.0")

๐Ÿ“ˆ Duration+ ๐Ÿ“ˆ

Type:

  • Duration
  • string

Example:

  • "1.5-3.0"
  • "lin=5"
  • "lin:20=30-60"
  • "exp:1.8=40"

Description:

A Duration value, but make it extra โœจ

When it's given as a string, you can optionally prefix it with lin[:START[:MAX]]= for linear growth, or exp[:BASE[:START[:MAX]]]= for exponential growth.


๐Ÿ Module ๐Ÿ

Type:

  • string
  • Path

Example:

  • "gdl_utils"
  • "~/.local/share/gdl/"
  • "~/.local/share/gdl_utils.py"

Description:

A Python Module ๐Ÿซถ

This can be one of:

  • the name of an importable Python module
  • the Path to a Python package
  • the Path to a .py file

See Python/Modules for details.


๐Ÿ“‚ Path ๐Ÿ“‚

Type: string

Example:

  • "file.ext"
  • "~/path/to/file.ext"
  • "$HOME/path/to/file.ext"
  • "C:\\path\\to\\file.ext"

Description:

A Path is a string representing the location of a file or directory. Simple tilde expansion and environment variable expansion is supported. yes bestie it does the ~ thing for you ๐Ÿ’…

Note:

In Windows environments, both backslashes \ as well as forward slashes / can be used as path separators.

However โ€” and this part matters, don't skip it ๐Ÿ˜ญ โ€” since backslashes are JSON's escape character, they themselves must be escaped as \\.

For example, a path like C:\path\to\file.ext has to be specified as

  • "C:\\path\\to\\file.ext" when using backslashes
  • "C:/path/to/file.ext" when using forward slashes

in a JSON file.


๐Ÿ“‚โœจ Path+ ๐Ÿ“‚โœจ

Type:

  • Path
  • list of Format Strings

Example:

  • "file.ext"
  • [":b", "{category}", "{user}.sqlite3"]
  • [":~", "gdl", "{category}", "{user}.sqlite3"]
  • [":$HOME", "gdl", "{category}", "{user}.sqlite3"]
  • ["/opt", "archives", "{category}", "{user}.sqlite3"]
  • ["C:", "archives", "{category}", "{user}.sqlite3"]
  • ["\\\\server\\archives", "{category}", "{user}.sqlite3"]

Description:

A Path that supports path-restricted Format String expansion when given as a list of string values. it's giving โœจfancyโœจ

Use a string starting with : as first list element to prefix the path with one of the following:

  • ":", ":b", ":base" โ€” base-directory
  • ":d", ":dir" โ€” base-directory + directory
  • ":~", ":~USER" โ€” home directory (os.path.expanduser)
  • ":$ENV" ($ + environment variable name) โ€” value of environment variable

Use <drive-letter>: or \\ on Windows or / on other platforms as starting characters of the first list element to interpret this as an absolute path.

Otherwise it is interpreted as a path relative to the current working directory.


๐Ÿ“ Logging Configuration ๐Ÿ“

Type: object

Example:

{ "format"     : "{asctime} {name}: {message}",
  "format-date": "%H:%M:%S",
  "path"       : "~/log.txt",
  "encoding"   : "ascii",
  "defer"      : true }

{ "level" : "debug",
  "format": { "debug"  : "debug: {message}",
              "info"   : "[{name}] {message}",
              "warning": "Warning: {message}",
              "error"  : "ERROR: {message}" } }

Description:

Extended logging output configuration. here's every knob, one by one ๐Ÿ”ง

  • format
    • General Format String for logging messages, or an object with Format Strings for each loglevel.
    • In addition to the default LogRecord attributes, it is also possible to access the current extractor, job, path, and keywords objects and their attributes, for example "{extractor.url}", "{path.filename}", "{keywords.title}"
    • Default: "[{name}][{levelname}] {message}" for logfile, "{message}" for unsupportedfile and errorfile
  • format-date
    • Format string for {asctime} fields in logging messages (see strftime() directives)
    • Default: "%Y-%m-%d %H:%M:%S"
  • level
    • Minimum logging message level (one of "debug", "info", "warning", "error", "exception")
    • Default: "info"
  • path
    • Path to the output file
  • mode
    • Mode in which the file is opened; use "w" to truncate or "a" to append (see open())
    • Default: "w" for logfile and unsupportedfile, "a" for errorfile
  • encoding
    • File encoding
    • Default: "utf-8"
  • defer
    • Defer file opening/creation until writing the first logging message
    • Default: false for logfile, true for unsupportedfile and errorfile

Note:

path, mode, encoding, and defer are only applied when configuring logging output to a file. (See logging.FileHandler)


๐Ÿงฉ Postprocessor Configuration ๐Ÿงฉ

Type: object

Example:

{ "name": "mtime" }

{ "name"  : "metadata/print@prepare",
  "format": "{id}: {date}" }

{ "name"       : "zip",
  "compression": "store",
  "extension"  : "cbz",
  "filter"     : "extension not in ('zip', 'rar')",
  "whitelist"  : ["mangadex", "exhentai", "nhentai"] }

Description:

An object containing a "name" attribute specifying the post-processor type, as well as any of its options. ๐Ÿ’…

  • It is possible to set a "filter" Condition similar to file-filter to only run a post-processor conditionally.
  • It is possible set a "whitelist" or "blacklist" to only enable or disable a post-processor for the specified extractor categories.
  • It is possible to specify a post-processor's mode & event as part of its name by adding /MODE & @EVENT. For example
    • "name": "metadata/jsonl@post"
    • "name": "ugoira/archive"
    • "name": "exec@error"
  • It is possible to inherit options from a post-processor preset defined in the global postprocessor block by using "type": "NAME". For example
{ "extractor": {
      "postprocessors": {
          "#": "inherit from 'jl' preset",
          "type": "jl",
          "filename": "meta.jsonl"
      }
  },

  "postprocessor": {
      "jl": { "name": "metadata/jsonl", "open": "a" }
  }
}

โญ Available Post-Processor Types โญ

  • actions โ€” Perform Action(s)
  • classify โ€” Categorize files by filename extension
  • compare โ€” Compare versions of the same file and replace/enumerate them on mismatch (requires downloader.*.part = true and extractor.*.skip = false)
  • directory โ€” Reevaluate directory Format Strings
  • exec โ€” Execute external commands
  • hash โ€” Compute file hash digests
  • metadata โ€” Write metadata to separate files
  • mtime โ€” Set file modification time according to its metadata
  • python โ€” Call Python functions
  • rename โ€” Rename previously downloaded files
  • ugoira โ€” Convert Pixiv Ugoira to WebM using ffmpeg
  • zip โ€” Store files in a ZIP archive

๐ŸŽฌ Action ๐ŸŽฌ

Type: string

Example:

  • "exit"
  • "print Hello World"
  • "raise AbortExtraction an error occured"
  • "flag file = terminate"
  • "keyword title Hello World"
  • ["print Exiting", "exit 1"]

Description:

An Action is parsed as Action Type followed by (optional) arguments:

<type> <arg1> <arg2> โ€ฆ

It is possible to specify more than one action by providing them as a list: ["<action1>", "<action2>", โ€ฆ]

Supported Action Types:

  • status: Modify job exit status. Expected syntax is <operator> <value> (e.g. = 100). Supported operators are = (assignment), & (bitwise AND), | (bitwise OR), ^ (bitwise XOR).
  • level: Modify severity level of the current logging message. Can be one of debug, info, warning, error or an integer value. Use 0 to ignore a message (level = 0).
  • print: Write argument to stdout.
  • exec: Run a shell command.
  • abort: Stop the current extractor run.
  • terminate: Stop the current extractor run, including parent extractors.
  • restart: Restart the current extractor run.
  • raise: Raise an exception. This can be an exception defined in exception.py or a built-in exception (e.g. ZeroDivisionError)
  • flag: Set a flag. Expected syntax is <flag>[ = <value>] (e.g. post = stop). <flag> can be one of file, post, child, download, clear. <value> can be one of stop, abort, terminate, restart, skip, pause, toggle, clear (default stop)
  • keyword: Set a keyword value
  • wait: Sleep for a given Duration or wait until Enter is pressed when no argument was given.
  • exit: Exit the program with the given argument as exit status.

๐Ÿงฎ Expression ๐Ÿงฎ

Type: string

Example:

  • "1 + 2 + 3"
  • "str(id) + '_' + title"
  • "' - '.join(tags[:3]) if tags else 'no tags'"

Description:

A Python Expression is a combination of values, variables, operators, and function calls that evaluate to a single value. ngl it's just girl math, but for code ๐Ÿ’€

Reference:


โ“ Condition โ“

Type:

  • Expression
  • list of Expressions

Example:

  • "not is_watching"
  • "locals().get('optional')"
  • "date >= datetime(2025, 7, 1) or abort()"
  • ["width > 800", "0.9 < width/height < 1.1"]

Description:

A Condition is an Expression whose result is evaluated as a type-bool value. basically: is it a yes or a no bestie ๐Ÿซถ


๐ŸŽ€ Format String ๐ŸŽ€

Type: string

Example:

  • "foo"
  • "{username}"
  • "{title} ({id}).{extension}"
  • "\fF {title.title()} ({num:>0{len(str(count))}} / {count}).{extension}"

Description:

A Format String allows creating dynamic text by embedding metadata values directly into replacement fields marked by curly braces {...}. it's literally the most iconic part of the whole config, iykyk ๐Ÿ’–

Reference:


๐Ÿ’€ BUGS ๐Ÿ’€

found something cursed? bestie, please tell someone, don't just sit there ๐Ÿ˜ญ

๐Ÿ‘‘ AUTHORS ๐Ÿ‘‘


these people ate and left absolutely no crumbs โœจ๐Ÿซถ

โœจ SEE ALSO โœจ

okay bestie, you made it to the end, and there's literally only one thing left to point you at ๐Ÿซถ

  • gallery-dl(1) โ€” the actual main character ๐Ÿ‘‘ like, the whole command-line tool this config file is out here serving. go read that one for the โœจ vibes โœจ of running it, and let this page be the backstage pass to all the config keys ๐Ÿ’…

and that's a wrap, my love!!! ๐ŸŽ€ you just read the whole entire GALLERY-DL.CONF(5) man page, every last option, every last default, no skips, no cap ๐Ÿ’– this version was 1.32.14, dated 2026-09-27, and honestly? iconic of you to get here ๐ŸŒธ now go configure something beautiful, bestie โ€” you've earned it โœจ๐Ÿฆ‹๐Ÿ’œ

๐Ÿ“ฆ where this page comes from