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-directoryparent-metadataparent-sessionparent-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 downloadsfalseโ 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.0for animepictures,0otherwise - 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 orexp[:BASE[:START[:MAX]]]for exponential growth. - Note:
linandexpcan be any starting characters oflinearandexponential. so likel,li,lin,line,linea, orlinearโ 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 Requestsresponse before retrying the request. the site said "chill" so we chill ๐ญ If this is a string, its Duration value can be prefixed withlin[:START[:MAX]]for linear orexp[: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"โ instagram0โ 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 startfalse|"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 ๐
- Type:
extractor.*.inputโจ๏ธ- Type: bool
- Default:
trueif stdin is attached to a terminal,falseotherwise - 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
.netrcauthentication 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.txtfile:
- The Path to a Mozilla/Netscape format
- Type:
"~/.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.cookiesas 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.txtformat.- If this is a Path, write cookies to the given file path.
- If this is
trueandextractor.*.cookiesspecifies the Path of a validcookies.txtfile, update its contents.
- Type:
extractor.*.proxy๐- Type:
- string
- object (scheme โ proxy)
- Example:
- Type:
"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://hostas 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.
- Type:
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"
"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:firefoxffchromecrgallery-dlgdlgoogle-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;nullotherwise - 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".
requestsandurllib3only 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:
falsefor 4archive, 4chanarchives, archivedmoe, arena, nsfwalbum, pholder, tumblrgallery;trueotherwise - Description: Whether to send a
Refererheader. ๐
- Type:
Okay so, back to the description of that referer option we were literally mid-way through, no skipping ๐ซถ
- Send
Refererheaders with all outgoing HTTP requests. - If this is a string, send it as
Refererinstead 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:: jsonmarkup 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
Pathof 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, orPath+ - 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 (seePath+) โ 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:
fileafterskip
โจ 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:
""whenarchive-tableis 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
mtimepost processor atextractor.postprocessors, - a
zippost processor atextractor.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:
2xxcodes (success responses) and3xxcodes (redirection messages) will never be retried and always count as success, regardless of this option.5xxcodes (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. HideAuthorization,Cookie, andSet-Cookievalues."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.gifversion as primary URL and provide the.mp4one as fallback."check"โ Check whether a.gifversion is available by sending an extraHEADrequest.falseโ Always download the.mp4version.
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:
charactersattacksdefenses
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 subfoldersfalseโ 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
- Type: string
- Default:
"https://bsky.social"if a username is provided"https://api.bsky.app"otherwise
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"ifrepostsorquotedis 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:
infoavatarbackgroundpostsrepliesmediavideolikes
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 fromcom.atproto.repo.listRecords. requires no login and lets you access the likes of all users, but it burns onegetPostThreadrequest per post."getActorLikes"uses the results fromapp.bsky.feed.getActorLikes. requires login and only lets you access your own likes. pick your fighter ๐ฅ
- Type:
extractor.bluesky.metadataโ pull extra metadata, obviously.- Type:
boolstringlist of strings
- Default:
false - Example:
"facets,user"["facets", "user"]
- Description: the values are
facets(hashtags, mentions, uris) anduser(detailed user metadata for the user referenced in the input URL, viaapp.bsky.actor.getProfile). โจ
- Type:
extractor.bluesky.likes.depthโ sets the maximum depth of returned reply posts.- Type:
integer - Default:
0 - Description: (see the
depthparameter ofapp.bsky.feed.getPostThread)
- Type:
extractor.bluesky.quotedโ fetch media from quoted posts.- Type:
bool - Default:
false
- Type:
extractor.bluesky.repostsโ process reposts. yes, we're going there.- Type:
bool - Default:
false
- Type:
extractor.bluesky.videosโ download videos.- Type:
bool - Default:
true
- Type:
extractor.boosty.allowedโ request only available posts.- Type:
bool - Default:
true
- Type:
extractor.boosty.boughtโ request only purchased posts for feed results. ๐ธ- Type:
bool - Default:
false
- Type:
extractor.boosty.metadataโ provide detailed user metadata.- Type:
bool - Default:
false
- Type:
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:
boollist 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)
- Type:
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.
- Type:
extractor.bunkr.endpointโ the API endpoint for retrieving file URLs.- Type:
string - Default:
"/api/_001_v2"
- Type:
extractor.bunkr.tldsโ controls which bunkr TLDs to accept.- Type:
bool - Default:
false - Description:
trueโ match URLs with all possible TLDs (e.g.bunkr.xyzorbunkrrr.duck)falseโ match only URLs with known TLDs
- Type:
extractor.[chevereto].passwordโ password value(s) used to access protected albums. ๐- Type:
stringlist of strings
- Default:
null - Example:
pw1,pw2,foobar["pw1", "pw2", "foobar"]
- Type:
extractor.cien.filesโ decides the type and order of files to download.- Type:
list of strings - Default:
["image", "video", "download", "gallery"] - Available Types:
imagevideocoverdownloadgallery
- Type:
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.
- Type:
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. ๐
- Type:
extractor.civitai.filesโ determines the type and order of files to download when processing models.- Type:
list of strings - Default:
["image"] - Available Types:
modelimagegallery
- Type:
extractor.civitai.includeโ a (comma-separated) list of subcategories to include when processing a user profile.- Type:
stringlist of strings
- Default:
["user-images", "user-videos"] - Supported Values:
user-modelsuser-postsuser-imagesuser-videosuser-collections
- Note: you can use
"all"instead of listing all the values separately. ๐ซ and if you want a more complete set of metadata likemodel['name']andpost['title'], includeuser-modelsanduser-postsalong with the defaultuser-imagesanduser-videos:
- Type:
["user-models", "user-posts", "user-images", "user-videos"]
extractor.civitai.metadataโ extract additional metadata.- Type:
boolstringlist of strings
- Default:
false - Example:
"generation,tags,post,version"["version", "generation"]
- Supported Values:
generationposttagsversion
- Note: this requires 1 additional API request for each selected value, per image or video. so like, budget accordingly bestie ๐ญ
- Type:
extractor.civitai.nsfwโ download NSFW-rated images. ๐- Type:
boolstring("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, while3 (1|2)would return only None and Soft rated images.
- for
- Note: requires
api-keyor authenticated cookies to allow NSFW content.
- Type:
extractor.civitai.periodโ sets theperiodparameter when paginating over results.- Type:
string - Default:
"AllTime" - Supported Values:
"AllTime""Year""Month""Week""Day"
- Type:
extractor.civitai.sortโ sets thesortparameter 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").
- Type:
extractor.civitai.qualityโ a (comma-separated) list of image quality options to pass with every image URL.- Type:
stringlist 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. ๐
- Type:
extractor.civitai.quality-videosโ a (comma-separated) list of video quality options to pass with every video URL.- Type:
stringlist 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.
- Type:
extractor.civitai.quality-fallbackโ video quality options to pass with video fallback URLs.- Type:
string - Default:
"transcode=true,original=true,quality=100"
- Type:
extractor.civitai.search-images.tokenโ authorization header value used for/multi-searchqueries. ๐ซ- Type:
string - Default:
"8c46eb2508e21db1e9828a97968d91ab1ca1caa5f70a00e88a2ba1e286603b61"
- Type:
extractor.coomer.filesโ determines the type and order of files to be downloaded.- Type:
list of strings - Default:
["file", "attachments", "inline"] - Available Types:
fileattachmentsinline
- Type:
extractor.clonr.zipโ download folder content as a single ZIP archive instead of individual files. ๐ฆ- Type:
bool - Default:
false
- Type:
extractor.cosmos.formatโ selects the file type of downloaded images.- Type:
string
- Default:
"jpeg" - Example:
"avif"
- Type:
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.
- Type:
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()).
- Type:
extractor.cyberfile.recursiveโ recursively download files from subfolders. ๐- Type:
bool - Default:
true
- Type:
extractor.[Danbooru].externalโ for unavailable or restricted posts, follow the source and download from there if possible.- Type:
bool - Default:
false
- Type:
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
- Type:
extractor.[Danbooru].ugoiraโ controls the download target for Ugoira posts.- Type:
bool - Default:
false - Description:
trueโ ZIP archivesfalseโ converted video files
- Type:
extractor.[Danbooru].metadataโ extract additional metadata (notes, artist commentary, parent, children, uploader). ๐- Type:
boolstringlist of strings
- Default:
false - Example:
"replacements,comments,ai_tags"["replacements", "comments", "ai_tags"]
- Type:
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:
stringinteger
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:
boolstring
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:
stringlist 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:
avatarbackgroundgalleryscrapsjournalfavoritestatus
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:
boolstringlist 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 availablestatsโ deviation statisticssubmissionโ submission informationcollectionโ 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:
boolstring
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 whenhas_moreis false."manual"โ disregardhas_moreand 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:
integerstring
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 updatingarchive-formatfor 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.
extractor.directlink.transform
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:
boolstringlist 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:
stringinteger
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-dlwill stop after the first batch. The value cannot be less than1.
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"โ usee-hentai.orgorexhentai.orgdepending on the input URL"e-hentai.org"โ usee-hentai.orgfor all URLs"exhentai.org"โ useexhentai.orgfor 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, andtorrents - provides exact date and filesize (not the vague vibes version)
- adds
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.torrentfiles
extractor.exhentai.tags ๐
- Type:
bool - Default:
true - Description: groups tags by type and hands them over as
tags_<type>metadata fields โ liketags_artistortags_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
-1for 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:
infoavatarphotosalbums
- 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:
boolstring
- 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:
boolstring
- 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"โ liketrue, 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:
boolstring- list of strings
- Default:
false - Example:
user,plan,comments["user", "plan", "comments"]
- Description: extracts plan and extended user metadata.
- Supported Fields:
commentsplanuser
- Note:
commentscan also be enabled viafanbox.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"
- Description: the
authorizationheader value used for requests tohttps://apiv3.fansly.com/apito access locked content. ๐
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_tokenandaccess_token_secretvalues 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
setandpoolmetadata. - Note: this requires 1 additional API call per photo. see
flickr.photos.getAllContextsfor details.
extractor.flickr.exif ๐
- Type:
bool - Default:
false - Description: for each photo, returns its EXIF/TIFF/GPS tags as
exifandcamerametadata. - Note: this requires 1 additional API call per photo. see
flickr.photos.getExiffor details.
extractor.flickr.info โจ
- Type:
bool - Default:
false - Description: for each photo, retrieves its
"full"metadata as provided byflickr.photos.getInfo - Note: this requires 1 additional API call per photo.
extractor.flickr.metadata ๐ธ
- Type:
boolstring- 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.getInfofor details.
extractor.flickr.size-max ๐
- Type:
integerstring
- 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 ๐ฆ
- Type:
string - Default:
null - Description: transform image URLs.
"download"โ download URLs (e.g.https://live.staticflickr.com/123/456789_abcdef_o_d.jpg)
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:
galleryscrapsfavoritejournals
- 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)
- Type:
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.
- Type:
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.
- Type:
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 Unauthorizederrors. ๐ 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.
- Type:
extractor.gofile.recursiveโ subfolder expedition ๐ธ- Type:
bool - Default:
true - Description: Recursively download files from subfolders. yes queen, dig deep.
- Type:
extractor.gofile.saltโ extra seasoning ๐ง- Type:
string - Description: Alternate salt value used during website token generation.
- Type:
extractor.hdoujin.cbzโ one gallery, one file, so tidy ๐- Type:
bool - Default:
false - Description: Download each gallery as a single
.cbzfile. - Note: Requires a token โ ๏ธ
- Type:
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
crtquery 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
crtvalue
- Note: You will also need your browser's user-agent ๐ซ don't forget bestie.
- Type:
extractor.hdoujin.formatโ pick your resolution era โจ- Type:
stringlist 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).
- Type:
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 exampletags_artistortags_character.
- Type:
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.orgto access favorite galleries or download.cbzarchives.
- Type:
extractor.hentaifoundry.descriptionsโ how do we want the lore formatted ๐- Type:
string - Default:
"text" - Description: Controls the format of
descriptionmetadata fields."text"Plain text with HTML tags removed"html"Raw HTML content
- Type:
extractor.hentaifoundry.includeโ choose your subcategories ๐ฆ- Type:
stringlist 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:
picturesscrapsstoriesfavorite
- Note: It is possible to use
"all"instead of listing all values separately. shortcut queen ๐
- Type:
extractor.hitomi.formatโ webp girlie or avif girlie? ๐ธ- Type:
string - Default:
"webp" - Description: Selects which image format to download.
- Available Formats:
"webp""avif"
- Type:
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/authorizationfor instructions on how to generate such a token. go read it bestie, it's giving tutorial energy ๐
- Type:
extractor.imgur.client-idโ custom ID moment โจ- Type:
string - Description: Custom Client ID value for API requests.
- Type:
extractor.imgur.mp4โ gif or mp4, the eternal question ๐ฌ- Type:
boolstring
- Default:
true - Description: Controls whether to choose the GIF or MP4 version of an animation.
trueFollow Imgur's advice and choose MP4 if theprefer_videoflag in an image's metadata is set.falseAlways choose GIF."always"Always choose MP4.
- Type:
extractor.inkbunny.orderbyโ sorting the search results ๐ซ- Type:
string - Default:
"create_datetime" - Description: Value of the
orderbyparameter for submission searches. - (See API#Search for details)
- Type:
๐ฆ extractor.instagram (the big one, buckle up)
extractor.instagram.audioโ sound on or sound off ๐- Type:
boolstring
- Default:
false - Description: Controls audio download behavior.
true|"dash"|"ytdl"Download audio fromdash_manifestdata using ytdl when available and a non-DASH format otherwise"merged"Download non-DASH formatsfalseDo not download audio files
- Type:
extractor.instagram.cursorโ where do we even start ๐- Type:
boolstring
- Default:
true - Example:
"3414259811154179155_25025320" - Description: Controls from which position to start the extraction process from.
trueStart from the beginning. Log the most recent cursor value when interrupted before reaching the end.falseStart from the beginning.- any string Start from the position defined by this value.
- Type:
extractor.instagram.includeโ the subcategory menu ๐ฝ๏ธ- Type:
stringlist 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:
postsreelstaggedstorieshighlightsinfoavatar
- Note: It is possible to use
"all"instead of listing all values separately. ๐
- Type:
extractor.instagram.max-postsโ cap it off ๐ข- Type:
integer - Default:
null - Description: Limit the number of posts to download.
- Type:
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.
- Type:
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, usecount - num + 1. ๐ง write that down.
- Type:
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.
- Type:
extractor.instagram.pinnedโ pinned posts stay winning ๐- Type:
bool - Default:
true - Description: Process pinned posts.
- Type:
extractor.instagram.previewsโ the little teasers ๐๏ธ- Type:
boolstringlist of strings
- Default:
false - Example:
"video"["audio", "video"]
- Description: Download video previews and audio covers.
- Type:
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.
- Type:
extractor.instagram.user-cacheโ where do we stash the user data ๐๏ธ- Type:
boolstring
- 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 afterEXPseconds.false|"memory"Cache user data in memory
- Type:
extractor.instagram.user-strategyโ the strategy lineup ๐ฏ- Type:
stringlist 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"Useweb_profile_infoAPI results (high likelihood of429 Too Many Requestserrors) ๐ญ yeah that one's risky"web"|"webpage"Extract minimal user information from profile webpage
- Type:
extractor.instagram.videosโ video download behavior, part two ๐ฅ- Type:
boolstring
- Default:
true - Description: Controls video download behavior.
true|"dash"|"ytdl"Download videos fromvideo_dash_manifestdata using ytdl"merged"Download pre-merged video formatsfalseDo not download videos
- Type:
extractor.instagram.warn-imagesโ the "bestie this is small" warning ๐จ- Type:
boolstring
- Default:
true - Description: Show a warning when downloading images with a resolution smaller than the original.
trueShow 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 resolutionfalseDo not show a warning
- Type:
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.
- Type:
extractor.instagram.wdโ the cookie situation ๐ช- Type:
boolstring
- Default:
false - Description: Controls how to handle
wdcookies, which possibly limit the dimensions of returned photos.trueKeepwdcookiefalseUnset/deletewdcookie- any string Set
wdcookie to this value
- Type:
extractor.instagram.stories.splitโ one story element per post, periodt ๐- Type:
bool
- Default:
false - Description: Split stories elements into separate posts.
- Type:
extractor.itaku.includeโ pick your subcategories, itaku edition ๐- Type:
stringlist of strings
- Default:
"gallery" - Example:
"stars,gallery"["stars", "gallery"]
- Type:
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:
gallerypostsfollowersfollowingstars
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-imagesuser-videosuser-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:
webmmp4gif
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 duplicatesfalseโ 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:
fileattachmentsinline
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.zipfile. ๐๏ธ
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 gifsfalseโ 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}/feedand/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-dlcomes with built-in tokens formastodon.social,pawoo, andbaraag. ๐ 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:
infoavatarbackgroundnotes
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, defaultfalse. Grabs media from renoted notes. yes bestie, the boosts count ๐extractor.[misskey].repliesโ bool, defaulttrue. Also pulls media out of replies to other notes. it's giving thorough โจextractor.[misskey].text-postsโ bool, defaultfalse. This one drags in text-only notes too, even the ones with zero media. lowkey completist behaviour ๐
extractor.[moebooru].pool.metadataโ bool, defaultfalse. 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-collectionsuser-picturesuser-albums
psst โ you can just write "all" instead of listing every value separately, iykyk ๐ซถ
extractor.naver-blog.videosโ bool, defaulttrue. Downloads the videos. slay ๐extractor.naver-chzzk.offsetโ integer, default0. A custom offset starting value for when you're paginating over comments. main character positioning โจextractor.newgrounds.flashโ bool, defaulttrue. 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:
artaudiogamesmovies
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:
illustrationdoujinfavoritenuita
and again, "all" > listing them all out. periodt ๐
extractor.[nitter].fallback-retriesโ integer, default2. How many times fetching a Tweets results page gets retried after an empty response comes back. set it to-1for infinite retries if you're feeling chaotic ๐ฅextractor.[nitter].quotedโ bool, defaultfalse. Fetches media from quoted Tweets. quote-tweet the media, it's canon now โจextractor.[nitter].retweetsโ bool, defaultfalse. Fetches media from Retweets.extractor.[nitter].videosโ type is bool or string, defaulttrue. Controls video download behaviour:trueโ download videos"ytdl"โ download videos using ytdlfalseโ skip video Tweets
extractor.oauth.browserโ bool, defaulttrue. Controls how you get sent over to the OAuth authorization page:trueโ uses Python'swebbrowser.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, defaulttrue. 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, default6414. 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, defaultnull. 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, defaultfalse. Gives you complete creator post metadata by fetching extra data with an additional API request for each post. includesoriginalFilename, comments, links, tags, ๐ซถextractor.onlyhaven.metadataโ bool, defaulttrue. Extractsusernameanduser_profilemetadata. the essentials ๐extractor.pawchive.archivesโ bool, defaultfalse. Extracts additional metadata for archives files, includingfile,file_list, andpassword.
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, defaultfalse. Extracts comments metadata.
note: this needs 1 additional HTTP request per post. the receipts cost requests ๐ญ
extractor.pawchive.deferredโ type is bool or string, defaulttrue. 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, defaultnull. 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, defaultfalse. Controls how duplicate files in a post get handled.
Examples:
"attachment,inline"["file", "attachment"]
Behaviour:
trueโ download duplicatesfalseโ 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, defaultfalse. 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 areartistandpost. 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:
fileattachmentsinline
extractor.pawchive.max-postsโ integer, defaultnull. Limits the number of posts to download. when you simply cannot do the whole archive today ๐extractor.pawchive.metadataโ bool, defaulttrue. Extractsusernameanduser_profilemetadata.extractor.pawchive.originalโ bool, defaulttrue. Downloads original files. turn this off and it downloads thumbnails/previews instead, if those are available.extractor.pawchive.previewsโ bool, defaultfalse. Downloads thumbnails/previews for files marked aspreview_only, and provides preview fallbacks for original files. cover for the ones that ghost you ๐ซถextractor.pawchive.revisionsโ type is bool or string, defaultfalse. 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, defaultfalse. Extracts additional metadata (source,uploader).
note: 1 additional HTTP request per post. ๐
extractor.patreon.cursorโ type is bool or string, defaulttrue. 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:
postfileimagesimage_largeattachmentscontent
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, default0. 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.
- Type:
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.
- Type:
extractor.[philomena].comments๐ฌ- Type:
bool - Default:
false - Description: Extract comments metadata.
- Type:
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_urlversion of those posts instead.
- When this option is disabled, it'll try to download the
- Type:
extractor.pillowfort.external๐- Type:
bool - Default:
false - Description: Follow links out to external sites โ like Twitter, for example.
- Type:
extractor.pillowfort.inlineโจ- Type:
bool - Default:
true - Description: Extract inline images.
- Type:
extractor.pillowfort.reblogs๐- Type:
bool - Default:
false - Description: Extract media from reblogged posts.
- Type:
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.
- Setting this to
- Type:
extractor.pinterest.sections๐งท- Type:
bool - Default:
true - Description: Include pins that live in board sections.
- Type:
extractor.pinterest.stories๐ธ- Type:
bool - Default:
true - Description: Extract files from story pins.
- Type:
extractor.pinterest.videos๐ฌ- Type:
bool - Default:
true - Description: Download from video pins.
- Type:
extractor.pixeldrain.api-key๐- Type:
string - Description: Your account's API key.
- Type:
extractor.pixeldrain.recursive๐- Type:
bool - Default:
true - Description: Recursively download files from subfolders.
- Type:
extractor.pixeldrain.zip๐๏ธ- Type:
bool - Default:
false - Description: Download albums as a single
.zipfile.
- Type:
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:
artworksavatarbackgroundfavoritenovel-usernovel-bookmarksketch
- Note: You can just use
"all"instead of listing every single value out separately. iykyk ๐
- Type:
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 likegppt.
- Type:
extractor.pixiv.metadata๐- Type:
bool - Default:
false - Description: Fetch extended user metadata.
- Type:
extractor.pixiv.metadata-bookmark๐- Type:
bool - Default:
false - Description: For works bookmarked by your own account, fetch bookmark tags as
tags_bookmarkmetadata. - Note: This costs 1 additional API request per bookmarked post. ๐
- Type:
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.
- Type:
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. ๐ญ
- Type:
extractor.pixiv.work.related๐- Type:
bool - Default:
false - Description: Also download related artworks.
- Type:
extractor.pixiv.tags๐ท๏ธ- Type:
string - Default:
"japanese" - Description: Controls the
tagsmetadata field."japanese"โ list of Japanese tags"translated"โ list of translated tags"original"โ the unmodified list with both Japanese and translated tags
- Type:
extractor.pixiv.ugoira๐๏ธ- Type:
boolstring
- Default:
true - Description: Download Pixiv's Ugoira animations.
- These animations come as a
.ziparchive 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)
- These animations come as a
- Type:
extractor.pixiv.max-posts๐ข- Type:
integer - Default:
0 - Description: When downloading galleries, this sets the maximum number of posts to get. A value of
0means no limit.
- Type:
extractor.pixiv.sanity๐ง- Type:
bool - Default:
true - Description: Try to fetch
limit_sanity_levelworks via web API.
- Type:
extractor.pixiv.favorite.cursor๐- Type:
string - Description: Start from the given bookmark ID.
- Type:
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.
- Type:
extractor.pixiv-novel.covers๐ผ๏ธ- Type:
bool - Default:
false - Description: Download cover images.
- Type:
extractor.pixiv-novel.embeds๐งฉ- Type:
bool - Default:
false - Description: Download embedded images.
- Type:
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.
- Type:
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
0means no limit.
- A value of
- Type:
extractor.pixiv-novel.metadata๐- Type:
bool - Default:
false - Description: Fetch extended user metadata.
- Type:
extractor.pixiv-novel.metadata-bookmark๐- Type:
bool - Default:
false - Description: For novels bookmarked by your own account, fetch bookmark tags as
tags_bookmarkmetadata. - Note: This costs 1 additional API request per bookmarked post.
- Type:
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 likegppt.- This can be the same value as
extractor.pixiv.refresh-token.
- This can be the same value as
- Type:
extractor.pixiv-novel.tags๐ท๏ธ- Type:
string - Default:
"japanese" - Description: Controls the
tagsmetadata field."japanese"โ list of Japanese tags"translated"โ list of translated tags"original"โ the unmodified list with both Japanese and translated tags
- Type:
extractor.pixiv-novel.bookmark.cursor๐- Type:
string - Description: Start from the given bookmark ID.
- Type:
extractor.plurk.comments๐ญ- Type:
bool - Default:
false - Description: Also search Plurk comments for URLs.
- Type:
extractor.plurk.external๐- Type:
bool - Default:
false - Description: Follow external links in Plurk posts that aren't hosted on
images.plurk.comorimgs.plurk.com.
- Type:
extractor.plurk.replurk๐- Type:
bool - Default:
false - Description: Process replurked posts in addition to original posts.
- Type:
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.
- Type:
extractor.reactor.gif๐๏ธ- Type:
bool - Default:
false - Description: The format to download animated images in.
- Use
trueto download animated images as gifs, andfalseto download as mp4 videos.
- Use
- Type:
extractor.reddit.api๐งก- Type:
string - Default:
"auto" - Description: Selects which API endpoints to use.
"auto"โ use"oauth"when aclient_idis given,"rest"otherwise."oauth"โ use the OAuth API athttps://oauth.reddit.com- Requires
client-id&user-agent(extractor.reddit.client-id&.user-agent-oauth) and uses a refresh token for authentication.
- Requires
"rest"โ use the REST API athttps://www.reddit.com- Uses cookies for authentication.
- Type:
extractor.reddit.comments๐ฌ- Type:
integer - Default:
0 - Description: The value of the
limitparameter 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
200and500respectively. - The value
0ignores all comments and significantly cuts down the time required when scanning a subreddit. โก
- Reddit's internal default and maximum values for this parameter appear to be
- Type:
extractor.reddit.morecommentsโ- Type:
bool - Default:
false - Description: Retrieve additional comments by resolving the
morecomment stubs in the base comment tree. - Note: This requires 1 additional API call for every 100 extra comments. ๐ญ
- Type:
extractor.reddit.embeds๐งฉ- Type:
bool - Default:
true - Description: Download embedded comments media.
- Type:
extractor.reddit.date-min&.date-max๐- Type:
Date - Default:
0and253402210800(timestamp ofdatetime.max) - Description: Ignore all submissions posted before/after this date.
- Type:
extractor.reddit.id-min&.id-max๐- Type:
string - Example:
"6kmzv2" - Description: Ignore all submissions posted before/after the submission with this ID.
- Type:
extractor.reddit.limit๐ข- Type:
integer - Default:
null - Description: Number of results to return in a single API query.
- This value specifies the
limitparameter used for API requests when retrieving paginated results. nullmeans not including this parameter at all and letting Reddit choose a default.
- This value specifies the
- Type:
extractor.reddit.pinned๐- Type:
bool - Default:
true - Description: Process pinned submissions.
- Type:
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.
- Type:
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 ๐)
- Type:
extractor.reddit.refresh-token๐- Type:
string - Default:
null
- Type:
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:
trueif comments are enabledfalseotherwise
Description: follow links that are chilling inside the original post's selftext โจ
๐ธ extractor.reddit.videos
Type:
boolstring
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:
trueforuser-saved,user-upvoted,user-downvotedfalseotherwise
Description: only process and return posts from the user specified in the input URL. Nobody else gets a crumb ๐
๐ฆ extractor.redgifs.format
Type:
stringlist 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:
stringlist 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:
boolstring
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 onchan.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
crtvalue
Note:
You will also need your browser's user-agent ๐ซถ
๐ extractor.schalenetwork.format
Type:
stringlist 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:
approverartistdatedate_approvedfavoritesourcetagsuploaderviews
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:
stringlist 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:
workssentrequests
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:
stringlist 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:
stringlist of strings
Default: "gallery"
Description: a (comma-separated) list of subcategories to include when processing a user profile.
Supported Values:
galleryfavorite
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:
stringlist 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:
stringlist 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:
stringlist 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:
gifgif_transparentmediumgifgifpreviewtinygiftinygif_transparentmp4tinymp4webmwebpwebp_transparenttinywebptinywebp_transparent
๐ง extractor.tiktok.audio
- Type:
boolstring
- Default:
true - Description: This one runs the whole audio-download situation:
trueโ Download audio tracks"ytdl"โ Download audio tracks using ytdlfalseโ Ignore audio tracks
literally pick ur fighter ๐ซถ
๐ธ extractor.tiktok.covers
- Type:
boolstring
- Default:
false - Description: Download video covers.
trueโ Download the first cover found, checking in this order:thumbnailcoveroriginCoverdynamicCover
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:
boolstring
- 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 RecognitionMTโ Machine TranslationLCโ 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 taggedASRfalseโ 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, anyASRsubtitle +fra-FRof any source type โ nope, not happening.) For that, go look atextractor.*.file-filter. ๐ญ
๐ฅ extractor.tiktok.videos
- Type:
boolstring
- Default:
true - Description: Controls the video download behavior:
trueโ Download videos"ytdl"โ Download videos using ytdlfalseโ 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:
avatarpostsrepostsstorieslikessaved
- 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:
0andnull - 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:
boolstring
- Default:
true - Description:
trueโ Search posts for inline images and videosfalseโ 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"ifdate-maxis 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:
boolstring
- Default:
true - Description:
trueโ Extract media from reblogged postsfalseโ 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
-1for 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:
boolstring- 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 imagesmediaโ Download article media fileshtmlโ Extract article content as htmlmetadata,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:
boolstring
- Default:
false - Description: Controls how Twitter Cards get handled.
falseโ Ignore cardstrueโ 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
- Type:
boolstring
- Default:
false - Description: For input URLs that point to a single Tweet, e.g.
https://twitter.com/i/web/status/<TweetID>, fetch media from all Tweets and replies in this conversationhttps://help.twitter.com/en/using-twitter/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 thect0cookie if present.
๐ฏ extractor.twitter.cursor
- Type:
boolstring
- 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:
infoavatarbackgroundtimelinetweetsmediawith-replieshighlightslikes
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
origlargemediumsmall4096x4096900x900360x360
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_infriends_mutuallocation_accuratename_changessource
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 waitingNtimes until rate limit reset"wait"โ Wait until rate limit reset"wait:N"โ Wait forNseconds
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_repliestimeline while logged in. For example, media from Tweets which the user replied to will also be downloaded. It is possible to exclude unwanted Tweets usingfile-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 themax_idsearch query parameter to the Tweet ID value of the last retrieved Tweet."until"|"date"|"datetime"|"dt"โ Update theuntilsearch 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"โ/tweetstimeline + search"media"โ/mediatimeline + search"with_replies"โ/with_repliestimeline + search"auto"โ"tweets"or"media", depending onretweetsandtext-tweetssettings
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:
"user"โhttps://twitter.com/i/user/{rest_id}"timeline"โhttps://twitter.com/id:{rest_id}/timeline"tweets"โhttps://twitter.com/id:{rest_id}/tweets"media"โhttps://twitter.com/id:{rest_id}/media
Note: to allowgallery-dlto follow custom URL formats, set theblacklistfor"".
extractor.twitter.videos
Type:
boolstring
Default: true
Description:
Control video download behavior. ๐ฅ
trueโ Download videos"ytdl"โ Download videos usingytdlfalseโ 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:
avatargalleryspacescollection- 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
- Type:
extractor.wallhaven.api-keyโ your Wallhaven API Key, bestie. Use it so your account's browsing settings and default filters get applied while searching.- Type:
string - Default:
null - Peep
https://wallhaven.cc/help/apifor more info ๐ฅ
- Type:
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:
uploadscollections
- Note: It is possible to use
"all"instead of listing all values separately. no cap, it just does all of them for you โจ
- Type:
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โฆ ๐ญ
- Type:
extractor.weasyl.api-keyโ your Weasyl API Key, so all your account's browsing settings and filters get used.- Type:
string - Default:
null
- Type:
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.
- Type:
extractor.webtoons.bgmโ download an episode's background music if it's available. ๐ต- Type:
boolstring
- Default:
true - Example:
"aac" - If this is a string, remux the downloaded background music file into the given format.
- Note: requires
ytdlfor downloads andffmpegfor remuxing.
- Type:
extractor.webtoons.qualityโ controls the quality of downloaded files by messing with the URLs'typeparameter. iconic behavior honestly.- Type:
integerstring- 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
falseto completely remove these extension's type parameter - Omit an extension to leave its URLs unchanged
- Set a value to
- Type:
extractor.webtoons.bannersโ download the active comic's banner. ๐- Type:
bool - Default:
false
- Type:
extractor.webtoons.thumbnailsโ download the active episode's thumbnail.- Type:
bool - Default:
false - Super useful for creating CBZ archives with actual source thumbnails ๐
- Type:
extractor.weibo.gifsโ download gif files.- Type:
boolstring
- Default:
true - Set this to
"video"to download GIFs as video files ๐ฌ
- Type:
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:
homefeedvideosnewvideoarticlealbumsubalbums
- Note: it is possible to use
"all"instead of listing all values separately. ๐
- Type:
extractor.weibo.likesโ download from like (่ต่ฟ) posts. ๐- Type:
bool - Default:
false
- Type:
extractor.weibo.livephotoโ download livephoto files. the way these are literally both a pic AND a vid, obsessed.- Type:
boolstring
- Default:
true trueโ Download image & video filesfalseโ Download images only"video"โ Download videos only
- Type:
extractor.weibo.moviesโ download movie videos. ๐ฟ- Type:
bool - Default:
false
- Type:
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
- Type:
extractor.weibo.textโ extract fulltext&text_rawmetadata for statuses with truncated text.- Type:
bool - Default:
false
- Type:
extractor.weibo.videosโ download video files. ๐ฅ- Type:
bool - Default:
true
- Type:
extractor.weibo.album.subalbumsโ extract subalbum media.- Type:
bool - Default:
false
- Type:
extractor.wikimedia.formatโ sets theformatquery parameter value added to all download URLs.- Type:
string - Default:
fandom | wikigg "original" otherwise ""
- Type:
extractor.wikimedia.image-revisionsโ number of revisions to return for a single image.- Type:
integer - Default:
1 - The default value of
1only returns the latest revision. - The value must be between
1and500. 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 โจ
- Type:
extractor.wikimedia.limitโ number of results to return in a single API query.- Type:
integer - Default:
50 - The value must be between
10and500.
- Type:
extractor.wikimedia.subcategoriesโ forCategory:pages, recursively descent into subcategories. ๐ธ- Type:
bool - Default:
true
- Type:
extractor.xasiat.formatโ selects video download format.- Type:
string - Default:
"best" "HD","hd","best","Best Quality"โ"Best Quality"format"SD","sd","480p"โ"SD"format
- Type:
extractor.[xenforo].attachmentsโ extract forum post attachments. ๐- Type:
bool - Default:
true
- Type:
extractor.[xenforo].embedsโ extract URLs of forum post embeds.- Type:
bool - Default:
true
- Type:
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 ๐ญ
- Type:
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)
- Type:
extractor.[xenforo].quotedโ extract files from quoted content.- Type:
bool - Default:
false
- Type:
extractor.xfolio.fullsizeโ download posts' files as Full Size Download ZIP container if available and purchased. ๐- Type:
bool - Default:
true
- Type:
extractor.ytdl.cmdline-argsโ additionalytdloptions 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-dlpoptions /youtube-dloptions ๐
- Type:
extractor.ytdl.config-fileโ location of aytdlconfiguration file to load options from.- Type:
Path - Example:
"~/.config/yt-dlp/config"
- Type:
extractor.ytdl.deprecationsโ allowytdlto warn about deprecated options and features.- Type:
bool - Default:
false
- Type:
extractor.ytdl.enabledโ process URLs otherwise unsupported bygallery-dlwithytdl. the main-character upgrade fr fr ๐- Type:
bool - Default:
false
- Type:
extractor.ytdl.formatโytdlformat selection string.- Type:
string - Default: Default of the
ytdlmodule used. ("bestvideo*+bestaudio/best"foryt_dlp,"bestvideo+bestaudio/best"foryoutube_dl) - See
yt-dlpformat selection /youtube-dlformat selection โญ
- Type:
extractor.ytdl.genericโ enables the use ofytdl's Generic extractor.- Type:
boolstring
- Default:
true - Set this option to
"force"for the same effect as--force-generic-extractor. ๐ฅ
- Type:
extractor.ytdl.generic-categoryโ when usingytdl's Generic extractor, changecategoryto"ytdl-generic"and setsubcategoryto the input URL's domain.- Type:
bool - Default:
true
- Type:
extractor.ytdl.loggingโ routeytdl's output throughgallery-dl's logging system. Otherwise it'll be written directly tostdout/stderr.- Type:
bool - Default:
true - Note: set
quietandno_warningsinextractor.ytdl.raw-optionstotrueto suppress all output. silence unlocked ๐
- Type:
extractor.ytdl.moduleโ theytdlModule to import.- Type:
Module - Default:
null - Example:
"yt-dlp""/home/user/.local/lib/python3.13/site-packages/youtube_dl"
- Setting this to
nullwill try to import"yt_dlp"followed by"youtube_dl"as fallback. ๐ซถ
- Type:
extractor.ytdl.raw-optionsโ additional options passed directly to theYoutubeDLconstructor.- 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"}
- Type:
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 ๐ญ
- Type:
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)
- Type:
extractor.zerochan.redirectsโ automatically follow tag redirects. ๐ซ- Type:
bool - Default:
false
- Type:
extractor.[booru].tagsโ the booru tags option, bestie.- Type:
bool - Default:
false
- Type:
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. ๐ซ
- Type:
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. โจ
- Type:
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 chapterfalseโ start with the first chapter
- Type:
extractor.[manga-extractor].page-reverseโ downloads the pages inside a manga chapter in reverse order. โจ- Type:
bool - Default:
false
- Type:
๐ซถ 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
- Type:
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, orpstuck on the end โ and those suffixes are case-insensitive, so500Kand500kare the same vibe. โจ
- Type:
downloader.*.mtimeโ uses theLast-ModifiedHTTP response headers to set your files' modification times. timestamps stay accurate, we love a well-kept archive. ๐ฐ๏ธ- Type:
bool - Default:
true
- Type:
downloader.*.partโ controls whether.partfiles get used while downloading.- Type:
bool - Default:
true trueโ downloaded data goes into.partfiles and gets renamed on completion. bonus: this mode supports resuming incomplete downloads. iconic. ๐ฅfalseโ no.partfiles, data gets written directly into the actual output files.
- Type:
downloader.*.part-directoryโ alternate location(s) for your.partfiles, if you don't want them chilling next to the outputs.- Type:
Pathobject (Condition โ Path)
- Default:
null - Example:
- Type:
"/tmp/.gdl"
{ "size > 100000": "~/.gdl/part", "duration" : "/tmp/.gdl/video", }
- > note: if this value is
null, or no Conditions apply, the.partfiles 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
nullif you want zero indicator, no progress bar, just vibes. ๐ฆ
- Type:
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, orp, 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.
- Type:
downloader.*.retriesโ max number of retries during file downloads, or-1for infinite retries. living dangerously, periodt.- Type:
integer - Default:
extractor.*.retries
- Type:
downloader.*.timeoutโ connection timeout during file downloads.- Type:
float - Default:
extractor.*.timeout
- Type:
downloader.*.verifyโ certificate validation during file downloads. ๐- Type:
boolstring
- Default:
extractor.*.verify
- Type:
downloader.*.proxyโ the proxy server used for file downloads.- Type:
stringobject (scheme โ proxy)
- Default:
extractor.*.proxy - want no proxy for downloads? explicitly set this option to
null. that's it. bye proxy. ๐
- Type:
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 calledexample.pngfrompngtojpgwhen said file actually contains JPEG/JFIF data. catfished by a file extension, not anymore bestie.
- Type:
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.
- Type:
downloader.http.chunk-sizeโ number of bytes per downloaded chunk.- Type:
integerstring
- Default:
32768 - Example:
"50k","0.8M" - values are integer numbers, optionally followed by one of
k,m,g,t, orp, case-insensitive. โจ
- Type:
downloader.http.headersโ extra HTTP headers to send when downloading files.- Type:
object (name โ value) - Example:
{"Accept": "image/webp,*/*", "Referer": "https://example.org/"}
- Type:
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, and416(when resuming a partial download) will never be retried and always count as success, no matter what this option says. - >
5xxcodes (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 ๐
- Type:
downloader.http.sleep-429โ number of seconds to sleep when you get a429 Too Many Requestsresponse before retrying the request. nap time. ๐ด- Type:
Duration - Default:
extractor.*.sleep-429 - > note: this requires
retry-codesto include429. otherwise it's just a girl standing in front of a nap that never happens. ๐
- Type:
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. ๐ซถ
- Type:
downloader.http.validate-htmlโ checks for unexpected HTML responses.- Type:
bool - Default:
true - it fails file downloads with a
text/htmlContent-Type header when a media file was expected. yes, that's a login page, not a jpg, we can tell. ๐
- Type:
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 โญ
- Type:
downloader.ytdl.config-fileโ location of a ytdl configuration file to load options from.- Type:
Path - Example:
"~/.config/yt-dlp/config"
- Type:
downloader.ytdl.deprecationsโ lets ytdl warn you about deprecated options and features. snitch mode, opt-in. ๐ซ- Type:
bool - Default:
false
- Type:
downloader.ytdl.formatโ the ytdl format selection string.- Type:
string - Default: the default of the ytdl module being used โ
"bestvideo*+bestaudio/best"foryt_dlp,"bestvideo+bestaudio/best"foryoutube_dl - see yt-dlp format selection / youtube-dl format selection. choose wisely โจ
- Type:
downloader.ytdl.forward-cookiesโ forwards gallery-dl's cookies over to ytdl. sharing is caring. ๐- Type:
bool - Default:
true
- Type:
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
quietandno_warningsindownloader.ytdl.raw-optionstotrueif you want to suppress all output. silence, gorgeous. ๐คซ
- Type:
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
nulltries to import"yt_dlp"first, then falls back to"youtube_dl". plan B energy. ๐
- Type:
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 withextractor.*.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
nullmight cause unexpected results in combination with certain options (e.g."skip": "enumerate"). you've been warned bestie ๐ญ
- Type:
downloader.ytdl.raw-optionsโ extra options passed directly to theYoutubeDLconstructor.- 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 ๐
- Type:
โจ 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 withoutput.ansidisabled,"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:
encodingerrorsnewlineline_bufferingwrite_through
When this option is specified as a simple string, it is interpreted as {"encoding": "<string-value>", "errors": "replace"}
Note:errorsalways 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 filesskip: skipped files
Keys for Logging Messages
debug: debug logging messagesinfo: info logging messageswarning: warning logging messageserror: 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, setoutput.colorstofalse. 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,totalandurl.
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 asmode, 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-formatarchive-prefixarchive-pragmaarchive-reusearchive-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 onexec.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 usingjson.dump()"jsonl"โ Write metadata in JSON Lines format"tags"โ Write tags separated by newlines"print"โ Write the result of applyingcontent-formatto stdout"custom"โ Write the result of applyingcontent-formatto 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โ currentbase-directorylocation- 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 downloadfinalizeโ On extractor shutdown, e.g. after all files were downloadedfinalize-successโ On extractor shutdown when no error occurredfinalize-errorโ On extractor shutdown when at least one error occurredprepareโ Before a file downloadprepare-afterโ Before a file download, but after building and checking file pathsfileโ When completing a file download, but before it gets moved to its target locationafterโ After a file got moved to its target locationskipโ When skipping a file downloaderrorโ After a file download failedpostโ 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 postchildโ When spawning a new child extractorchild-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 theensure_asciiargument ofjson.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 theindentargument ofjson.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 theseparatorsargument ofjson.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 thesort_keysargument ofjson.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 themodeargument ofopen()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 theencodingargument ofopen()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 thenewlineargument ofopen()for the full deets.
Supported Values:
nullโ Any\ncharacters 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-formatarchive-prefixarchive-pragmaarchive-reusearchive-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-formatarchive-prefixarchive-pragmaarchive-reusearchive-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-1Inaccurate frame timecodes for non-uniform frame delays"image2"โhttps://ffmpeg.org/ffmpeg-formats.html#image2-1Accurate 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.ziparchive
๐๏ธ 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 outputfalseโ Disable all ffmpeg output- any string โ Pass
-hide_bannerand-loglevelwith this value as argument toffmpeg
๐๏ธ 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
Pathinstances - 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.pyfilename extension will be imported and searched for extractors, i.e. classes with apatternattribute.objectโ an object describing module imports in a specific directory.
The following keys are required:
fromโ aPathto 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.pyextension.nullโ internal extractors defined inextractor/__init__.pyor byextractor.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
Pathvalues.
๐งฉ 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 falsefalse/"raw"โ do not wrap expressions in a special environment"defaultdict"โ prevent exceptions when accessing undefined variables by using adefaultdict
๐งฉ 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.attributedict.fieldnamelist.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 ๐
๐งฉ follow-symlinks
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:
- login and visit DeviantArt's Applications & Keys section ๐
- click "Register Application"
- scroll to "OAuth2 Redirect URI Whitelist (Required)" and enter
https://mikf.github.io/gallery-dl/oauth-redirect.html - scroll to the bottom and agree to the API License Agreement, Submission Policy, and Terms of Service. (yes you have to actually read-agree, no skipping bestie ๐ญ)
- click "Save"
- copy
client_idandclient_secretof your new application and put them in your configuration file as"client-id"and"client-secret" - clear your cache to delete any remaining access-token entries.
gallery-dl --clear-cache deviantart
- get a new refresh-token for the new
client-id
gallery-dl oauth:deviantart
๐ธ extractor.flickr.api-key & .api-secret
Type: string
How To:
- login and Create an App in Flickr's App Garden ๐ท
- click "APPLY FOR A NON-COMMERCIAL KEY"
- fill out the form with a random name and description and click "SUBMIT" (yes, random. nobody's grading you ๐)
- copy
KeyandSecretand put them in your configuration file as"api-key"and"api-secret"
๐ extractor.mangadex.client-id & .client-secret
Type: string
How To:
- login and go to your User Settings
- open the "API Clients" section
- click "+ Create"
- choose a name
- click "โ๏ธ Create" (yes the checkmark emoji is literally part of the button, iconic)
- wait for approval / reload the page โณ
- copy the value after "AUTOAPPROVED ACTIVE" in the form
"personal-client-..."and put it in your configuration file as"client-id" - 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:
- login and visit the apps section of your account's preferences
- click the "are you a developer? create an app..." button
- 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"
- copy the
client id(third line, under your application's name and "installed app") and put it in your configuration file as"client-id" - use
Python:<application name>:v1.0 (by /u/<username>)asuser-agent-oauthand replace<application name>and<username>accordingly (see Reddit's API access rules) ๐ - clear your cache to delete any remaining access-token entries.
gallery-dl --clear-cache reddit
- get a refresh-token for the new
client-id
gallery-dl oauth:reddit
๐ซถ extractor.smugmug.api-key & .api-secret
Type: string
How To:
- login and Apply for an API Key
- 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"
- copy
API KeyandAPI Secretand put them in your configuration file as"api-key"and"api-secret"
๐ง extractor.tumblr.api-key & .api-secret
Type: string
How To:
- login and visit Tumblr's Applications section
- click "Register application"
- 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"
- click "Show secret key" (below "OAuth Consumer Key")
- copy your
OAuth Consumer KeyandSecret Keyand 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:
stringinteger
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:
floatlistwith 2 floatsstring
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(peeprandom.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
.pyfile
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, andkeywordsobjects 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 (seestrftime()directives) - Default:
"%Y-%m-%d %H:%M:%S"
- Format string for
- level
- Minimum logging message level (one of
"debug","info","warning","error","exception") - Default:
"info"
- Minimum logging message level (one of
- path
- Path to the output file
- mode
- Mode in which the file is opened; use
"w"to truncate or"a"to append (seeopen()) - Default:
"w"for logfile and unsupportedfile,"a"for errorfile
- Mode in which the file is opened; use
- encoding
- File encoding
- Default:
"utf-8"
- defer
- Defer file opening/creation until writing the first logging message
- Default:
falsefor logfile,truefor 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
postprocessorblock 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 = trueandextractor.*.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,erroror an integer value. Use0to 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.pyor a built-in exception (e.g.ZeroDivisionError) - flag: Set a flag. Expected syntax is
<flag>[ = <value>](e.g.post = stop).<flag>can be one offile,post,child,download,clear.<value>can be one ofstop,abort,terminate,restart,skip,pause,toggle,clear(defaultstop) - 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:
- docs/formatting
https://docs.python.org/3/library/string.html#formatstringshttps://docs.python.org/3/library/string.html#formatspec
๐ BUGS ๐
found something cursed? bestie, please tell someone, don't just sit there ๐ญ
๐ AUTHORS ๐
- Mike Fรคhrmann
<mike_faehrmann@web.de> - and
https://github.com/mikf/gallery-dl/graphs/contributors
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
- ubuntu stonking: gallery-dl 1.32.14-1 ยท GPL-2.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms