diff --git a/config/dot-gallery-dl.conf b/config/dot-gallery-dl.conf new file mode 100644 index 0000000..1db1b66 --- /dev/null +++ b/config/dot-gallery-dl.conf @@ -0,0 +1,407 @@ +{ + "extractor": + { + "base-directory": "~/gallery-dl/", + + "#": "set global archive file for all extractors", + "archive": "~/gallery-dl/archive.sqlite3", + + "#": "add two custom keywords into the metadata dictionary", + "#": "these can be used to further refine your output directories or filenames", + "keywords": {"bkey": "", "ckey": ""}, + "#": "make sure that custom keywords are empty, i.e. they don't appear unless specified by the user", + "keywords-default": "", + + "#": "replace invalid path characters with unicode alternatives", + "path-restrict": { + "\\": "⧹", + "/" : "⧸", + "|" : "│", + ":" : "꞉", + "*" : "∗", + "?" : "?", + "\"": "″", + "<" : "﹤", + ">" : "﹥" + }, + + "#": "write tags for several *booru sites", + "postprocessors": [ + { + "name": "metadata", + "mode": "tags", + "whitelist": ["danbooru", "moebooru", "sankaku"] + } + ], + + "pixiv": + { + "cookies": "$HOME/.gallery-dl/cookies-pixiv-net.txt" + }, + + "danbooru": + { + "ugoira": true, + "postprocessors": ["ugoira-webm"] + }, + + "exhentai": + { + "#": "use cookies instead of logging in with username and password", + "cookies": + { + "ipb_member_id": "12345", + "ipb_pass_hash": "1234567890abcdef", + "igneous" : "123456789", + "hath_perks" : "m1.m2.m3.a-123456789a", + "sk" : "n4m34tv3574m2c4e22c35zgeehiw", + "sl" : "dm_2" + }, + + "#": "wait 2 to 4.8 seconds between HTTP requests", + "sleep-request": [2.0, 4.8], + + "filename": "{num:>04}_{name}.{extension}", + "directory": ["{category!c}", "{title}"] + }, + + "sankaku": + { + "#": "authentication with cookies is not possible for sankaku", + "username": "user", + "password": "#secret#" + }, + + "furaffinity": { + "#": "authentication with username and password is not possible due to CAPTCHA", + "cookies": { + "a": "7766e97d-cadf-4803-b354-a24a90fd0c56", + "b": "ec52df4c-6e67-4758-8f82-acdb0fa4c503" + }, + + "descriptions": "html", + "postprocessors": ["content"] + }, + + "deviantart": + { + "#": "download 'gallery' and 'scraps' images for user profile URLs", + "include": "gallery,scraps", + + "#": "use custom API credentials to avoid 429 errors", + "client-id": "98765", + "client-secret": "0123456789abcdef0123456789abcdef", + "refresh-token": "0123456789abcdef0123456789abcdef01234567", + + "#": "put description texts into a separate directory", + "metadata": true, + "postprocessors": [ + { + "name": "metadata", + "mode": "custom", + "directory" : "Descriptions", + "content-format" : "{description}\n", + "extension-format": "descr.txt" + } + ] + }, + + "flickr": + { + "access-token": "1234567890-abcdef", + "access-token-secret": "1234567890abcdef", + "size-max": 1920 + }, + + "mangadex": + { + "#": "only download safe/suggestive chapters translated to English", + "lang": "en", + "ratings": ["safe", "suggestive"], + + "#": "put chapters into '.cbz' archives", + "postprocessors": ["cbz"] + }, + + "reddit": + { + "#": "only spawn child extractors for links to specific sites", + "whitelist": ["imgur", "redgifs", "gfycat"], + + "#": "put files from child extractors into the reddit directory", + "parent-directory": true, + + "#": "transfer metadata to any child extractor as '_reddit'", + "parent-metadata": "_reddit" + }, + + "imgur": + { + "#": "use different directory and filename formats when coming from a reddit post", + "directory": + { + "'_reddit' in locals()": [] + }, + "filename": + { + "'_reddit' in locals()": "{_reddit[id]} {id}.{extension}", + "" : "{id}.{extension}" + } + }, + + "tumblr": + { + "posts" : "all", + "external": false, + "reblogs" : false, + "inline" : true, + + "#": "use special settings when downloading liked posts", + "likes": + { + "posts" : "video,photo,link", + "external": true, + "reblogs" : true + } + }, + + "twitter": + { + "#": "write text content for *all* tweets", + "text-tweets": true, + "cookies": "$HOME/.gallery-dl/twitter.com_cookies.txt", + "postprocessors": ["content"] + }, + + "patreon": + { + "cookies": "$HOME/.gallery-dl/cookies-patreon-com.txt" + }, + + "mastodon": + { + "#": "add 'tabletop.social' as recognized mastodon instance", + "#": "(run 'gallery-dl oauth:mastodon:tabletop.social to get an access token')", + "tabletop.social": + { + "root": "https://tabletop.social", + "access-token": "513a36c6..." + }, + + "#": "set filename format strings for all 'mastodon' instances", + "directory": ["mastodon", "{instance}", "{account[username]!l}"], + "filename" : "{id}_{media[id]}.{extension}" + }, + + "foolslide": { + "#": "add two more foolslide instances", + "otscans" : {"root": "https://otscans.com/foolslide"}, + "helvetica": {"root": "https://helveticascans.com/r" } + }, + + "foolfuuka": { + "#": "add two other foolfuuka 4chan archives", + "fireden-onion": {"root": "http://ydt6jy2ng3s3xg2e.onion"}, + "scalearchive" : {"root": "https://archive.scaled.team" } + }, + + "gelbooru_v01": + { + "#": "add a custom gelbooru_v01 instance", + "#": "this is just an example, this specific instance is already included!", + "allgirlbooru": {"root": "https://allgirl.booru.org"}, + + "#": "the following options are used for all gelbooru_v01 instances", + "tag": + { + "directory": { + "locals().get('bkey')": ["Booru", "AllGirlBooru", "Tags", "{bkey}", "{ckey}", "{search_tags}"], + "" : ["Booru", "AllGirlBooru", "Tags", "_Unsorted", "{search_tags}"] + } + }, + "post": + { + "directory": ["Booru", "AllGirlBooru", "Posts"] + }, + "archive": "~/gallery-dl/custom-archive-file-for-gelbooru_v01_instances.db", + "filename": "{tags}_{id}_{md5}.{extension}", + "sleep-request": [0, 1.2] + }, + + "gelbooru_v02": + { + "#": "add a custom gelbooru_v02 instance", + "#": "this is just an example, this specific instance is already included!", + "tbib": + { + "root": "https://tbib.org", + "#": "some sites have different domains for API access", + "#": "use the 'api_root' option in addition to the 'root' setting here" + } + }, + + "instagram": + { + "api": "auto", + "cookies": "$HOME/.gallery-dl/cookies-instagram-com.txt", + "include": "posts", + "sleep-request": [8.0, 12.0], + "videos": true + }, + + "tbib": { + "#": "the following options are only used for TBIB", + "#": "gelbooru_v02 has four subcategories at the moment, use custom directory settings for all of these", + "tag": + { + "directory": { + "locals().get('bkey')": ["Other Boorus", "TBIB", "Tags", "{bkey}", "{ckey}", "{search_tags}"], + "" : ["Other Boorus", "TBIB", "Tags", "_Unsorted", "{search_tags}"] + } + }, + "pool": + { + "directory": { + "locals().get('bkey')": ["Other Boorus", "TBIB", "Pools", "{bkey}", "{ckey}", "{pool}"], + "" : ["Other Boorus", "TBIB", "Pools", "_Unsorted", "{pool}"] + } + }, + "favorite": + { + "directory": { + "locals().get('bkey')": ["Other Boorus", "TBIB", "Favorites", "{bkey}", "{ckey}", "{favorite_id}"], + "" : ["Other Boorus", "TBIB", "Favorites", "_Unsorted", "{favorite_id}"] + } + }, + "post": + { + "directory": ["Other Boorus", "TBIB", "Posts"] + }, + "archive": "~/gallery-dl/custom-archive-file-for-TBIB.db", + "filename": "{id}_{md5}.{extension}", + "sleep-request": [0, 1.2] + } + }, + + "downloader": + { + "#": "restrict download speed to 1 MB/s", + "rate": "5M", + + "#": "show download progress indicator after 2 seconds", + "progress": 2.0, + + "#": "retry failed downloads up to 3 times", + "retries": 3, + + "#": "consider a download 'failed' after 8 seconds of inactivity", + "timeout": 8.0, + + "#": "write '.part' files into a special directory", + "part-directory": "/tmp/.download/", + + "ytdl": + { + "#": "use yt-dlp instead of youtube-dl", + "module": "yt_dlp" + } + }, + + "output": + { + "log": { + "level": "info", + + "#": "use different ANSI colors for each log level", + "format": { + "debug" : "\u001b[0;37m{name}: {message}\u001b[0m", + "info" : "\u001b[1;37m{name}: {message}\u001b[0m", + "warning": "\u001b[1;33m{name}: {message}\u001b[0m", + "error" : "\u001b[1;31m{name}: {message}\u001b[0m" + } + }, + + "#": "shorten filenames to fit into one terminal line", + "#": "while also considering wider East-Asian characters", + "shorten": "true", + + "#": "enable ANSI escape sequences on Windows", + "ansi": true, + + "#": "write logging messages to a separate file", + "logfile": { + "path": "~/gallery-dl/log.txt", + "mode": "w", + "level": "debug" + }, + + "#": "write unrecognized URLs to a separate file", + "unsupportedfile": { + "path": "~/gallery-dl/unsupported.txt", + "mode": "a", + "format": "{asctime} {message}", + "format-date": "%Y-%m-%d-%H-%M-%S" + }, + "skip": true + }, + + "postprocessor": + { + "#": "write 'content' metadata into separate files", + "content": + { + "name" : "metadata", + + "#": "write data for every post instead of each individual file", + "event": "post", + "filename": "{post_id|tweet_id|id}.txt", + + "#": "write only the values for 'content' or 'description'", + "mode" : "custom", + "format": "{content|description}\n" + }, + + "#": "put files into a '.cbz' archive", + "cbz": + { + "name": "zip", + "extension": "cbz" + }, + + "#": "various ugoira post processor configurations to create different file formats", + "ugoira-webm": + { + "name": "ugoira", + "extension": "webm", + "ffmpeg-args": ["-c:v", "libvpx-vp9", "-an", "-b:v", "0", "-crf", "30"], + "ffmpeg-twopass": true, + "ffmpeg-demuxer": "image2" + }, + "ugoira-mp4": + { + "name": "ugoira", + "extension": "mp4", + "ffmpeg-args": ["-c:v", "libx264", "-an", "-b:v", "4M", "-preset", "veryslow"], + "ffmpeg-twopass": true, + "libx264-prevent-odd": true + }, + "ugoira-gif": + { + "name": "ugoira", + "extension": "gif", + "ffmpeg-args": ["-filter_complex", "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse"] + }, + "ugoira-copy": { + "name": "ugoira", + "extension": "mkv", + "ffmpeg-args": ["-c", "copy"], + "libx264-prevent-odd": false, + "repeat-last-frame": false + } + }, + + "#": "use a custom cache file location", + "cache": { + "file": "~/gallery-dl/cache.sqlite3" + } +}