Full Code of mikf/gallery-dl for AI

master 41aa47fbacb8 cached
760 files
5.0 MB
1.4M tokens
5840 symbols
1 requests
Download .txt
Showing preview only (5,398K chars total). Download the full file or copy to clipboard to get everything.
Repository: mikf/gallery-dl
Branch: master
Commit: 41aa47fbacb8
Files: 760
Total size: 5.0 MB

Directory structure:
gitextract_l6ot1457/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       ├── docker.yml
│       ├── executables.yml
│       ├── pages.yml
│       └── tests.yml
├── .gitignore
├── CHANGELOG.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── bin/
│   └── gallery-dl
├── docs/
│   ├── _layouts/
│   │   └── default.html
│   ├── configuration.rst
│   ├── formatting.md
│   ├── gallery-dl-example.conf
│   ├── gallery-dl.conf
│   ├── index.md
│   ├── links.js
│   ├── oauth-redirect.html
│   ├── options.md
│   └── supportedsites.md
├── gallery_dl/
│   ├── __init__.py
│   ├── __main__.py
│   ├── actions.py
│   ├── aes.py
│   ├── archive.py
│   ├── cache.py
│   ├── config.py
│   ├── cookies.py
│   ├── downloader/
│   │   ├── __init__.py
│   │   ├── common.py
│   │   ├── http.py
│   │   ├── text.py
│   │   └── ytdl.py
│   ├── dt.py
│   ├── exception.py
│   ├── extractor/
│   │   ├── 2ch.py
│   │   ├── 2chan.py
│   │   ├── 2chen.py
│   │   ├── 35photo.py
│   │   ├── 3dbooru.py
│   │   ├── 4archive.py
│   │   ├── 4chan.py
│   │   ├── 4chanarchives.py
│   │   ├── 500px.py
│   │   ├── 8chan.py
│   │   ├── 8muses.py
│   │   ├── __init__.py
│   │   ├── adultempire.py
│   │   ├── agnph.py
│   │   ├── ahottie.py
│   │   ├── allporncomic.py
│   │   ├── ao3.py
│   │   ├── arcalive.py
│   │   ├── architizer.py
│   │   ├── arena.py
│   │   ├── artstation.py
│   │   ├── aryion.py
│   │   ├── audiochan.py
│   │   ├── bbc.py
│   │   ├── behance.py
│   │   ├── bellazon.py
│   │   ├── bilibili.py
│   │   ├── blogger.py
│   │   ├── bluesky.py
│   │   ├── booru.py
│   │   ├── boosty.py
│   │   ├── booth.py
│   │   ├── bunkr.py
│   │   ├── catbox.py
│   │   ├── cfake.py
│   │   ├── chevereto.py
│   │   ├── cien.py
│   │   ├── civitai.py
│   │   ├── comedywildlifephoto.py
│   │   ├── comick.py
│   │   ├── comicvine.py
│   │   ├── common.py
│   │   ├── cyberdrop.py
│   │   ├── cyberfile.py
│   │   ├── danbooru.py
│   │   ├── dandadan.py
│   │   ├── dankefuerslesen.py
│   │   ├── desktopography.py
│   │   ├── deviantart.py
│   │   ├── directlink.py
│   │   ├── discord.py
│   │   ├── dynastyscans.py
│   │   ├── e621.py
│   │   ├── eporner.py
│   │   ├── erome.py
│   │   ├── everia.py
│   │   ├── exhentai.py
│   │   ├── facebook.py
│   │   ├── fanbox.py
│   │   ├── fansly.py
│   │   ├── fantia.py
│   │   ├── fapachi.py
│   │   ├── fapello.py
│   │   ├── fikfap.py
│   │   ├── filester.py
│   │   ├── fitnakedgirls.py
│   │   ├── flickr.py
│   │   ├── foolfuuka.py
│   │   ├── foolslide.py
│   │   ├── foriio.py
│   │   ├── furaffinity.py
│   │   ├── furry34.py
│   │   ├── fuskator.py
│   │   ├── gelbooru.py
│   │   ├── gelbooru_v01.py
│   │   ├── gelbooru_v02.py
│   │   ├── generic.py
│   │   ├── girlsreleased.py
│   │   ├── girlswithmuscle.py
│   │   ├── gofile.py
│   │   ├── hatenablog.py
│   │   ├── hdoujin.py
│   │   ├── hentai2read.py
│   │   ├── hentaicosplays.py
│   │   ├── hentaifoundry.py
│   │   ├── hentaihand.py
│   │   ├── hentaihere.py
│   │   ├── hentainexus.py
│   │   ├── hiperdex.py
│   │   ├── hitomi.py
│   │   ├── hotleak.py
│   │   ├── idolcomplex.py
│   │   ├── imagebam.py
│   │   ├── imagechest.py
│   │   ├── imagefap.py
│   │   ├── imagehosts.py
│   │   ├── imagepond.py
│   │   ├── imgbb.py
│   │   ├── imgbox.py
│   │   ├── imgpile.py
│   │   ├── imgth.py
│   │   ├── imgur.py
│   │   ├── imhentai.py
│   │   ├── inkbunny.py
│   │   ├── instagram.py
│   │   ├── issuu.py
│   │   ├── itaku.py
│   │   ├── itchio.py
│   │   ├── iwara.py
│   │   ├── joyreactor.py
│   │   ├── jschan.py
│   │   ├── kabeuchi.py
│   │   ├── kaliscan.py
│   │   ├── keenspot.py
│   │   ├── kemono.py
│   │   ├── khinsider.py
│   │   ├── komikcast.py
│   │   ├── koofr.py
│   │   ├── leakgallery.py
│   │   ├── lensdump.py
│   │   ├── lexica.py
│   │   ├── lightroom.py
│   │   ├── listal.py
│   │   ├── livedoor.py
│   │   ├── lofter.py
│   │   ├── lolisafe.py
│   │   ├── luscious.py
│   │   ├── lynxchan.py
│   │   ├── madokami.py
│   │   ├── mangadex.py
│   │   ├── mangafire.py
│   │   ├── mangafox.py
│   │   ├── mangafreak.py
│   │   ├── mangahere.py
│   │   ├── manganelo.py
│   │   ├── mangapark.py
│   │   ├── mangaread.py
│   │   ├── mangareader.py
│   │   ├── mangataro.py
│   │   ├── mangatown.py
│   │   ├── mangoxo.py
│   │   ├── mastodon.py
│   │   ├── message.py
│   │   ├── misskey.py
│   │   ├── mixdrop.py
│   │   ├── moebooru.py
│   │   ├── motherless.py
│   │   ├── myhentaigallery.py
│   │   ├── myportfolio.py
│   │   ├── naverblog.py
│   │   ├── naverchzzk.py
│   │   ├── naverwebtoon.py
│   │   ├── nekohouse.py
│   │   ├── newgrounds.py
│   │   ├── nhentai.py
│   │   ├── nijie.py
│   │   ├── nitter.py
│   │   ├── noop.py
│   │   ├── nozomi.py
│   │   ├── nsfwalbum.py
│   │   ├── nudostar.py
│   │   ├── oauth.py
│   │   ├── okporn.py
│   │   ├── paheal.py
│   │   ├── patreon.py
│   │   ├── pexels.py
│   │   ├── philomena.py
│   │   ├── pholder.py
│   │   ├── photovogue.py
│   │   ├── picarto.py
│   │   ├── picazor.py
│   │   ├── pictoa.py
│   │   ├── piczel.py
│   │   ├── pillowfort.py
│   │   ├── pinterest.py
│   │   ├── pixeldrain.py
│   │   ├── pixiv.py
│   │   ├── pixnet.py
│   │   ├── plurk.py
│   │   ├── poipiku.py
│   │   ├── poringa.py
│   │   ├── pornhub.py
│   │   ├── pornpics.py
│   │   ├── pornstarstube.py
│   │   ├── postmill.py
│   │   ├── rawkuma.py
│   │   ├── reactor.py
│   │   ├── readcomiconline.py
│   │   ├── realbooru.py
│   │   ├── recursive.py
│   │   ├── reddit.py
│   │   ├── redgifs.py
│   │   ├── rule34us.py
│   │   ├── rule34vault.py
│   │   ├── rule34xyz.py
│   │   ├── s3ndpics.py
│   │   ├── sankaku.py
│   │   ├── sankakucomplex.py
│   │   ├── schalenetwork.py
│   │   ├── scrolller.py
│   │   ├── seiga.py
│   │   ├── senmanga.py
│   │   ├── sexcom.py
│   │   ├── shimmie2.py
│   │   ├── shopify.py
│   │   ├── simplyhentai.py
│   │   ├── sizebooru.py
│   │   ├── skeb.py
│   │   ├── slickpic.py
│   │   ├── slideshare.py
│   │   ├── smugmug.py
│   │   ├── soundgasm.py
│   │   ├── speakerdeck.py
│   │   ├── steamgriddb.py
│   │   ├── subscribestar.py
│   │   ├── sxypix.py
│   │   ├── szurubooru.py
│   │   ├── tapas.py
│   │   ├── tcbscans.py
│   │   ├── telegraph.py
│   │   ├── tenor.py
│   │   ├── thefap.py
│   │   ├── thehentaiworld.py
│   │   ├── tiktok.py
│   │   ├── tmohentai.py
│   │   ├── toyhouse.py
│   │   ├── tumblr.py
│   │   ├── tumblrgallery.py
│   │   ├── tungsten.py
│   │   ├── turbo.py
│   │   ├── twibooru.py
│   │   ├── twitter.py
│   │   ├── unsplash.py
│   │   ├── uploadir.py
│   │   ├── urlgalleries.py
│   │   ├── urlshortener.py
│   │   ├── utils/
│   │   │   ├── 500px_graphql.py
│   │   │   ├── __init__.py
│   │   │   ├── behance_graphql.py
│   │   │   ├── deviantart_journal.py
│   │   │   ├── deviantart_tiptap.py
│   │   │   ├── geo.py
│   │   │   ├── joyreactor_graphql.py
│   │   │   ├── jsurl.py
│   │   │   ├── luscious_graphql.py
│   │   │   ├── mangafire_vrf.py
│   │   │   ├── mangapark_graphql.py
│   │   │   ├── patreon_tiptap.py
│   │   │   ├── scrolller_graphql.py
│   │   │   └── twitter_transaction_id.py
│   │   ├── vanillarock.py
│   │   ├── vichan.py
│   │   ├── vipergirls.py
│   │   ├── vk.py
│   │   ├── vsco.py
│   │   ├── wallhaven.py
│   │   ├── wallpapercave.py
│   │   ├── warosu.py
│   │   ├── weasyl.py
│   │   ├── webmshare.py
│   │   ├── webtoons.py
│   │   ├── weebcentral.py
│   │   ├── weebdex.py
│   │   ├── weibo.py
│   │   ├── whyp.py
│   │   ├── wikiart.py
│   │   ├── wikifeet.py
│   │   ├── wikimedia.py
│   │   ├── xasiat.py
│   │   ├── xenforo.py
│   │   ├── xfolio.py
│   │   ├── xhamster.py
│   │   ├── xvideos.py
│   │   ├── yiffverse.py
│   │   ├── yourlesbians.py
│   │   ├── ytdl.py
│   │   └── zerochan.py
│   ├── formatter.py
│   ├── job.py
│   ├── oauth.py
│   ├── option.py
│   ├── output.py
│   ├── path.py
│   ├── postprocessor/
│   │   ├── __init__.py
│   │   ├── actions.py
│   │   ├── classify.py
│   │   ├── common.py
│   │   ├── compare.py
│   │   ├── directory.py
│   │   ├── exec.py
│   │   ├── hash.py
│   │   ├── metadata.py
│   │   ├── mtime.py
│   │   ├── python.py
│   │   ├── rename.py
│   │   ├── ugoira.py
│   │   └── zip.py
│   ├── text.py
│   ├── update.py
│   ├── util.py
│   ├── version.py
│   └── ytdl.py
├── pyproject.toml
├── requirements.txt
├── scripts/
│   ├── build_testresult_db.py
│   ├── completion_bash.py
│   ├── completion_fish.py
│   ├── completion_zsh.py
│   ├── docs_compare.py
│   ├── generate_test_result.py
│   ├── hook-gallery_dl.py
│   ├── init.py
│   ├── man.py
│   ├── options.py
│   ├── pre-commit
│   ├── pull-request
│   ├── pyinstaller.py
│   ├── pyprint.py
│   ├── release.sh
│   ├── rm.py
│   ├── run_tests.py
│   ├── supportedsites.py
│   └── util.py
├── setup.cfg
├── setup.py
├── snap/
│   ├── local/
│   │   ├── launchers/
│   │   │   └── gallery-dl-launch
│   │   └── scriptlets/
│   │       └── selective-checkout
│   └── snapcraft.yaml
└── test/
    ├── __init__.py
    ├── results/
    │   ├── 2ch.py
    │   ├── 2chan.py
    │   ├── 35photo.py
    │   ├── 3dbooru.py
    │   ├── 4archive.py
    │   ├── 4chan.py
    │   ├── 4chanarchives.py
    │   ├── 4plebs.py
    │   ├── 500px.py
    │   ├── 8chan.py
    │   ├── 8kun.py
    │   ├── 8muses.py
    │   ├── 94chan.py
    │   ├── __init__.py
    │   ├── acidimg.py
    │   ├── adultempire.py
    │   ├── agnph.py
    │   ├── ahottie.py
    │   ├── aibooru.py
    │   ├── allgirlbooru.py
    │   ├── allporncomic.py
    │   ├── animereactor.py
    │   ├── ao3.py
    │   ├── arcalive.py
    │   ├── architizer.py
    │   ├── archivedmoe.py
    │   ├── archiveofsins.py
    │   ├── arena.py
    │   ├── artstation.py
    │   ├── aryion.py
    │   ├── atfbooru.py
    │   ├── atfforum.py
    │   ├── audiochan.py
    │   ├── azurlanewiki.py
    │   ├── b4k.py
    │   ├── baraag.py
    │   ├── bbc.py
    │   ├── bbw-chan.py
    │   ├── bcbnsfw.py
    │   ├── behance.py
    │   ├── bellazon.py
    │   ├── bilibili.py
    │   ├── bitly.py
    │   ├── blacktowhite.py
    │   ├── blogger.py
    │   ├── blogspot.py
    │   ├── bluesky.py
    │   ├── booruvar.py
    │   ├── boosty.py
    │   ├── booth.py
    │   ├── bulbapedia.py
    │   ├── bunkr.py
    │   ├── catbox.py
    │   ├── cavemanon.py
    │   ├── celebforum.py
    │   ├── cfake.py
    │   ├── chelseacrew.py
    │   ├── cien.py
    │   ├── civitai.py
    │   ├── comedywildlifephoto.py
    │   ├── comick.py
    │   ├── comicvine.py
    │   ├── coomer.py
    │   ├── cyberdrop.py
    │   ├── cyberfile.py
    │   ├── danbooru.py
    │   ├── dandadan.py
    │   ├── dankefuerslesen.py
    │   ├── derpibooru.py
    │   ├── desktopography.py
    │   ├── desuarchive.py
    │   ├── deviantart.py
    │   ├── directlink.py
    │   ├── discord.py
    │   ├── drawfriends.py
    │   ├── dynastyscans.py
    │   ├── e621.py
    │   ├── e6ai.py
    │   ├── e926.py
    │   ├── endchan.py
    │   ├── eporner.py
    │   ├── erome.py
    │   ├── everia.py
    │   ├── exhentai.py
    │   ├── facebook.py
    │   ├── fanbox.py
    │   ├── fandom.py
    │   ├── fansly.py
    │   ├── fantia.py
    │   ├── fapachi.py
    │   ├── fapello.py
    │   ├── fappic.py
    │   ├── fashionnova.py
    │   ├── fikfap.py
    │   ├── filester.py
    │   ├── fireden.py
    │   ├── fitnakedgirls.py
    │   ├── flickr.py
    │   ├── foriio.py
    │   ├── furaffinity.py
    │   ├── furbooru.py
    │   ├── furry34.py
    │   ├── fuskator.py
    │   ├── gelbooru.py
    │   ├── generic.py
    │   ├── girlsreleased.py
    │   ├── girlswithmuscle.py
    │   ├── gofile.py
    │   ├── gurochan.py
    │   ├── hatenablog.py
    │   ├── hdoujin.py
    │   ├── hentai2read.py
    │   ├── hentaicosplays.py
    │   ├── hentaienvy.py
    │   ├── hentaiera.py
    │   ├── hentaifoundry.py
    │   ├── hentaifox.py
    │   ├── hentaihand.py
    │   ├── hentaihere.py
    │   ├── hentainexus.py
    │   ├── hentairox.py
    │   ├── hentaizap.py
    │   ├── hiperdex.py
    │   ├── hitomi.py
    │   ├── horne.py
    │   ├── hotleak.py
    │   ├── hypnohub.py
    │   ├── idolcomplex.py
    │   ├── illusioncardsbooru.py
    │   ├── imagebam.py
    │   ├── imagechest.py
    │   ├── imagefap.py
    │   ├── imagepond.py
    │   ├── imagetwist.py
    │   ├── imagevenue.py
    │   ├── imgadult.py
    │   ├── imgbb.py
    │   ├── imgbox.py
    │   ├── imgclick.py
    │   ├── imgdrive.py
    │   ├── imglike.py
    │   ├── imgpile.py
    │   ├── imgpv.py
    │   ├── imgspice.py
    │   ├── imgtaxi.py
    │   ├── imgth.py
    │   ├── imgur.py
    │   ├── imgwallet.py
    │   ├── imhentai.py
    │   ├── imxto.py
    │   ├── inkbunny.py
    │   ├── instagram.py
    │   ├── issuu.py
    │   ├── itaku.py
    │   ├── itchio.py
    │   ├── iwara.py
    │   ├── joyreactor.py
    │   ├── jpgfish.py
    │   ├── kabeuchi.py
    │   ├── kaliscan.py
    │   ├── keenspot.py
    │   ├── kemono.py
    │   ├── khinsider.py
    │   ├── kohlchan.py
    │   ├── komikcast.py
    │   ├── konachan.py
    │   ├── koofr.py
    │   ├── leakgallery.py
    │   ├── lensdump.py
    │   ├── lesbianenergy.py
    │   ├── lexica.py
    │   ├── lightbrd.py
    │   ├── lightroom.py
    │   ├── listal.py
    │   ├── livedoor.py
    │   ├── lofter.py
    │   ├── lolibooru.py
    │   ├── loungeunderwear.py
    │   ├── luscious.py
    │   ├── madokami.py
    │   ├── mangadex.py
    │   ├── mangafire.py
    │   ├── mangafox.py
    │   ├── mangafreak.py
    │   ├── mangahere.py
    │   ├── mangakakalot.py
    │   ├── manganato.py
    │   ├── mangapark.py
    │   ├── mangaread.py
    │   ├── mangareader.py
    │   ├── mangataro.py
    │   ├── mangatown.py
    │   ├── mangoxo.py
    │   ├── mariowiki.py
    │   ├── mastodon.py
    │   ├── mastodonsocial.py
    │   ├── mediawiki.py
    │   ├── mgewiki.py
    │   ├── michaelscameras.py
    │   ├── misskeyart.py
    │   ├── misskeydesign.py
    │   ├── misskeyio.py
    │   ├── mixdrop.py
    │   ├── modcloth.py
    │   ├── motherless.py
    │   ├── myhentaigallery.py
    │   ├── myportfolio.py
    │   ├── natomanga.py
    │   ├── naverblog.py
    │   ├── naverchzzk.py
    │   ├── naverwebtoon.py
    │   ├── nekohouse.py
    │   ├── nelomanga.py
    │   ├── newgrounds.py
    │   ├── nhentai.py
    │   ├── nijie.py
    │   ├── nitternet.py
    │   ├── nitterspace.py
    │   ├── nittertiekoetter.py
    │   ├── noop.py
    │   ├── nozomi.py
    │   ├── nozrip.py
    │   ├── nsfwalbum.py
    │   ├── nudostar.py
    │   ├── nudostarforum.py
    │   ├── ohpolly.py
    │   ├── okporn.py
    │   ├── omgmiamiswimwear.py
    │   ├── paheal.py
    │   ├── palanq.py
    │   ├── patreon.py
    │   ├── pawoo.py
    │   ├── pexels.py
    │   ├── philomena.py
    │   ├── pholder.py
    │   ├── photovogue.py
    │   ├── picarto.py
    │   ├── picazor.py
    │   ├── picstate.py
    │   ├── pictoa.py
    │   ├── piczel.py
    │   ├── pidgiwiki.py
    │   ├── pillowfort.py
    │   ├── pinterest.py
    │   ├── pinupgirlclothing.py
    │   ├── pixeldrain.py
    │   ├── pixhost.py
    │   ├── pixiv.py
    │   ├── pixivnovel.py
    │   ├── pixnet.py
    │   ├── plurk.py
    │   ├── poipiku.py
    │   ├── ponybooru.py
    │   ├── poringa.py
    │   ├── pornhub.py
    │   ├── pornpics.py
    │   ├── pornreactor.py
    │   ├── pornstarstube.py
    │   ├── postimg.py
    │   ├── raddle.py
    │   ├── raidlondon.py
    │   ├── rawkuma.py
    │   ├── rbt.py
    │   ├── reactor.py
    │   ├── readcomiconline.py
    │   ├── realbooru.py
    │   ├── recursive.py
    │   ├── reddit.py
    │   ├── redgifs.py
    │   ├── rule34.py
    │   ├── rule34hentai.py
    │   ├── rule34us.py
    │   ├── rule34vault.py
    │   ├── rule34world.py
    │   ├── rule34xyz.py
    │   ├── s3ndpics.py
    │   ├── safebooru.py
    │   ├── sakugabooru.py
    │   ├── sankaku.py
    │   ├── sankakucomplex.py
    │   ├── schalenetwork.py
    │   ├── schan.py
    │   ├── scrolller.py
    │   ├── seiga.py
    │   ├── senmanga.py
    │   ├── sexcom.py
    │   ├── silverpic.py
    │   ├── simpcity.py
    │   ├── simplyhentai.py
    │   ├── sizebooru.py
    │   ├── skeb.py
    │   ├── slickpic.py
    │   ├── slideshare.py
    │   ├── smugloli.py
    │   ├── smugmug.py
    │   ├── snootbooru.py
    │   ├── socialmediagirlsforum.py
    │   ├── soundgasm.py
    │   ├── soybooru.py
    │   ├── speakerdeck.py
    │   ├── steamgriddb.py
    │   ├── sturdychan.py
    │   ├── subscribestar.py
    │   ├── sushiski.py
    │   ├── sxypix.py
    │   ├── tapas.py
    │   ├── tbib.py
    │   ├── tcbscans.py
    │   ├── tco.py
    │   ├── telegraph.py
    │   ├── tenor.py
    │   ├── thebarchive.py
    │   ├── thecollection.py
    │   ├── thecollectionS.py
    │   ├── thefap.py
    │   ├── thehentaiworld.py
    │   ├── tiktok.py
    │   ├── titsintops.py
    │   ├── tmohentai.py
    │   ├── toyhouse.py
    │   ├── tumblr.py
    │   ├── tumblrgallery.py
    │   ├── tungsten.py
    │   ├── turbo.py
    │   ├── turboimagehost.py
    │   ├── twibooru.py
    │   ├── twitter.py
    │   ├── unique-vintage.py
    │   ├── unsplash.py
    │   ├── uploadir.py
    │   ├── urlgalleries.py
    │   ├── vanillarock.py
    │   ├── vidyapics.py
    │   ├── vidyart2.py
    │   ├── vipergirls.py
    │   ├── vipr.py
    │   ├── visuabusters.py
    │   ├── vk.py
    │   ├── vsco.py
    │   ├── wallhaven.py
    │   ├── wallpapercave.py
    │   ├── warosu.py
    │   ├── weasyl.py
    │   ├── webmshare.py
    │   ├── webtoons.py
    │   ├── weebcentral.py
    │   ├── weebdex.py
    │   ├── weibo.py
    │   ├── whyp.py
    │   ├── wikiart.py
    │   ├── wikibooks.py
    │   ├── wikidata.py
    │   ├── wikifeet.py
    │   ├── wikifeetx.py
    │   ├── wikigg.py
    │   ├── wikimediacommons.py
    │   ├── wikinews.py
    │   ├── wikipedia.py
    │   ├── wikiquote.py
    │   ├── wikisource.py
    │   ├── wikispecies.py
    │   ├── wikiversity.py
    │   ├── wikivoyage.py
    │   ├── wiktionary.py
    │   ├── windsorstore.py
    │   ├── xasiat.py
    │   ├── xbooru.py
    │   ├── xcancel.py
    │   ├── xfolio.py
    │   ├── xhamster.py
    │   ├── xvideos.py
    │   ├── yandere.py
    │   ├── yiffverse.py
    │   ├── yourlesbians.py
    │   ├── ytdl.py
    │   └── zerochan.py
    ├── test_cache.py
    ├── test_config.py
    ├── test_cookies.py
    ├── test_downloader.py
    ├── test_dt.py
    ├── test_extractor.py
    ├── test_formatter.py
    ├── test_job.py
    ├── test_oauth.py
    ├── test_output.py
    ├── test_path.py
    ├── test_postprocessor.py
    ├── test_results.py
    ├── test_text.py
    ├── test_util.py
    └── test_ytdl.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[**.py]
indent_size = 4
indent_style = space
max_line_length = 79

[Makefile]
indent_style = tab


================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: mikefaehrmann
custom: https://www.paypal.me/mikefaehrmann


================================================
FILE: .github/workflows/docker.yml
================================================
name: Docker Images

on:
  workflow_dispatch:
  push:
    branches:
    - master
    tags:
    - v[0-9]+.[0-9]+.[0-9]+


permissions:
  packages: write

concurrency:
  group: docker
  cancel-in-progress: false

jobs:
  build:

    runs-on: ubuntu-latest

    # on release commits, run only for tag event
    if: ${{
        github.repository == 'mikf/gallery-dl' &&
        ( ! startsWith( github.event.head_commit.message , 'release version ' ) ||
            startsWith( github.ref , 'refs/tags/v' ) )
      }}

    steps:
    - uses: actions/checkout@v5

    - uses: docker/metadata-action@v5
      id: metadata
      with:
        images: |
          mikf123/gallery-dl
          ghcr.io/mikf/gallery-dl
        tags: |
          type=ref,event=tag
          type=raw,value=dev
          type=sha,format=long,prefix=
          type=raw,priority=500,value={{date 'YYYY.MM.DD'}}

    - uses: docker/setup-qemu-action@v3

    - uses: docker/setup-buildx-action@v3

    - name: Login to DockerHub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Login to GitHub Container Registry
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GHCR_TOKEN }}

    - uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: ${{ steps.metadata.outputs.tags }}
        labels: ${{ steps.metadata.outputs.labels }}
        platforms: linux/amd64,linux/arm64


================================================
FILE: .github/workflows/executables.yml
================================================
name: Executables

on:
  workflow_dispatch:
  push:
    branches:
    - master
    tags-ignore:
    - "*"

env:
  DATE_FORMAT: "%Y.%m.%d"

jobs:
  build:

    if: github.repository == 'mikf/gallery-dl'
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash
    strategy:
      fail-fast: false
      matrix:
        os: ["windows-latest", "macOS-latest"]
        architecture: ["x64"]
        python-version: ["3.14"]
        python-packages: [""]
        include:
        - os: "ubuntu-latest"
          architecture: "x64"
          python-version: "3.13"
          python-packages: "secretstorage"
        - os: "windows-2022"
          architecture: "x86"
          python-version: "3.8"
          python-packages: "toml"

    steps:
    - uses: actions/checkout@v5

    - name: Set up Python ${{ matrix.python-version }} ${{ matrix.architecture }}
      uses: actions/setup-python@v6
      with:
        python-version: ${{ matrix.python-version }}
        architecture: ${{ matrix.architecture }}

    - name: Environment Variables
      run: |
        echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV"
        echo "LABEL=$(python ./scripts/pyinstaller.py --print --os '${{ matrix.os }}' --arch '${{ matrix.architecture }}')" >> "$GITHUB_ENV"

    - name: Update Version
      # use Python since its behavior is consistent across operating systems
      shell: python
      run: |
        import re
        path = "./gallery_dl/version.py"
        with open(path) as fp:
            content = fp.read()
        content = re.sub(
            r'\b(__version__ = "[^"]+)',
            r"\1:${{ env.DATE }}",
            content)
        content = re.sub(
            r'\b(__variant__ =).+',
            r'\1 "dev/${{ env.LABEL }}"',
            content)
        with open(path, "w") as fp:
            fp.write(content)

    - name: Build executable
      run: |
        pip install requests requests[socks] yt-dlp[default] pyyaml ${{ matrix.python-packages }} pyinstaller
        pip install truststore || true
        python ./scripts/pyinstaller.py --label '${{ env.LABEL }}'

    - uses: actions/upload-artifact@v4
      with:
        name: executable-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.python-version }}
        path: dist/*
        retention-days: 1
        compression-level: 0

  release:

    needs: build
    runs-on: ubuntu-latest

    steps:
    - uses: actions/download-artifact@v4

    - name: Environment Variables
      run: echo "DATE=$(date '+${{ env.DATE_FORMAT }}')" >> "$GITHUB_ENV"

    - name: Body
      run: printf 'https://github.com/%s/commit/%s' '${{ github.repository }}' '${{ github.sha }}' > body.md

    - uses: ncipollo/release-action@v1
      with:
        owner: gdl-org
        repo: builds
        tag: ${{ env.DATE }}
        bodyFile: body.md
        artifacts: "executable-*/*"
        allowUpdates: true
        makeLatest: true
        token: ${{ secrets.REPO_TOKEN }}


================================================
FILE: .github/workflows/pages.yml
================================================
name: GitHub Pages

on:
  workflow_dispatch:
  push:
    branches:
    - master
    paths:
    - docs/**

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  dispatch:

    if: github.repository == 'mikf/gallery-dl'
    runs-on: ubuntu-latest

    steps:
    - name: Dispatch to gdl-org/docs
      run: >
        curl -L
        -X POST
        -H "Accept: application/vnd.github+json"
        -H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}"
        -H "X-GitHub-Api-Version: 2022-11-28"
        https://api.github.com/repos/gdl-org/docs/actions/workflows/pages.yml/dispatches
        -d '{"ref":"master"}'

  deploy:

    if: github.repository == 'mikf/gallery-dl'
    runs-on: ubuntu-latest

    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    steps:
    - uses: actions/checkout@v5
    - uses: actions/configure-pages@v4

    - name: Copy static files
      run: |
        mkdir --parents -- ./_site
        cp --archive --target-directory=./_site -- \
          ./docs/oauth-redirect.html

    - uses: actions/upload-pages-artifact@v3
    - uses: actions/deploy-pages@v4
      id: deployment


================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests

on:
  workflow_dispatch:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

jobs:
  test:

    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        python-version:
        - "3.8"
        - "3.9"
        - "3.10"
        - "3.11"
        - "3.12"
        - "3.13"
        - "3.14"
        - "pypy3.9"
        - "pypy3.11"

    steps:
    - uses: actions/checkout@v5

    - name: Check file permissions
      run: |
        if [[ "$(find ./gallery_dl -type f -not -perm 644)" ]]; then exit 1; fi

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v6
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        pip install -r requirements.txt
        pip install flake8 youtube-dl

    - name: Install yt-dlp
      run: |
        case "${{ matrix.python-version }}" in
            3.8|3.9|pypy3.9)
                # install from PyPI
                pip install yt-dlp
                ;;
            *)
                # install from master
                pip install https://github.com/yt-dlp/yt-dlp/archive/refs/heads/master.tar.gz
                ;;
        esac

    - name: Lint with flake8
      run: |
        flake8 .

    - name: Run tests
      run: |
        make test

    - name: Test autogeneration of man pages, bash/zsh/fish completion, etc
      run: |
        make


================================================
FILE: .gitignore
================================================
archive/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
.Python
env/
data/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover

# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Snap packaging specific
/snap/.snapcraft/
/parts/
/stage/
/prime/

/*.snap
/*_source.tar.bz2
/gallery-dl


================================================
FILE: CHANGELOG.md
================================================
# Changelog

## 1.31.5 - 2026-01-31
### Extractors
#### Additions
- [discord] add `server-search` extractor
- [listal] add `image` & `people` extractors ([#1589](https://github.com/mikf/gallery-dl/issues/1589) [#8921](https://github.com/mikf/gallery-dl/issues/8921))
- [mangafreak] add support ([#8928](https://github.com/mikf/gallery-dl/issues/8928))
- [mangatown] add support ([#8925](https://github.com/mikf/gallery-dl/issues/8925))
- [xenforo] support `titsintops.com` ([#8945](https://github.com/mikf/gallery-dl/issues/8945))
- [xenforo] support `forums.socialmediagirls.com` ([#8964](https://github.com/mikf/gallery-dl/issues/8964))
#### Fixes
- [civitai:user-posts] fix pagination ([#8955](https://github.com/mikf/gallery-dl/issues/8955))
- [imhentai] detect galleries without image data ([#8951](https://github.com/mikf/gallery-dl/issues/8951))
- [kemono] fix possible `AttributeError` when processing revisions ([#8929](https://github.com/mikf/gallery-dl/issues/8929))
- [mangataro] fix `manga` extractor ([#8930](https://github.com/mikf/gallery-dl/issues/8930))
- [pornhub] fix `400 Bad Request` when logged in ([#8942](https://github.com/mikf/gallery-dl/issues/8942))
- [tiktok] solve JS challenges ([#8850](https://github.com/mikf/gallery-dl/issues/8850))
- [tiktok] fix account extraction ([#8931](https://github.com/mikf/gallery-dl/issues/8931))
- [tiktok] extract more story item list pages ([#8932](https://github.com/mikf/gallery-dl/issues/8932))
- [tiktok] do not fail story extraction if a user has no stories ([#8938](https://github.com/mikf/gallery-dl/issues/8938))
- [weebdex] make metadata extraction non-fatal ([#8939](https://github.com/mikf/gallery-dl/issues/8939) [#8954](https://github.com/mikf/gallery-dl/issues/8954))
- [weibo] fix `KeyError - 'pid'` when processing subalbums ([#8792](https://github.com/mikf/gallery-dl/issues/8792))
- [xenforo] improve `attachment` extraction ([#8947](https://github.com/mikf/gallery-dl/issues/8947))
- [xenforo] fix cookies check before login ([#8919](https://github.com/mikf/gallery-dl/issues/8919))
#### Improvements
- [exhentai] implement Multi-Page Viewer support ([#2616](https://github.com/mikf/gallery-dl/issues/2616) [#5268](https://github.com/mikf/gallery-dl/issues/5268))
- [kemono] reduce `revisions` API requests when possible
- [tiktok] implement `subtitles` support ([#8805](https://github.com/mikf/gallery-dl/issues/8805))
- [tiktok] implement downloading all `cover` types ([#8805](https://github.com/mikf/gallery-dl/issues/8805))
- [tiktok] do not stop extraction if a post fails ([#8962](https://github.com/mikf/gallery-dl/issues/8962))
- [weebdex] add `lang` option ([#8957](https://github.com/mikf/gallery-dl/issues/8957))
- [weebdex] support query parameter filters
- [weibo] add `subalbums` include ([#8792](https://github.com/mikf/gallery-dl/issues/8792))
- [xenforo] improve error message extraction ([#8919](https://github.com/mikf/gallery-dl/issues/8919))
- [xenforo] decode `/goto/link-confirmation` links ([#8964](https://github.com/mikf/gallery-dl/issues/8964))
### Post Processors
- [mtime] fix overwriting `Last-Modified` mtime when selecting invalid values ([#8918](https://github.com/mikf/gallery-dl/issues/8918))
### Miscellaneous
- [docs/options] add Table of Contents
- [job] add `output.jsonl` option ([#8953](https://github.com/mikf/gallery-dl/issues/8953))
- [job] add `extractor.*.parent` option
- [job] enable all `parent-…` options for parent extractors by default

## 1.31.4 - 2026-01-24
### Extractors
#### Additions
- [kaliscan] add support ([#8917](https://github.com/mikf/gallery-dl/issues/8917))
- [turbo] add support - rewrite `saint` extractors ([#8893](https://github.com/mikf/gallery-dl/issues/8893) [#8896](https://github.com/mikf/gallery-dl/issues/8896))
- [xenforo] support `celebforum.to` ([#8902](https://github.com/mikf/gallery-dl/issues/8902))
- [xenforo] add `media-album` extractor ([#8902](https://github.com/mikf/gallery-dl/issues/8902))
#### Fixes
- [mangafire] fix extractors - generate `vrf` tokens ([#8400](https://github.com/mikf/gallery-dl/issues/8400) [#8906](https://github.com/mikf/gallery-dl/issues/8906))
- [nitter] use `gallery-dl/<version>` User-Agent ([#7045](https://github.com/mikf/gallery-dl/issues/7045) [#8130](https://github.com/mikf/gallery-dl/issues/8130) [#8409](https://github.com/mikf/gallery-dl/issues/8409))
- [tiktok] fix `following` extractor ([#8849](https://github.com/mikf/gallery-dl/issues/8849))
- [xenforo] fix using cookies for custom instances ([#8902](https://github.com/mikf/gallery-dl/issues/8902))
#### Improvements
- [imagebam] raise `NotFoundError` for deleted images & galleries ([#8890](https://github.com/mikf/gallery-dl/issues/8890))
- [kemono:discord] improve `filename` parsing
- [kemono:discord] support server URLs with trailing `/`
- [tiktok] download best quality videos ([#8846](https://github.com/mikf/gallery-dl/issues/8846))
- [tiktok] prefer `legacy` endpoint for user post extraction ([#8812](https://github.com/mikf/gallery-dl/issues/8812) [#8847](https://github.com/mikf/gallery-dl/issues/8847))
- [twitter] implement `"ratelimit": "abort:N"` ([#5251](https://github.com/mikf/gallery-dl/issues/5251) [#8864](https://github.com/mikf/gallery-dl/issues/8864))
- [weebdex] add `data-saver` option ([#8914](https://github.com/mikf/gallery-dl/issues/8914))
- [xenforo] ignore links starting with `#`
#### Metadata
- [kemono:discord] extract `archives` metadata ([#8898](https://github.com/mikf/gallery-dl/issues/8898))
- [xenforo:media-album] extract `album` metadata ([#8902](https://github.com/mikf/gallery-dl/issues/8902))
#### Removals
- [batoto] remove module ([#8834](https://github.com/mikf/gallery-dl/issues/8834) [#8908](https://github.com/mikf/gallery-dl/issues/8908))
### Miscellaneous
- [common] implement `parent-session` option
- [common] add `googlebot` User-Agent preset
- [docker] build from `python:3.14-alpine`
- [release] add more checks before committing a release
- [util] replace classes with functions for predicates, Popen, HTTPBasicAuth

## 1.31.3 - 2026-01-16
### Extractors
#### Additions
- [booth] add `category` extractor ([#8867](https://github.com/mikf/gallery-dl/issues/8867))
- [thefap] add support ([#8821](https://github.com/mikf/gallery-dl/issues/8821) [#8822](https://github.com/mikf/gallery-dl/issues/8822))
- [xenforo] implement `media` support ([#8785](https://github.com/mikf/gallery-dl/issues/8785))
  - add `media-item`, `media-user`, `media-category` extractors
#### Fixes
- [ahottie:album] support multiple pages ([#8862](https://github.com/mikf/gallery-dl/issues/8862) [#8886](https://github.com/mikf/gallery-dl/issues/8886))
- [bellazon] use `data-full-image` URLs if available ([#8833](https://github.com/mikf/gallery-dl/issues/8833))
- [fanbox] make `comments` extraction non-fatal ([#8814](https://github.com/mikf/gallery-dl/issues/8814))
- [imagevenue] fix `NotFoundError` for valid image links ([#8818](https://github.com/mikf/gallery-dl/issues/8818))
- [xenforo] fix/improve `bb*Wrapper` extraction ([#8868](https://github.com/mikf/gallery-dl/issues/8868))
#### Improvements
- [bellazon] match thread URLs with escaped characters
- [bilibili] add support for Live Photo downloads ([#8860](https://github.com/mikf/gallery-dl/issues/8860))
- [booth:item] support URLs with language codes
- [chevereto] implement password support
- [chevereto:user] support `album` results
- [dankefuerslesen] support `/reader/series` URLs ([#8811](https://github.com/mikf/gallery-dl/issues/8811))
- [furaffinity:favorite] support URLs with custom start position
- [imagetwist:gallery] support multiple pages ([#8826](https://github.com/mikf/gallery-dl/issues/8826))
- [koofr] refactor ([#8803](https://github.com/mikf/gallery-dl/issues/8803))
- [pixeldrain:album] add `zip` option
- [pixeldrain] warn about hotlink-protected files ([#8803](https://github.com/mikf/gallery-dl/issues/8803))
- [pixeldrain] improve `filename` parsing
- [rule34xyz] support URLs with `www` subdomain ([#8875](https://github.com/mikf/gallery-dl/issues/8875))
- [saint] support `turbovid.cr` & `turbo.cr` URLs ([#8851](https://github.com/mikf/gallery-dl/issues/8851) [#8888](https://github.com/mikf/gallery-dl/issues/8888))
- [shopify] support URLs starting with language codes
- [webtoons] extend `bgm` option ([#8733](https://github.com/mikf/gallery-dl/issues/8733))
- [weibo:album] implement `subalbum` support ([#8792](https://github.com/mikf/gallery-dl/issues/8792))
- [wikimedia] use `gallery-dl/<version>` User-Agent ([#8770](https://github.com/mikf/gallery-dl/issues/8770) [#8861](https://github.com/mikf/gallery-dl/issues/8861))
#### Metadata
- [bellazon] unescape `thread[slug]` names
- [imagetwist:gallery] extract `gallery_title` & `gallery_id` metadata
- [motherless] fix gallery media metadata issues ([#8873](https://github.com/mikf/gallery-dl/issues/8873))
- [rule34xyz] recognize `system` & `meta` tag types
- [sexcom] fix `tags` when passing cookies ([#8880](https://github.com/mikf/gallery-dl/issues/8880))
- [tiktok] provide `post_type` metadata ([#8815](https://github.com/mikf/gallery-dl/issues/8815))
- [xenforo] extract `author_slug` metadata ([#8785](https://github.com/mikf/gallery-dl/issues/8785))
### Downloaders
- [ytdl] implement `_ytdl_manifest_remux`
### Miscellaneous
- [common] implement `"user-agent": "+PRESET"`
- [docs/README] add Discord link
- [formatter] overload `.` operator
- [job] fix extractor `kwdict` values being unavailable in filters
- [util] adjust Firefox/Chrome User-Agent versions
- [util] rename `USERAGENT` to `USERAGENT_GALLERYDL` ([#8836](https://github.com/mikf/gallery-dl/issues/8836))

## 1.31.2 - 2026-01-02
### Extractors
#### Additions
- [ahottie] add aupport ([#8710](https://github.com/mikf/gallery-dl/issues/8710))
- [discord] add `server-assets` extractor ([#8589](https://github.com/mikf/gallery-dl/issues/8589))
- [imgpv] add `image` extractor ([#8773](https://github.com/mikf/gallery-dl/issues/8773))
- [manganelo] add `bookmark` extractor ([#8776](https://github.com/mikf/gallery-dl/issues/8776))
- [tiktok] add support for stories, liked posts, saved posts, reposts ([#8035](https://github.com/mikf/gallery-dl/issues/8035) [#8466](https://github.com/mikf/gallery-dl/issues/8466) [#8715](https://github.com/mikf/gallery-dl/issues/8715))
- [twitter] add `notifications` extractor ([#7974](https://github.com/mikf/gallery-dl/issues/7974))
- [whyp] add support ([#8725](https://github.com/mikf/gallery-dl/issues/8725))
- [yourlesbians] add `album` extractor ([#8713](https://github.com/mikf/gallery-dl/issues/8713))
#### Fixes
- [batoto] replace k-subdomain image URLs with n-subdomain ([#8791](https://github.com/mikf/gallery-dl/issues/8791))
- [civitai] update `quality-videos` default ([#8787](https://github.com/mikf/gallery-dl/issues/8787))
- [deviantart:stash] fix `JSONDecodeEerror` for folders ([#8750](https://github.com/mikf/gallery-dl/issues/8750))
- [exhentai] fix possible exception in `finalize()` ([#8741](https://github.com/mikf/gallery-dl/issues/8741))
- [instagram:stories] extract correct `expires` dates ([#8764](https://github.com/mikf/gallery-dl/issues/8764))
- [sankaku] fix re-authentication ([#8779](https://github.com/mikf/gallery-dl/issues/8779))
- [tapas] unescape HTML entities in image URLs ([#8790](https://github.com/mikf/gallery-dl/issues/8790))
- [tumblr:search] prevent `KeyError` when using `offset` pagination ([#8720](https://github.com/mikf/gallery-dl/issues/8720))
- [xenforo] fix incomplete video URLs ([#8786](https://github.com/mikf/gallery-dl/issues/8786))
#### Improvements
- [bunkr] detect new maintenance video file ([#8802](https://github.com/mikf/gallery-dl/issues/8802))
- [fansly] disable `formats` check by default ([#8757](https://github.com/mikf/gallery-dl/issues/8757))
- [instagram] detect homepage redirects ([#8714](https://github.com/mikf/gallery-dl/issues/8714))
- [instagram] don't warn on minor image size differences ([#8300](https://github.com/mikf/gallery-dl/issues/8300))
- [pixiv] support `sketch` include ([#8789](https://github.com/mikf/gallery-dl/issues/8789))
- [subscribestar] support filterting `user` posts by `tag` ([#8737](https://github.com/mikf/gallery-dl/issues/8737))
- [tiktok] remove yt-dlp dependency ([#7246](https://github.com/mikf/gallery-dl/issues/7246) [#8466](https://github.com/mikf/gallery-dl/issues/8466) [#8730](https://github.com/mikf/gallery-dl/issues/8730) [#8715](https://github.com/mikf/gallery-dl/issues/8715))
- [webtoons] download episode background music ([#8733](https://github.com/mikf/gallery-dl/issues/8733))
- [xenforo] support `/#post-ID` URLs
#### Metadata
- [pixiv] provide `count` metadata ([#8794](https://github.com/mikf/gallery-dl/issues/8794))
- [tiktok] combine `…_id` fields into a single `file_id` one ([#8804](https://github.com/mikf/gallery-dl/issues/8804))
- [webtoons] extract `num_play` & `num_stop` for background music ([#8733](https://github.com/mikf/gallery-dl/issues/8733) [#8755](https://github.com/mikf/gallery-dl/issues/8755))
#### Options
- [facebook] add `loop` option ([#8696](https://github.com/mikf/gallery-dl/issues/8696))
- [fansly] add `previews` option ([#8686](https://github.com/mikf/gallery-dl/issues/8686))
- [koofr] implement `zip` option ([#6582](https://github.com/mikf/gallery-dl/issues/6582) [#8700](https://github.com/mikf/gallery-dl/issues/8700))
- [tiktok] add `order-posts` option ([#8730](https://github.com/mikf/gallery-dl/issues/8730) [#8715](https://github.com/mikf/gallery-dl/issues/8715))
### Downloaders
- [http] add MIME type and signature for `.aac` files
- [ytdl] fix overwriting `mtime` of downloaded files ([#8767](https://github.com/mikf/gallery-dl/issues/8767))
- [ytdl] expect all exception types when extracting `info_dict` ([#8343](https://github.com/mikf/gallery-dl/issues/8343))
### Miscellaneous
- [actions] fix `abort` ([#8753](https://github.com/mikf/gallery-dl/issues/8753))
- [options] add `--sleep-skip` ([#6582](https://github.com/mikf/gallery-dl/issues/6582))

## 1.31.1 - 2025-12-20
### Extractors
#### Additions
- [2chen] implement generic `2chen` board extractors
  - support `https://schan.help/` ([#8680](https://github.com/mikf/gallery-dl/issues/8680))
- [aryion] add `watch` extractor ([#8705](https://github.com/mikf/gallery-dl/issues/8705))
- [comedywildlifephoto] add `gallery` extractor ([#8690](https://github.com/mikf/gallery-dl/issues/8690))
- [koofr] add `shared` extractor ([#8700](https://github.com/mikf/gallery-dl/issues/8700))
- [picazor] add `user` extractor ([#7083](https://github.com/mikf/gallery-dl/issues/7083) [#7504](https://github.com/mikf/gallery-dl/issues/7504) [#7795](https://github.com/mikf/gallery-dl/issues/7795) [#8717](https://github.com/mikf/gallery-dl/issues/8717))
- [weebdex] add support ([#8722](https://github.com/mikf/gallery-dl/issues/8722))
- [xenforo] support `allthefallen.moe/forum` ([#3249](https://github.com/mikf/gallery-dl/issues/3249) [#8268](https://github.com/mikf/gallery-dl/issues/8268))
#### Fixes
- [aryion:favorite] fix extraction ([#8705](https://github.com/mikf/gallery-dl/issues/8705) [#8723](https://github.com/mikf/gallery-dl/issues/8723) [#8728](https://github.com/mikf/gallery-dl/issues/8728))
- [aryion] fix `description` metadata
- [boosty] include `Authorization` header with file downloads ([#8704](https://github.com/mikf/gallery-dl/issues/8704))
- [fanbox] make `_extract_post()` non-fatal ([#8711](https://github.com/mikf/gallery-dl/issues/8711))
- [furaffinity] fix `tags` metadata ([#8724](https://github.com/mikf/gallery-dl/issues/8724))
- [mastodon] fix `AttributeError: 'parse_datetime_iso'` ([#8709](https://github.com/mikf/gallery-dl/issues/8709))
- [tenor] fix `title` metadata
- [twitter] fix `avatar` & `background` downloads with `"expand": true` ([#8698](https://github.com/mikf/gallery-dl/issues/8698))
#### Improvements
- [boosty] warn about expired `auth` cookie tokens ([#8704](https://github.com/mikf/gallery-dl/issues/8704))
- [misskey] implement `order-posts` option ([#8516](https://github.com/mikf/gallery-dl/issues/8516))
- [reddit] use `"videos": "dash"` by default ([#8657](https://github.com/mikf/gallery-dl/issues/8657))
- [pixiv] warn about invalid `PHPSESSID` cookie ([#8689](https://github.com/mikf/gallery-dl/issues/8689))
### Downloaders
- [ytdl] fix `UnboundLocalError: 'tries'` ([#8707](https://github.com/mikf/gallery-dl/issues/8707))
- [ytdl] respect `--no-skip`
### Miscellaneous
- [path] implement dynamic length directories ([#1350](https://github.com/mikf/gallery-dl/issues/1350))
- [formatter] add `I` format specifier - identity
- [tests] add `path` tests

## 1.31.0 - 2025-12-12
### Extractors
#### Additions
- [arena] add `channel` extractor ([#5847](https://github.com/mikf/gallery-dl/issues/5847) [#8509](https://github.com/mikf/gallery-dl/issues/8509))
- [aryion] add `search` extractor ([#8567](https://github.com/mikf/gallery-dl/issues/8567))
- [audiochan] add support ([#8602](https://github.com/mikf/gallery-dl/issues/8602))
- [cfake] add support ([#707](https://github.com/mikf/gallery-dl/issues/707) [#6021](https://github.com/mikf/gallery-dl/issues/6021) [#8549](https://github.com/mikf/gallery-dl/issues/8549) [#8687](https://github.com/mikf/gallery-dl/issues/8687) [#8430](https://github.com/mikf/gallery-dl/issues/8430))
- [cyberfile] add `shared` extractor ([#8323](https://github.com/mikf/gallery-dl/issues/8323))
- [Danbooru] add `media-asset` extractor ([#8580](https://github.com/mikf/gallery-dl/issues/8580))
- [e621] add `artist` & `artist-search` extractors ([#8448](https://github.com/mikf/gallery-dl/issues/8448))
- [eporner] add support ([#8581](https://github.com/mikf/gallery-dl/issues/8581))
- [fikfap] add support ([#8673](https://github.com/mikf/gallery-dl/issues/8673))
- [fitnakedgirls] add support ([#8671](https://github.com/mikf/gallery-dl/issues/8671))
- [myhentaigallery] add `tag` extractor ([#8537](https://github.com/mikf/gallery-dl/issues/8537))
- [nudostarforum] add support ([#8664](https://github.com/mikf/gallery-dl/issues/8664))
- [okporn] add support ([#8575](https://github.com/mikf/gallery-dl/issues/8575))
- [pornpics] add `category` & `listing` extractors ([#8662](https://github.com/mikf/gallery-dl/issues/8662))
- [pornstarstube] add support ([#8576](https://github.com/mikf/gallery-dl/issues/8576))
- [sexcom] add `feed` extractor ([#8519](https://github.com/mikf/gallery-dl/issues/8519))
- [shimmie2] support `soybooru.com` ([#8467](https://github.com/mikf/gallery-dl/issues/8467))
- [sxypix] add support ([#4507](https://github.com/mikf/gallery-dl/issues/4507) [#8391](https://github.com/mikf/gallery-dl/issues/8391) [#8574](https://github.com/mikf/gallery-dl/issues/8574))
- [xenforo] implement generic `XenForo` forum extractors
#### Fixes
- [bellazon] fix errors when handling guest users ([#8397](https://github.com/mikf/gallery-dl/issues/8397))
- [belazon] fix starting from a specific page
- [cien] fix `creator` & `recent` extractors ([#8524](https://github.com/mikf/gallery-dl/issues/8524))
- [fanbox:redirect] disable cookie usage ([#8565](https://github.com/mikf/gallery-dl/issues/8565))
- [gofile] fix extraction ([#8681](https://github.com/mikf/gallery-dl/issues/8681) [#8683](https://github.com/mikf/gallery-dl/issues/8683))
- [imagebam] fix `filename` & `extension` for names without ext ([#8476](https://github.com/mikf/gallery-dl/issues/8476))
- [instagram] fix `AttributeError: 'videos_dash'` ([#8561](https://github.com/mikf/gallery-dl/issues/8561))
- [motherless] fix `gallery_title` extraction ([#8605](https://github.com/mikf/gallery-dl/issues/8605))
- [paheal] fix `AttributeError`
- [pixiv] fix `KeyError: 'is_bookmarked'` ([#8398](https://github.com/mikf/gallery-dl/issues/8398))
- [postimg] fix extraction ([#8505](https://github.com/mikf/gallery-dl/issues/8505))
- [rawkuma] update extractors to new site layout ([#8568](https://github.com/mikf/gallery-dl/issues/8568))
- [realbooru] fix `tags` for video posts ([#8455](https://github.com/mikf/gallery-dl/issues/8455))
- [reddit] fix `KeyError: 'media_metadata'` for embeds ([#8551](https://github.com/mikf/gallery-dl/issues/8551))
- [sankaku][idolcomplex] fix download URLs ([#8666](https://github.com/mikf/gallery-dl/issues/8666))
- [schalenetwork] fix `tags` categories ([#8625](https://github.com/mikf/gallery-dl/issues/8625))
- [silverpic] fix extraction & force `.net` TLD
- [simpcity] fix `content` for first post of a thread
- [simpcity] fix starting from a specific page ([#8599](https://github.com/mikf/gallery-dl/issues/8599))
- [twitter] fix `KeyError` for `temporarily unavailable` users ([#8423](https://github.com/mikf/gallery-dl/issues/8423))
- [twitter] fix `KeyError - 'source_id'` with disabled `transform` ([#8429](https://github.com/mikf/gallery-dl/issues/8429))
- [twitter] fix `AttributeError` for `search-pagination": "max_id"` ([#8613](https://github.com/mikf/gallery-dl/issues/8613))
- [twitter] update & fix `pinned` Tweet extraction ([#8500](https://github.com/mikf/gallery-dl/issues/8500))
- [vsco] use `"browser": "firefox"` by default ([#8127](https://github.com/mikf/gallery-dl/issues/8127))
- [webtoons] fix `thumbnail` extraction ([#8413](https://github.com/mikf/gallery-dl/issues/8413))
- [xasiat] fix `IndexError` for albums without category ([#8569](https://github.com/mikf/gallery-dl/issues/8569))
#### Improvements
- [2ch] support `.org` TLD ([#8629](https://github.com/mikf/gallery-dl/issues/8629))
- [bunkr] detect when an album is deleted mid-download ([#8619](https://github.com/mikf/gallery-dl/issues/8619))
- [cyberdrop] update domain to `cyberdrop.cr` ([#8496](https://github.com/mikf/gallery-dl/issues/8496))
- [cyberfile:folder] support subfolders ([#8323](https://github.com/mikf/gallery-dl/issues/8323))
- [deviantart:gallery] match URLs with query parameters ([#8514](https://github.com/mikf/gallery-dl/issues/8514))
- [discord] limit length of default filenames ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [erome] improve error message for deleted & copyrighted albums ([#8665](https://github.com/mikf/gallery-dl/issues/8665))
- [fansly] handle posts without `accountId`/`contentId`/`attachments` ([#8572](https://github.com/mikf/gallery-dl/issues/8572))
- [flickr] extract public API key from website ([#7564](https://github.com/mikf/gallery-dl/issues/7564) [#7649](https://github.com/mikf/gallery-dl/issues/7649) [#7700](https://github.com/mikf/gallery-dl/issues/7700) [#8553](https://github.com/mikf/gallery-dl/issues/8553))
- [imagehost] improve `filename` & `extension` handling
- [imagetwist] detect deleted images ([#8415](https://github.com/mikf/gallery-dl/issues/8415))
- [imagevenue] improve error for deleted images ([#8477](https://github.com/mikf/gallery-dl/issues/8477))
- [imgbox] match direct links ([#8474](https://github.com/mikf/gallery-dl/issues/8474))
- [imhentai:search] support `/advanced-search/` URLs ([#8507](https://github.com/mikf/gallery-dl/issues/8507))
- [instagram] improve error for non-existent profiles ([#8550](https://github.com/mikf/gallery-dl/issues/8550))
- [jpgfish] update domain to `jpg7.cr` ([#8530](https://github.com/mikf/gallery-dl/issues/8530))
- [newgrounds] set error status when encountering inaccessible posts ([#8654](https://github.com/mikf/gallery-dl/issues/8654))
- [realbooru] extract video fallbacks ([#8661](https://github.com/mikf/gallery-dl/issues/8661))
- [reddit] use REST API by default ([#8559](https://github.com/mikf/gallery-dl/issues/8559))
- [reddit] support comment share link ([#8434](https://github.com/mikf/gallery-dl/issues/8434))
- [rule34us:tag] support URLs with empty `q` query parameter ([#8546](https://github.com/mikf/gallery-dl/issues/8546))
- [pixhost] force `.to` TLD ([#8428](https://github.com/mikf/gallery-dl/issues/8428))
- [postimg] force `postimg.cc` domain ([#8505](https://github.com/mikf/gallery-dl/issues/8505))
- [sankaku][idolcomplex] support URLs with locale code ([#8667](https://github.com/mikf/gallery-dl/issues/8667))
- [simpcity] implement login with username & password ([#8418](https://github.com/mikf/gallery-dl/issues/8418))
- [simpcity] extract attachment/inline files ([#8560](https://github.com/mikf/gallery-dl/issues/8560))
- [simpcity] extract `click to load media` URLs ([#8609](https://github.com/mikf/gallery-dl/issues/8609))
- [tiktok] ignore empty `music` entries ([#8571](https://github.com/mikf/gallery-dl/issues/8571))
- [twitter] restore better user NotFoundError messages ([#8621](https://github.com/mikf/gallery-dl/issues/8621))
- [twitter] implement workarounds for empty `core` data ([#8613](https://github.com/mikf/gallery-dl/issues/8613))
- [wikimedia] add `format=original` to `fandom`/`wikigg` file URLs ([#5512](https://github.com/mikf/gallery-dl/issues/5512))
- [wikimedia] implement config lookups for `fandom`/`wikigg` sites ([#7283](https://github.com/mikf/gallery-dl/issues/7283))
#### Metadata
- [bellazon] add `num_internal` & `num_external` metadata fields ([#8415](https://github.com/mikf/gallery-dl/issues/8415))
- [bellazon] remove query parameters from attachment IDs ([#8544](https://github.com/mikf/gallery-dl/issues/8544))
- [bunkr] extract `album_…` metadata for `/f/` URLs ([#8405](https://github.com/mikf/gallery-dl/issues/8405))
- [chevereto] extract `album_id` & `album_slug` metadata ([#8604](https://github.com/mikf/gallery-dl/issues/8604))
- [chevereto:album] extract `count` & `num` metadata ([#8604](https://github.com/mikf/gallery-dl/issues/8604))
- [civitai] implement extracting `tags` metadata ([#8626](https://github.com/mikf/gallery-dl/issues/8626))
- [fanbox] return metadata of inaccessible posts ([#8643](https://github.com/mikf/gallery-dl/issues/8643))
- [hentaifoundry] extract `categories` metadata ([#8656](https://github.com/mikf/gallery-dl/issues/8656))
- [imagehosts] provide `post_url` metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [instagram] extract `subscription` metadata for story/highlight items ([#8459](https://github.com/mikf/gallery-dl/issues/8459))
- [instagram] extract correct `width` & `height` for videos ([#8399](https://github.com/mikf/gallery-dl/issues/8399))
- [kemono] improve `filename`
- [patreon] include full metadata with each URL ([#4286](https://github.com/mikf/gallery-dl/issues/4286) [#8498](https://github.com/mikf/gallery-dl/issues/8498))
- [pixhost] extract `directory` metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [subscribestar] improve `filename` ([#8416](https://github.com/mikf/gallery-dl/issues/8416))
- [wikimedia] provide `lang` metadata ([#7283](https://github.com/mikf/gallery-dl/issues/7283))
#### Options
- [bluesky] add `api-server` option ([#8668](https://github.com/mikf/gallery-dl/issues/8668))
- [civitai] add `sort` & `period` options ([#8426](https://github.com/mikf/gallery-dl/issues/8426))
- [fanbox:creator] add `offset` option ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [itaku] add `order` option
- [mangadex] add `data-saver` option ([#8573](https://github.com/mikf/gallery-dl/issues/8573))
- [misskey] add `date-min` & `date-max` options ([#8516](https://github.com/mikf/gallery-dl/issues/8516))
- [misskey] add `text-posts` option ([#8516](https://github.com/mikf/gallery-dl/issues/8516))
- [patreon] add `order-posts` option ([#7856](https://github.com/mikf/gallery-dl/issues/7856) [#8482](https://github.com/mikf/gallery-dl/issues/8482))
- [schalenetwork][hdoujin] re-implement `cbz` option ([#8431](https://github.com/mikf/gallery-dl/issues/8431))
- [tiktok] add `covers` option ([#8515](https://github.com/mikf/gallery-dl/issues/8515))
- [twitter] add general `limit` option ([#8173](https://github.com/mikf/gallery-dl/issues/8173))
- [twitter] implement `retries-api` option ([#8317](https://github.com/mikf/gallery-dl/issues/8317))
- [twitter] implement `search-results` option ([#8613](https://github.com/mikf/gallery-dl/issues/8613))
- [twitter] implement using fallback values for `search-limit` ([#8173](https://github.com/mikf/gallery-dl/issues/8173))
- [weibo] add `text` option ([#8422](https://github.com/mikf/gallery-dl/issues/8422))
#### Removals
- [redbust] remove module ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
#### Common
- allow general ISO 8601 values for `date-min` & `date-max`
- use `parent` value as `parent-metadata` default ([#8525](https://github.com/mikf/gallery-dl/issues/8525) [#8604](https://github.com/mikf/gallery-dl/issues/8604))
### Downloaders
- [http] fail downloads of empty files ([#8661](https://github.com/mikf/gallery-dl/issues/8661))
- [http] implement `_http_segmented` ([#8602](https://github.com/mikf/gallery-dl/issues/8602))
- [ytdl] implement `retry` functionality ([#1131](https://github.com/mikf/gallery-dl/issues/1131) [#8269](https://github.com/mikf/gallery-dl/issues/8269))
- [ytdl] improve error detection
- [ytdl] improve error message when importing default ytdl modules
- [ytdl] update `_extract_manifest()`
- [ytdl] forward `_ytdl_manifest_headers` to formats
- [ytdl] restructure code
### Post Processors
- [metadata] add `newline` option ([#8439](https://github.com/mikf/gallery-dl/issues/8439))
- [exec] add `verbose` option ([#7743](https://github.com/mikf/gallery-dl/issues/7743))
### Formatter
- add `Lb` format specifier - `L` for bytes
- add `Xb` format specifier - `X` for bytes ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
### Job
- add `keywords-global` option ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- implement `post-filter` & `post-range` options
- implement `"archive-event": "after"` ([#8373](https://github.com/mikf/gallery-dl/issues/8373))
- use identity checks
- inline `dispatch` loop
### Path
- implement conditional `part-directory` ([#8329](https://github.com/mikf/gallery-dl/issues/8329))
- treat broken symlinks as existing files ([#8490](https://github.com/mikf/gallery-dl/issues/8490))
- improve `exists()` performance
### Miscellaneous
- [cookies] fix cookie count logging message order ([#8414](https://github.com/mikf/gallery-dl/issues/8414))
- [dt] move datetime utils into separate `dt` module
- [output] add `defer` option for logging files ([#8523](https://github.com/mikf/gallery-dl/issues/8523))
- [output] add `Logger.traceback()` helper
- [scripts/init] fix error when running with default values ([#8583](https://github.com/mikf/gallery-dl/issues/8583))
- [util] support integer values for `…-range` options ([#8604](https://github.com/mikf/gallery-dl/issues/8604))
- [workflows:tests] include Python 3.14 & pypy3.11

## 1.30.10 - 2025-10-12
### Extractors
#### Additions
- [bluesky] add `bookmark` extractor ([#8370](https://github.com/mikf/gallery-dl/issues/8370))
- [dandadan] add support ([#8381](https://github.com/mikf/gallery-dl/issues/8381))
#### Fixes
- [bellazon] fix video URL extraction ([#8392](https://github.com/mikf/gallery-dl/issues/8392))
- [bluesky] handle exceptions during file extraction
- [civitai] prevent downloading random posts from deleted users ([#8299](https://github.com/mikf/gallery-dl/issues/8299))
- [girlsreleased] update API endpoints ([#8360](https://github.com/mikf/gallery-dl/issues/8360))
- [instagram] restore `video_dash_manifest` downloads ([#8364](https://github.com/mikf/gallery-dl/issues/8364))
- [kemono] prevent fatal exceptions when retrieving user profile data ([#8382](https://github.com/mikf/gallery-dl/issues/8382))
- [mangadex] fix `RuntimeError` for titles without a `description` ([#8389](https://github.com/mikf/gallery-dl/issues/8389))
- [naver-blog] fix video extraction ([#8385](https://github.com/mikf/gallery-dl/issues/8385))
- [poipiku] fix original file downloads ([#8356](https://github.com/mikf/gallery-dl/issues/8356))
- [weibo] fix retrieving followers-only content ([#6447](https://github.com/mikf/gallery-dl/issues/6447) [#7939](https://github.com/mikf/gallery-dl/issues/7939) [#8063](https://github.com/mikf/gallery-dl/issues/8063) [#8354](https://github.com/mikf/gallery-dl/issues/8354) [#8357](https://github.com/mikf/gallery-dl/issues/8357))
- [weibo] use `page` parameter for `feed` results ([#7523](https://github.com/mikf/gallery-dl/issues/7523) [#8128](https://github.com/mikf/gallery-dl/issues/8128) [#8357](https://github.com/mikf/gallery-dl/issues/8357))
- [wikimedia] fix name & extension of files without an extension ([#8344](https://github.com/mikf/gallery-dl/issues/8344))
- [wikimedia] ignore missing files ([#8388](https://github.com/mikf/gallery-dl/issues/8388))
#### Improvements
- [bellazon] ignore links to other threads ([#8392](https://github.com/mikf/gallery-dl/issues/8392))
- [common] disable delay for `request_location()`
- [fansly] update format selection ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [fansly] download user posts from all account walls ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [instagram] support `/share/SHORTCODE` URLs ([#8340](https://github.com/mikf/gallery-dl/issues/8340))
- [weibo] ignore ongoing live streams ([#8339](https://github.com/mikf/gallery-dl/issues/8339))
- [zerochan] forward URL parameters to API requests ([#8377](https://github.com/mikf/gallery-dl/issues/8377))
#### Metadata
- [instagram] extract `subscription` metadata ([#8349](https://github.com/mikf/gallery-dl/issues/8349))
- [webtoons] fix `episode` metadata extraction ([#2591](https://github.com/mikf/gallery-dl/issues/2591))
#### Removals
- [twitter] remove login support ([#4202](https://github.com/mikf/gallery-dl/issues/4202) [#6029](https://github.com/mikf/gallery-dl/issues/6029) [#6040](https://github.com/mikf/gallery-dl/issues/6040) [#8362](https://github.com/mikf/gallery-dl/issues/8362))
### Post Processors
- [exec] support `{_temppath}` replacement fields ([#8329](https://github.com/mikf/gallery-dl/issues/8329))
### Miscellaneous
- [formatter] improve error messages ([#8369](https://github.com/mikf/gallery-dl/issues/8369))
- [path] implement conditional `base-directory`
- use `utf-8` encoding when opening files in text mode ([#8376](https://github.com/mikf/gallery-dl/issues/8376))

## 1.30.9 - 2025-10-03
### Extractors
#### Additions
- [mangafire] add support ([#7064](https://github.com/mikf/gallery-dl/issues/7064) [#7701](https://github.com/mikf/gallery-dl/issues/7701))
- [mangareader] add support ([#6529](https://github.com/mikf/gallery-dl/issues/6529) [#6868](https://github.com/mikf/gallery-dl/issues/6868))
- [patreon] add `collection` extractor ([#8286](https://github.com/mikf/gallery-dl/issues/8286))
- [s3ndpics] add support ([#8322](https://github.com/mikf/gallery-dl/issues/8322))
#### Fixes
- [chevereto] fix `id` for links without file name ([#8307](https://github.com/mikf/gallery-dl/issues/8307))
- [chevereto:album] fix video downloads ([#8149](https://github.com/mikf/gallery-dl/issues/8149) [#8295](https://github.com/mikf/gallery-dl/issues/8295))
- [hdoujin] fix `KeyError: 13` by adding `reclass` tag type ([#8290](https://github.com/mikf/gallery-dl/issues/8290))
- [misskey] include `withRenotes` parameter in API requests ([#8285](https://github.com/mikf/gallery-dl/issues/8285))
- [nozomi] percent-encode search tags ([#8328](https://github.com/mikf/gallery-dl/issues/8328))
- [simpcity] fix `KeyError: 'url'` when thread author is deleted ([#8323](https://github.com/mikf/gallery-dl/issues/8323))
- [twitter] fix `quote_id` of individual Tweets ([#8284](https://github.com/mikf/gallery-dl/issues/8284))
- [zerochan] prevent `HttpError: '503 Service Temporarily Unavailable'` ([#8288](https://github.com/mikf/gallery-dl/issues/8288))
#### Improvements
- [chevereto] support URLs with `www` subdomain ([#8149](https://github.com/mikf/gallery-dl/issues/8149))
- [imxto:gallery] support multiple pages ([#8282](https://github.com/mikf/gallery-dl/issues/8282))
- [instagram] add `warn-images` & `warn-videos` options ([#8283](https://github.com/mikf/gallery-dl/issues/8283))
- [instagram] use `reel` subcategory for `/reel/SHORTCODE` URLs ([#8274](https://github.com/mikf/gallery-dl/issues/8274))
- [instagram] support `/reels/SHORTCODE` URLs ([#8318](https://github.com/mikf/gallery-dl/issues/8318))
- [paheal] normalize `No results` output message ([#8313](https://github.com/mikf/gallery-dl/issues/8313))
- [pixiv] implement searching past 5000 results ([#1686](https://github.com/mikf/gallery-dl/issues/1686) [#7082](https://github.com/mikf/gallery-dl/issues/7082) [#8298](https://github.com/mikf/gallery-dl/issues/8298))
- [thehentaiworld] support more `post` URL formats ([#8277](https://github.com/mikf/gallery-dl/issues/8277))
- [weibo] download `.m3u8` manifests with ytdl ([#8339](https://github.com/mikf/gallery-dl/issues/8339))
- [weibo] resolve `wblive-out.api.weibo.com` URLs ([#8339](https://github.com/mikf/gallery-dl/issues/8339))
- [weibo] use `replay_hd` URLs as video fallback ([#8339](https://github.com/mikf/gallery-dl/issues/8339))
- [wikimedia] add ability to download image revisions ([#7283](https://github.com/mikf/gallery-dl/issues/7283) [#8330](https://github.com/mikf/gallery-dl/issues/8330))
- [zerochan] normalize `No results` output message ([#8313](https://github.com/mikf/gallery-dl/issues/8313))
#### Metadata
- [hdoujin] extract `source` metadata ([#8280](https://github.com/mikf/gallery-dl/issues/8280))
- [instagram] provide `type` metadata ([#8274](https://github.com/mikf/gallery-dl/issues/8274))
- [mangadex] extract more manga-related metadata ([#8325](https://github.com/mikf/gallery-dl/issues/8325))
#### Removals
- [chevereto] remove `img.kiwi`
### Downloaders
- [http] add MIME type and signature for m3u8 & mpd files ([#8339](https://github.com/mikf/gallery-dl/issues/8339))
### Post Processors
- [python] restore `archive` functionality
### Miscellaneous
- [cookies] add support for `Orion` browser ([#8303](https://github.com/mikf/gallery-dl/issues/8303))
- [docker] include more optional Python dependencies ([#8026](https://github.com/mikf/gallery-dl/issues/8026))
- [docs] update `configuration.rst` formatting

## 1.30.8 - 2025-09-23
### Extractors
#### Additions
- [chevereto] support `imglike.com` ([#5179](https://github.com/mikf/gallery-dl/issues/5179))
- [chevereto] add `category` extractor ([#5179](https://github.com/mikf/gallery-dl/issues/5179))
- [Danbooru] add `random` extractor ([#8270](https://github.com/mikf/gallery-dl/issues/8270))
- [hdoujin] add support ([#6810](https://github.com/mikf/gallery-dl/issues/6810))
- [imgpile] add support ([#5044](https://github.com/mikf/gallery-dl/issues/5044))
- [mangadex] add `covers` extractor ([#4994](https://github.com/mikf/gallery-dl/issues/4994))
- [mangataro] add support ([#8237](https://github.com/mikf/gallery-dl/issues/8237))
- [thehentaiworld] add support ([#274](https://github.com/mikf/gallery-dl/issues/274) [#8237](https://github.com/mikf/gallery-dl/issues/8237))
#### Fixes
- [4archive] fix `TypeError` ([#8217](https://github.com/mikf/gallery-dl/issues/8217))
- [bellazon] fix video attachments ([#8239](https://github.com/mikf/gallery-dl/issues/8239))
- [bunkr] fix `JSONDecodeError` for files with URL slugs containing apostrophes `'` ([#8150](https://github.com/mikf/gallery-dl/issues/8150))
- [instagram] ensure manifest data exists before attempting a DASH download ([#8267](https://github.com/mikf/gallery-dl/issues/8267))
- [schalenetwork] fix extraction ([#6948](https://github.com/mikf/gallery-dl/issues/6948) [#7391](https://github.com/mikf/gallery-dl/issues/7391) [#7728](https://github.com/mikf/gallery-dl/issues/7728))
- [twitter] fix quoted Tweets being marked as `deleted` ([#8225](https://github.com/mikf/gallery-dl/issues/8225))
#### Improvements
- [2ch] update domain to `2ch.su`, support `2ch.life` URLs ([#8216](https://github.com/mikf/gallery-dl/issues/8216))
- [bellazon][simpcity][vipergirls] process threads in descending order ([#8248](https://github.com/mikf/gallery-dl/issues/8248))
- [bellazon] extract `inline` images (##8247)
- [bellazon] support video embeds ([#8239](https://github.com/mikf/gallery-dl/issues/8239))
- [bellazon] support `#comment-12345` post links ([#8239](https://github.com/mikf/gallery-dl/issues/8239))
- [lensdump] support new direct file URL pattern ([#8251](https://github.com/mikf/gallery-dl/issues/8251))
- [simpcity] extract URLs of `<iframe>` embeds ([#8214](https://github.com/mikf/gallery-dl/issues/8214) [#8256](https://github.com/mikf/gallery-dl/issues/8256))
- [simpcity] improve post content extraction ([#8214](https://github.com/mikf/gallery-dl/issues/8214))
#### Metadata
- [facebook] extract `biography` metadata ([#8233](https://github.com/mikf/gallery-dl/issues/8233))
- [instagram:tagged] provide full `tagged_…` metadata when using `id:…` URLs ([#8263](https://github.com/mikf/gallery-dl/issues/8263))
- [iwara] extract more metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [iwara] make `type` available for directories ([#8245](https://github.com/mikf/gallery-dl/issues/8245))
- [reddit] provide `comment` metadata for all media files ([#8228](https://github.com/mikf/gallery-dl/issues/8228))
#### Options
- [bellazon] add `quoted` option ([#8247](https://github.com/mikf/gallery-dl/issues/8247))
- [bellazon] implement `order-posts` option ([#8248](https://github.com/mikf/gallery-dl/issues/8248))
- [kemono:discord] implement `order-posts` option ([#8241](https://github.com/mikf/gallery-dl/issues/8241))
- [simpcity] implement `order-posts` option ([#8248](https://github.com/mikf/gallery-dl/issues/8248))
- [vipergirls] implement `order-posts` option ([#8248](https://github.com/mikf/gallery-dl/issues/8248))
### Downloaders
- [ytdl] fix errors caused by deprecated options removal
### Post Processors
- [metadata] add `"mode": "print"` ([#2691](https://github.com/mikf/gallery-dl/issues/2691))
- [python] add `"mode": "eval"`
- close archive database connections ([#8243](https://github.com/mikf/gallery-dl/issues/8243))
### Miscellaneous
- [util] define `__enter__` & `__exit__` methods for `NullResponse` objects ([#8227](https://github.com/mikf/gallery-dl/issues/8227))
- [util] extend list of ISO 639 language codes

## 1.30.7 - 2025-09-14
### Extractors
#### Additions
- [bellazon] add support ([#7480](https://github.com/mikf/gallery-dl/issues/7480))
- [cyberfile] add support ([#5015](https://github.com/mikf/gallery-dl/issues/5015))
- [fansly] add `creator-media` extractor ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [simpcity] add support ([#3127](https://github.com/mikf/gallery-dl/issues/3127) [#5145](https://github.com/mikf/gallery-dl/issues/5145) [#5879](https://github.com/mikf/gallery-dl/issues/5879) [#8187](https://github.com/mikf/gallery-dl/issues/8187))
#### Fixes
- [aibooru] fix download URLs ([#8212](https://github.com/mikf/gallery-dl/issues/8212))
- [ao3] fix pagination ([#8206](https://github.com/mikf/gallery-dl/issues/8206))
- [boosty] fix extracting `accessToken` from cookies ([#8203](https://github.com/mikf/gallery-dl/issues/8203))
- [comick] update `buildId` on `404` errors ([#8157](https://github.com/mikf/gallery-dl/issues/8157))
- [facebook] fix `/photo/?fbid=…&set=…` URLs being handled as a set ([#8181](https://github.com/mikf/gallery-dl/issues/8181))
- [fansly] fix & improve format selection ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [fansly] fix posts with more than 5 files ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [imgbb] fix & update ([#7936](https://github.com/mikf/gallery-dl/issues/7936))
- [tiktok] fix `KeyError: 'author'` ([#8189](https://github.com/mikf/gallery-dl/issues/8189))
#### Improvements
- [comick] handle redirects
- [fansly] provide fallback URL for manifest downloads ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [fansly:creator] support custom wall IDs ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [tungsten:user] support filtering results by tag ([#8061](https://github.com/mikf/gallery-dl/issues/8061))
- [twitter] continue searches on empty response ([#8173](https://github.com/mikf/gallery-dl/issues/8173))
- [twitter] implement various `search-…` options ([#8173](https://github.com/mikf/gallery-dl/issues/8173))
### Miscellaneous
- [formatter] exclude `<>\` characters from `!R` results ([#8180](https://github.com/mikf/gallery-dl/issues/8180))
- [formatter] support negative indicies
- [util] emit debug `Proxy Map` logging message ([#8195](https://github.com/mikf/gallery-dl/issues/8195))

## 1.30.6 - 2025-09-06
### Extractors
#### Additions
- [chevereto] add `video` extractor ([#8149](https://github.com/mikf/gallery-dl/issues/8149))
- [comick] add `covers` extractor
- [fansly] add support ([#4401](https://github.com/mikf/gallery-dl/issues/4401))
- [instagram] add `stories-tray` extractor ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [shimmie2] support `co.llection.pics` ([#8166](https://github.com/mikf/gallery-dl/issues/8166))
- [tungsten] add support ([#8061](https://github.com/mikf/gallery-dl/issues/8061))
- [vk] add `wall-post` extractor ([#474](https://github.com/mikf/gallery-dl/issues/474) [#6378](https://github.com/mikf/gallery-dl/issues/6378) [#8159](https://github.com/mikf/gallery-dl/issues/8159))
#### Fixes
- [bunkr] fix downloading albums with more than 100 files ([#8150](https://github.com/mikf/gallery-dl/issues/8150) [#8155](https://github.com/mikf/gallery-dl/issues/8155) [#8175](https://github.com/mikf/gallery-dl/issues/8175))
- [chevereto:user] fix names starting with an `a` ([#8149](https://github.com/mikf/gallery-dl/issues/8149))
- [common] prevent exception when using empty `user-agent` ([#8116](https://github.com/mikf/gallery-dl/issues/8116))
- [deviantart:search] fix extraction ([#8083](https://github.com/mikf/gallery-dl/issues/8083))
- [hentaifoundry:story] fix `src` & `description` extraction ([#8163](https://github.com/mikf/gallery-dl/issues/8163))
- [imagebam] update guard page bypass cookies ([#8123](https://github.com/mikf/gallery-dl/issues/8123))
- [kemono] fix `.bin` archive files not being added to archives list ([#8156](https://github.com/mikf/gallery-dl/issues/8156))
- [reddit] fix `TypeaError` when processing comments ([#8139](https://github.com/mikf/gallery-dl/issues/8139))
- [tumblr] fix pagination when using `date-max`
- [twitter] prevent exceptions in `_transform_community()` ([#8134](https://github.com/mikf/gallery-dl/issues/8134))
- [twitter] prevent `KeyError: 'name'` in `_transform_user()` ([#8154](https://github.com/mikf/gallery-dl/issues/8154))
- [twitter] fix `KeyError: 'core'` when processing communities ([#8141](https://github.com/mikf/gallery-dl/issues/8141))
- [zerochan] fix `500 Internal Server Error` during login ([#8097](https://github.com/mikf/gallery-dl/issues/8097) [#8114](https://github.com/mikf/gallery-dl/issues/8114))
#### Improvements
- [comick] detect broken chapters ([#8054](https://github.com/mikf/gallery-dl/issues/8054))
- [erome] handle reposts on user profiles ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [instagram] improve video quality warning regex ([#8078](https://github.com/mikf/gallery-dl/issues/8078))
- [jpgfish] update domain to `jpg6.su`
- [reddit] add `api` & `limit` options ([#7997](https://github.com/mikf/gallery-dl/issues/7997) [#8012](https://github.com/mikf/gallery-dl/issues/8012) [#8092](https://github.com/mikf/gallery-dl/issues/8092))
- [reddit] support video embeds ([#8139](https://github.com/mikf/gallery-dl/issues/8139))
- [tumblr:tagged] support `/archive/tagged/` URLs ([#8160](https://github.com/mikf/gallery-dl/issues/8160))
#### Metadata
- [khinsider] extract `description` metadata
- [tumblr:tagged] provide `search_tags` metadata ([#8160](https://github.com/mikf/gallery-dl/issues/8160))
- [vk] parse `date` & `description` metadata ([#8029](https://github.com/mikf/gallery-dl/issues/8029))
- [vk:album] extract more metadata ([#8029](https://github.com/mikf/gallery-dl/issues/8029))
### Downloaders
- [ytdl] implement `_ytdl_manifest_cookies`
### Miscellaneous
- [formatter] add `R` conversion - extract URLs ([#8125](https://github.com/mikf/gallery-dl/issues/8125))
- [options] add `-a` as short option for `--user-agent`
- [scripts/init] implement `-s/--subcategory`

## 1.30.5 - 2025-08-24
### Extractors
#### Additions
- [shimmie2] support `noz.rip/booru` ([#8101](https://github.com/mikf/gallery-dl/issues/8101))
- [sizebooru] add support ([#7667](https://github.com/mikf/gallery-dl/issues/7667))
- [twitter] add `highlights` extractor ([#7826](https://github.com/mikf/gallery-dl/issues/7826))
- [twitter] add `home` extractor ([#7974](https://github.com/mikf/gallery-dl/issues/7974))
#### Fixes
- [aryion] fix pagination ([#8091](https://github.com/mikf/gallery-dl/issues/8091))
- [rule34] support using `api-key` & `user-id` ([#8077](https://github.com/mikf/gallery-dl/issues/8077) [#8088](https://github.com/mikf/gallery-dl/issues/8088) [#8098](https://github.com/mikf/gallery-dl/issues/8098))
- [tumblr:search] fix `ValueError: not enough values to unpack` ([#8079](https://github.com/mikf/gallery-dl/issues/8079))
- [twitter] handle `KeyError: 'result'` for retweets ([#8072](https://github.com/mikf/gallery-dl/issues/8072))
- [zerochan] expect `500 Internal Server Error` responses for HTML requests ([#8097](https://github.com/mikf/gallery-dl/issues/8097))
#### Improvements
- [civitai:search] add `token` option ([#8093](https://github.com/mikf/gallery-dl/issues/8093))
- [instagram] warn about lower quality video downloads ([#7921](https://github.com/mikf/gallery-dl/issues/7921) [#8078](https://github.com/mikf/gallery-dl/issues/8078))
- [instagram] remove `candidates` warning ([#7921](https://github.com/mikf/gallery-dl/issues/7921) [#7989](https://github.com/mikf/gallery-dl/issues/7989) [#8071](https://github.com/mikf/gallery-dl/issues/8071))
- [oauth] improve error messages ([#8086](https://github.com/mikf/gallery-dl/issues/8086))
- [pixiv] distinguish empty from deleted profiles ([#8066](https://github.com/mikf/gallery-dl/issues/8066))
- [twitter] update API endpoint query hashes & parameters
#### Metadata
- [batoto] extract more metadata ([#7994](https://github.com/mikf/gallery-dl/issues/7994))
- [instagram:highlights] extract `author` & `owner` & `user` metadata ([#7846](https://github.com/mikf/gallery-dl/issues/7846))
- [newgrounds] extract `slug` metadata ([#8064](https://github.com/mikf/gallery-dl/issues/8064))
- [twitter] extract `community` metadata ([#7424](https://github.com/mikf/gallery-dl/issues/7424))
#### Removals
- [shimmie2] remove `sizechangebooru.com` ([#7667](https://github.com/mikf/gallery-dl/issues/7667))
- [zzup] remove module ([#4604](https://github.com/mikf/gallery-dl/issues/4604))
### Downloaders
- [ytdl] improve playlist handling ([#8085](https://github.com/mikf/gallery-dl/issues/8085))
### Scripts
- implement `rm` helper script
- add `-g/--git` command-line options
- [util] add `git()` & `lines()` helper functions
### Miscellaneous
- [config] add `conf` argument to `config.load()` ([#8084](https://github.com/mikf/gallery-dl/issues/8084))

## 1.30.4 - 2025-08-16
### Extractors
#### Additions
- [civitai] add 'videos' extractor ([#6644](https://github.com/mikf/gallery-dl/issues/6644))
#### Fixes
- [civitai] fix posts not returning video files ([#8053](https://github.com/mikf/gallery-dl/issues/8053))
- [civitai] fix '403 Forbidden' errors for searches
- [kemono] use 'Accept: text/css' for API requests ([#8047](https://github.com/mikf/gallery-dl/issues/8047) [#8057](https://github.com/mikf/gallery-dl/issues/8057))
#### Improvements
- [newgrounds] add fallback for images with empty 'full_image_text' 'src'
### Miscellaneous
- fix accessing methods through 'path-metadata' proxy ([#6582](https://github.com/mikf/gallery-dl/issues/6582))

## 1.30.3 - 2025-08-15
### Extractors
#### Additions
- [booth] add support ([#7920](https://github.com/mikf/gallery-dl/issues/7920))
- [civitai] add `collection` & `user-collections` extractors ([#8005](https://github.com/mikf/gallery-dl/issues/8005))
- [facebook] add `info` extractor ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [facebook] add `albums` extractor ([#7848](https://github.com/mikf/gallery-dl/issues/7848))
- [imgdrive] add `image` extractor ([#7976](https://github.com/mikf/gallery-dl/issues/7976))
- [imgtaxi] add `image` extractor ([#8019](https://github.com/mikf/gallery-dl/issues/8019))
- [imgwallet] add `image` extractor ([#8021](https://github.com/mikf/gallery-dl/issues/8021))
- [picstate] add `image` extractor ([#7946](https://github.com/mikf/gallery-dl/issues/7946))
- [silverpic] add `image` extractor ([#8020](https://github.com/mikf/gallery-dl/issues/8020))
- [tumblr] add `following` & `followers` extractors ([#8018](https://github.com/mikf/gallery-dl/issues/8018))
- [xasiat] add support ([#4161](https://github.com/mikf/gallery-dl/issues/4161) [#5929](https://github.com/mikf/gallery-dl/issues/5929) [#7934](https://github.com/mikf/gallery-dl/issues/7934))
#### Fixes
- [blogger] fix video extraction ([#7892](https://github.com/mikf/gallery-dl/issues/7892))
- [comick] handle chapters without chapter data ([#7972](https://github.com/mikf/gallery-dl/issues/7972))
- [comick] handle volume-only chapters ([#8043](https://github.com/mikf/gallery-dl/issues/8043))
- [comick] fix exception when filtering by translation group ([#8045](https://github.com/mikf/gallery-dl/issues/8045))
- [deviantart:tiptap] fix `KeyError: 'attrs'` ([#7929](https://github.com/mikf/gallery-dl/issues/7929))
- [everia] fix image extraction ([#7973](https://github.com/mikf/gallery-dl/issues/7973) [#7977](https://github.com/mikf/gallery-dl/issues/7977))
- [facebook] fix `avatar` extraction for empty profiles ([#7962](https://github.com/mikf/gallery-dl/issues/7962))
- [facebook] handle profiles without photos or `set_id` ([#7962](https://github.com/mikf/gallery-dl/issues/7962))
- [fappic] rewrite thumbnail URLs ([#8013](https://github.com/mikf/gallery-dl/issues/8013))
- [idolcomplex] update to new domain and interface ([#7559](https://github.com/mikf/gallery-dl/issues/7559) [#8009](https://github.com/mikf/gallery-dl/issues/8009))
- [kemono][coomer] fix extraction ([#8028](https://github.com/mikf/gallery-dl/issues/8028) [#8031](https://github.com/mikf/gallery-dl/issues/8031))
- [kemono] update `/creators` endpoint ([#8039](https://github.com/mikf/gallery-dl/issues/8039) [#8040](https://github.com/mikf/gallery-dl/issues/8040))
- [kemono] don't set error status for posts without comments ([#7961](https://github.com/mikf/gallery-dl/issues/7961))
- [pixiv] fix `IndexError` for unviewable works ([#7940](https://github.com/mikf/gallery-dl/issues/7940))
- [pixiv] fix artworks downloads when using expired cookies ([#7987](https://github.com/mikf/gallery-dl/issues/7987))
- [scrolller] fix NSFW subreddit pagination ([#7945](https://github.com/mikf/gallery-dl/issues/7945))
- [twitter] fix potential `UnboundLocalError` when `videos` are disabled ([#7932](https://github.com/mikf/gallery-dl/issues/7932))
- [vsco] disable TLS 1.2 cipher suites by default ([#7984](https://github.com/mikf/gallery-dl/issues/7984) [#7986](https://github.com/mikf/gallery-dl/issues/7986))
- [wikimedia:wiki] fix `AttributeError: 'subcategories'` ([#7931](https://github.com/mikf/gallery-dl/issues/7931))
#### Improvements
- [aibooru] support `general.aibooru.online` & `aibooru.download`
- [comick] add `lang` option ([#7938](https://github.com/mikf/gallery-dl/issues/7938))
- [hentaifoundry] add `descriptions` option ([#7952](https://github.com/mikf/gallery-dl/issues/7952))
- [facebook] raise `AuthRequired` for profiles requiring cookies ([#7962](https://github.com/mikf/gallery-dl/issues/7962))
- [instagram] warn about lower quality image downloads ([#7921](https://github.com/mikf/gallery-dl/issues/7921))
- [kemono] support `"endpoint": "posts+"` for full metadata ([#8028](https://github.com/mikf/gallery-dl/issues/8028))
- [misskey] support `misskey.art` ([#7923](https://github.com/mikf/gallery-dl/issues/7923))
- [motherless] detect `404`/`File not found` pages
- [pixiv] detect suspended/deleted accounts ([#7990](https://github.com/mikf/gallery-dl/issues/7990))
- [pixiv] improve API error messages
- [pixiv] remove redundant cookies initialization code
- [scrolller] limit `title` length in default filenames
- [skeb] implement `include` option ([#6558](https://github.com/mikf/gallery-dl/issues/6558) [#7267](https://github.com/mikf/gallery-dl/issues/7267))
- [vk] update default `archive_fmt` ([#8030](https://github.com/mikf/gallery-dl/issues/8030))
#### Metadata
- [cien] provide `author[id]` metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [dankefuerslesen] extract more metadata ([#7915](https://github.com/mikf/gallery-dl/issues/7915))
- [dankefuerslesen:manga] fix metadata being overwritten
- [facebook] ensure numeric `user_id` values ([#7953](https://github.com/mikf/gallery-dl/issues/7953))
- [facebook:set] fix/improve `user_id` extraction ([#7848](https://github.com/mikf/gallery-dl/issues/7848))
- [fappic] fix `filename` values
#### Common
- [common] implement `"user-agent": "@BROWSER"` ([#7947](https://github.com/mikf/gallery-dl/issues/7947))
- [common] improve error message for non-Netscape cookie files ([#8014](https://github.com/mikf/gallery-dl/issues/8014))
### Downloaders
- [ytdl] don't overwrite existing `filename` data ([#7964](https://github.com/mikf/gallery-dl/issues/7964))
### Miscellaneous
- [docs/configuration] improve `client-id` & `api-key` instructions
- [docs/formatting] update and improve
- [job] apply `extension-map` to `SimulationJob` results ([#7954](https://github.com/mikf/gallery-dl/issues/7954))
- [job] improve URL `scheme` extraction performance
- [job] split collected DataJob results
- [path] implement `path-convert` option ([#493](https://github.com/mikf/gallery-dl/issues/493) [#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [scripts] improve and extend `init`, `generate_test_result`, and `pyprint`
- extend `-A`/`--abort` & `"skip": "abort"` functionality ([#7891](https://github.com/mikf/gallery-dl/issues/7891))
- use more f-strings ([#7671](https://github.com/mikf/gallery-dl/issues/7671))

## 1.30.2 - 2025-07-27
### Extractors
#### Additions
- [itaku] add `posts` & `bookmarks` extractors ([#7707](https://github.com/mikf/gallery-dl/issues/7707))
#### Fixes
- [kemono] support new `kemono.cr` domain ([#7902](https://github.com/mikf/gallery-dl/issues/7902) [#7909](https://github.com/mikf/gallery-dl/issues/7909) [#7911](https://github.com/mikf/gallery-dl/issues/7911) [#7913](https://github.com/mikf/gallery-dl/issues/7913) [#7904](https://github.com/mikf/gallery-dl/issues/7904))
- [coomer] support new `coomer.st` domain ([#7907](https://github.com/mikf/gallery-dl/issues/7907) [#7909](https://github.com/mikf/gallery-dl/issues/7909) [#7911](https://github.com/mikf/gallery-dl/issues/7911) [#7904](https://github.com/mikf/gallery-dl/issues/7904))
### Post Processors
- [exec] use `False` as `start_new_session` default to avoid a `TypeError` ([#7899](https://github.com/mikf/gallery-dl/issues/7899))
### Miscellaneous
- [tests/postprocessor] fix `TypeError` when logging an error ([#6582](https://github.com/mikf/gallery-dl/issues/6582))

## 1.30.1 - 2025-07-26
### Extractors
#### Additions
- [civitai] add `generated` extractor ([#7796](https://github.com/mikf/gallery-dl/issues/7796))
- [facebook] add `avatar` extractor ([#7848](https://github.com/mikf/gallery-dl/issues/7848))
- [imgadult] add `image` extractor ([#7893](https://github.com/mikf/gallery-dl/issues/7893))
- [itaku] add `following` & `followers` extractors ([#7707](https://github.com/mikf/gallery-dl/issues/7707))
- [leakgallery] add support ([#7872](https://github.com/mikf/gallery-dl/issues/7872))
- [madokami] add `manga` extractor ([#7828](https://github.com/mikf/gallery-dl/issues/7828))
#### Changes
- [civitai] change default `user` includes to `["user-images", "user-videos"]` ([#7874](https://github.com/mikf/gallery-dl/issues/7874))
#### Fixes
- [behance] fix `403 Forbidden` errors by using `"browser": "firefox"` ([#7803](https://github.com/mikf/gallery-dl/issues/7803) [#7877](https://github.com/mikf/gallery-dl/issues/7877))
- [civitai] fix `AttributeError` when a file's post was deleted ([#7860](https://github.com/mikf/gallery-dl/issues/7860))
- [pornhub] fix `gallery` extractor ([#7842](https://github.com/mikf/gallery-dl/issues/7842))
- [readcomiconline] force `One page` reading mode ([#7890](https://github.com/mikf/gallery-dl/issues/7890))
- [sexcom] update `search` extractor ([#7807](https://github.com/mikf/gallery-dl/issues/7807))
- [urlgalleries] fix extraction ([#7858](https://github.com/mikf/gallery-dl/issues/7858))
- [wikimedia] add missing `self` argument when calling `prepare()` ([#7835](https://github.com/mikf/gallery-dl/issues/7835))
#### Improvements
- [4chan] detect files containing only null bytes ([#7883](https://github.com/mikf/gallery-dl/issues/7883))
- [azurelanewiki] prevent Anubis challenge
- [bilibili] warn about blocked articles ([#7880](https://github.com/mikf/gallery-dl/issues/7880))
- [civitai] fix `extension` for videos without `name` and `mimeType`
- [common] detect Cloudflare & DDoS-Guard challenge pages in `request_json()` & `request_xml()` ([#7833](https://github.com/mikf/gallery-dl/issues/7833))
- [facebook] add retries to profile page requests ([#7725](https://github.com/mikf/gallery-dl/issues/7725) [#7834](https://github.com/mikf/gallery-dl/issues/7834) [#7852](https://github.com/mikf/gallery-dl/issues/7852))
- [facebook] implement `include` option ([#7848](https://github.com/mikf/gallery-dl/issues/7848))
- [itaku] implement `include` option ([#7707](https://github.com/mikf/gallery-dl/issues/7707))
- [patreon] implement `cursor` support ([#7856](https://github.com/mikf/gallery-dl/issues/7856))
- [patreon] support `date-max` for `/home` URLs ([#7856](https://github.com/mikf/gallery-dl/issues/7856))
- [pixiv] improve AJAX error messages ([#7896](https://github.com/mikf/gallery-dl/issues/7896))
#### Metadata
- [behance] provide `creator[name]` metadata ([#7885](https://github.com/mikf/gallery-dl/issues/7885))
- [civitai] ensure `file` & `post` data has a `date` value ([#7548](https://github.com/mikf/gallery-dl/issues/7548))
- [inkbunny] enable `pool` metadata ([#7850](https://github.com/mikf/gallery-dl/issues/7850))
- [nhentai] provide `gallery_id` for pagination results ([#7868](https://github.com/mikf/gallery-dl/issues/7868))
### Downloaders
- [ytdl] add `deprecations` option
### Post Processors
- [exec] add `session` option ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
### Snap
- migrate base to `core22` ([#7841](https://github.com/mikf/gallery-dl/issues/7841))
- switch to `yt-dlp` ([#7865](https://github.com/mikf/gallery-dl/issues/7865))
- fix deprecated `CRAFT_ARCH_TRIPLET` usage ([#7866](https://github.com/mikf/gallery-dl/issues/7866))
### Formatter
- add `Jinja` template support ([#1390](https://github.com/mikf/gallery-dl/issues/1390))
- add `W` conversion - sanitize whitespace ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
### Miscellaneous
- [actions] fix `parse_logging` import ([#7837](https://github.com/mikf/gallery-dl/issues/7837))
- [options] add `--sleep-429` command-line option ([#7871](https://github.com/mikf/gallery-dl/issues/7871))
- [scripts] ensure files use `utf-8` encoding and `\n` newlines ([#7872](https://github.com/mikf/gallery-dl/issues/7872))
- [tests/extractor] improve example URL mismatch error message ([#7872](https://github.com/mikf/gallery-dl/issues/7872))
- [tests/results] fix `#log` checks for URLs raising exceptions
- fix exit status for requests' `JSONDecodeError` ([#4380](https://github.com/mikf/gallery-dl/issues/4380))
- use walrus operators `:=` in `if` statements ([#7671](https://github.com/mikf/gallery-dl/issues/7671))

## 1.30.0 - 2025-07-15
### Changes
- raise minimum supported Python version to 3.8 ([#7671](https://github.com/mikf/gallery-dl/issues/7671))
- update extractor names ([#7746](https://github.com/mikf/gallery-dl/issues/7746) [#7612](https://github.com/mikf/gallery-dl/issues/7612))
  - |         Old            | New                    |
    |------------------------|------------------------|
    | `kemonoparty`          | `kemono`               |
    | `coomerparty`          | `coomer`               |
    | `koharu`               | `schalenetwork`        |
    | `naver`                | `naver-blog`           |
    | `chzzk`                | `naver-chzzk`          |
    | `naverwebtoon`         | `naver-webtoon`        |
    | `pixiv:novel`          | `pixiv-novel:novel`    |
    | `pixiv:novel-user`     | `pixiv-novel:user`     |
    | `pixiv:novel-series`   | `pixiv-novel:series`   |
    | `pixiv:novel-bookmark` | `pixiv-novel:bookmark` |
  - config settings will automatically use the old values
  - target directories using `{category}` will use the *new* category names by default
  - use `--compat` or `"category-map": "compat"` to restore old `category` names
- include exit status bitmasks of `NotFoundError` (`8`) and `NoExtractorError` (`64`)
  into general `HttpError` (`4`) and `InputError` (`32`) respectively
### Extractors
#### Additions
- [civitai] add `search-images` and `posts` extractors ([#7609](https://github.com/mikf/gallery-dl/issues/7609))
- [comick] add support ([#1825](https://github.com/mikf/gallery-dl/issues/1825) [#6782](https://github.com/mikf/gallery-dl/issues/6782))
- [dankefuerslesen] add support ([#7669](https://github.com/mikf/gallery-dl/issues/7669))
- [dynastyscans] add `anthology` extractor ([#7627](https://github.com/mikf/gallery-dl/issues/7627))
- [girlsreleased] add support ([#6200](https://github.com/mikf/gallery-dl/issues/6200))
- [girlswithmuscle] add support ([#4493](https://github.com/mikf/gallery-dl/issues/4493) [#6016](https://github.com/mikf/gallery-dl/issues/6016))
- [iwara] add support ([#2652](https://github.com/mikf/gallery-dl/issues/2652) [#5840](https://github.com/mikf/gallery-dl/issues/5840) [#7785](https://github.com/mikf/gallery-dl/issues/7785))
- [kemono] add `artists` extractor ([#7582](https://github.com/mikf/gallery-dl/issues/7582))
- [misskey] add `avatar`, `background`, and `info` extractors ([#5347](https://github.com/mikf/gallery-dl/issues/5347))
- [motherless] add `group` extractor ([#7774](https://github.com/mikf/gallery-dl/issues/7774) [#7787](https://github.com/mikf/gallery-dl/issues/7787))
- [naver-chzzk] add `comment` and `community` extractors ([#7735](https://github.com/mikf/gallery-dl/issues/7735) [#7741](https://github.com/mikf/gallery-dl/issues/7741))
- [nudostar] add support ([#5735](https://github.com/mikf/gallery-dl/issues/5735) [#6556](https://github.com/mikf/gallery-dl/issues/6556))
- [rawkuma] add support ([#4571](https://github.com/mikf/gallery-dl/issues/4571))
- [redbust] add support ([#6759](https://github.com/mikf/gallery-dl/issues/6759) [#6918](https://github.com/mikf/gallery-dl/issues/6918) [#7043](https://github.com/mikf/gallery-dl/issues/7043))
#### Fixes
- [4archive] fix `thread` extractor
- [arcalive] fix download URLs ([#7678](https://github.com/mikf/gallery-dl/issues/7678))
- [arcalive] replace `ac-p.namu` subdomains with `ac-o.namu` ([#7556](https://github.com/mikf/gallery-dl/issues/7556))
- [archivedmoe] fix redirection issue ([#7652](https://github.com/mikf/gallery-dl/issues/7652) [#7653](https://github.com/mikf/gallery-dl/issues/7653) [#7664](https://github.com/mikf/gallery-dl/issues/7664))
- [aryion] fix `favorite` extractor ([#7775](https://github.com/mikf/gallery-dl/issues/7775))
- [batoto] fix downloading manga with alerts/notices ([#7657](https://github.com/mikf/gallery-dl/issues/7657))
- [behance] fix `403 Forbidden` errors ([#7710](https://github.com/mikf/gallery-dl/issues/7710))
- [bunkr] fix file downloads ([#7747](https://github.com/mikf/gallery-dl/issues/7747))
- [civitai] fix & update `search` extractor ([#7609](https://github.com/mikf/gallery-dl/issues/7609))
- [danbooru] fix Ugoira conversions for posts without `ZIP:ZipFileName` ([#7630](https://github.com/mikf/gallery-dl/issues/7630))
- [deviantart:tag] fix `username` ([#7587](https://github.com/mikf/gallery-dl/issues/7587))
- [deviantart:tiptap] fix `TypeError` when `textAlign` is null ([#7639](https://github.com/mikf/gallery-dl/issues/7639))
- [directlink] fix config lookups by subcategory ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [discord] support forwarded messages & handle missing threads ([#7706](https://github.com/mikf/gallery-dl/issues/7706) [#7722](https://github.com/mikf/gallery-dl/issues/7722))
- [furaffinity] fix `submissions` results ([#7759](https://github.com/mikf/gallery-dl/issues/7759))
- [hitomi] fix negative tag searches ([#7694](https://github.com/mikf/gallery-dl/issues/7694))
- [kemono] fix tagged creator posts
- [mangadex:list] fix config lookups for `list-feed` subcategory
- [nijie] fix file extraction ([#7624](https://github.com/mikf/gallery-dl/issues/7624))
- [paheal] fix `404 Not Found` error for tags with URL encoded characters ([#7642](https://github.com/mikf/gallery-dl/issues/7642))
- [patreon] send `Referer` header when downloading `.m3u8` videos ([#7571](https://github.com/mikf/gallery-dl/issues/7571))
- [patreon] fix `campaign_id` extraction from Next.js 13 creator pages ([#7773](https://github.com/mikf/gallery-dl/issues/7773))
- [readcomiconline] fix extraction ([#7606](https://github.com/mikf/gallery-dl/issues/7606) [#7789](https://github.com/mikf/gallery-dl/issues/7789))
- [reddit] fix archive IDs of fallback files ([#7760](https://github.com/mikf/gallery-dl/issues/7760))
- [rule34] fix file downloads ([#7697](https://github.com/mikf/gallery-dl/issues/7697))
- [sankaku] fix extracting extended tag categories ([#7744](https://github.com/mikf/gallery-dl/issues/7744))
- [sexcom] prevent `.css` file downloads ([#7632](https://github.com/mikf/gallery-dl/issues/7632))
- [skeb] fix `KeyError - 'frame_rate'` ([#7798](https://github.com/mikf/gallery-dl/issues/7798))
- [tiktok] handle exceptions when extracting avatars ([#7682](https://github.com/mikf/gallery-dl/issues/7682))
- [vsco] fix JSON returned by VSCO ([#7821](https://github.com/mikf/gallery-dl/issues/7821))
- [warosu] HTML attribute fix ([#7676](https://github.com/mikf/gallery-dl/issues/7676) [#7677](https://github.com/mikf/gallery-dl/issues/7677) [#7777](https://github.com/mikf/gallery-dl/issues/7777))
#### Improvements
- [artstation] support downloading `.mview` files ([#7812](https://github.com/mikf/gallery-dl/issues/7812))
- [civitai] support "My Reactions" results for videos ([#7608](https://github.com/mikf/gallery-dl/issues/7608))
- [e621] support `e621.cc/posts` URLs ([#6809](https://github.com/mikf/gallery-dl/issues/6809))
- [erome] restructure extractor hierarchy ([#7804](https://github.com/mikf/gallery-dl/issues/7804))
- [everia] prevent redirect when fetching post pages
- [exhentai] ensure file signature bytes aren`t all zero ([#4902](https://github.com/mikf/gallery-dl/issues/4902))
- [exhentai] implement `"source": "metadata"` ([#4902](https://github.com/mikf/gallery-dl/issues/4902))
- [fanbox] return `fileMap` files in order ([#2718](https://github.com/mikf/gallery-dl/issues/2718))
- [gelbooru] improve error message for `401 Unauthorized` responses ([#7674](https://github.com/mikf/gallery-dl/issues/7674))
- [imagevenue] detect `404` image files ([#7570](https://github.com/mikf/gallery-dl/issues/7570))
- [instagram] provide more descriptive URLs for `video_dash_manifest` videos ([#7631](https://github.com/mikf/gallery-dl/issues/7631))
- [pinterest] support `pin.it` redirects to board ([#7805](https://github.com/mikf/gallery-dl/issues/7805))
- [pinterest] match board URLs with query strings ([#7805](https://github.com/mikf/gallery-dl/issues/7805))
- [rule34us] prioritize `video.rule34.us` for video downloads ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [rule34xyz] implement login with username & password ([#7736](https://github.com/mikf/gallery-dl/issues/7736))
- [sankaku] allow passing cookies ([#7333](https://github.com/mikf/gallery-dl/issues/7333))
- [sexcom] support `/pics/` URLs ([#7611](https://github.com/mikf/gallery-dl/issues/7611))
- [tiktok] detect `login` page redirects ([#7716](https://github.com/mikf/gallery-dl/issues/7716))
- [vk] detect `challenge` page redirects ([#7650](https://github.com/mikf/gallery-dl/issues/7650))
- [vk] prevent `404 Not Found` errors for file downloads
- [vk] add continuation message ([#7650](https://github.com/mikf/gallery-dl/issues/7650))
- [warosu] detect missing images by checking hostname ([#7698](https://github.com/mikf/gallery-dl/issues/7698) [#7699](https://github.com/mikf/gallery-dl/issues/7699))
- [ytdl] set domain as subcategory when using `Generic` extractor ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
#### Metadata
- [civitai] always provide `file[…]` metadata ([#7548](https://github.com/mikf/gallery-dl/issues/7548))
- [everia] improve `filename` by unquoting URLs ([#7620](https://github.com/mikf/gallery-dl/issues/7620))
- [fanbox] extract `archives` metadata ([#7454](https://github.com/mikf/gallery-dl/issues/7454))
- [gelbooru_v02] extract `total`/`search_count` metadata ([#7689](https://github.com/mikf/gallery-dl/issues/7689))
- [instagram] provide `post_url` for stories and highlights ([#7810](https://github.com/mikf/gallery-dl/issues/7810))
- [kemono:discord] update server & channel metadata ([#7569](https://github.com/mikf/gallery-dl/issues/7569))
- [mangaread] fix `manga_alt` metadata
- [newgrounds] filter `<script>` content in `tags` ([#7604](https://github.com/mikf/gallery-dl/issues/7604))
- [patreon] return metadata for paywalled posts ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [pinterest] remove excess whitespace from `description` fields ([#4335](https://github.com/mikf/gallery-dl/issues/4335))
- [pixiv] remove `/jump.php` from `caption` links ([#4327](https://github.com/mikf/gallery-dl/issues/4327))
- [tenor] extract more metadata
- [twitter] extract `source_id` and `source_user` metadata ([#7470](https://github.com/mikf/gallery-dl/issues/7470) [#7640](https://github.com/mikf/gallery-dl/issues/7640))
- [twitter] extract `sensitive_flags` metadata ([#2523](https://github.com/mikf/gallery-dl/issues/2523))
- [vk] fix `user` metadata extraction
#### Options
- [civitai] add option to retrieve `post` metadata ([#7548](https://github.com/mikf/gallery-dl/issues/7548))
- [exhentai] add `limits-action` option ([#6504](https://github.com/mikf/gallery-dl/issues/6504))
- [fanbox] add `fee-max` option ([#7726](https://github.com/mikf/gallery-dl/issues/7726))
- [kemono] extend `duplicates` option ([#7696](https://github.com/mikf/gallery-dl/issues/7696))
- [mangadex] allow `ratings` to be a (comma-separated) string ([#7799](https://github.com/mikf/gallery-dl/issues/7799))
- [misskey] add `include` option ([#5347](https://github.com/mikf/gallery-dl/issues/5347))
- [sankaku] remove `id-format` option ([#5073](https://github.com/mikf/gallery-dl/issues/5073) [#6808](https://github.com/mikf/gallery-dl/issues/6808))
- [webtoons] add `banners` and `thumbnails` options ([#6468](https://github.com/mikf/gallery-dl/issues/6468) [#7441](https://github.com/mikf/gallery-dl/issues/7441))
#### Common
- update `browser` User-Agents and headers
- allow using predefined Firefox/Chrome `headers` & `ciphers`
- allow overriding `user-agent` when `browser` is used ([#7647](https://github.com/mikf/gallery-dl/issues/7647))
- support using system certificates via `truststore` ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- fix URLs not getting written to `-e/--error-file` ([#7758](https://github.com/mikf/gallery-dl/issues/7758))
- raise ChallengeError for Cloudflare & DDoS-Guard challenge pages ([#1945](https://github.com/mikf/gallery-dl/issues/1945))
- prevent exceptions for for non-fatal requests ([#7598](https://github.com/mikf/gallery-dl/issues/7598))
- simplify `user` extractors by using `Dispatch` mixin
- allow `GalleryExtractor` instances to return additional asset files
#### Removals
- [mangasee] remove module
### Downloaders
- support dynamic download `rate` limits ([#7638](https://github.com/mikf/gallery-dl/issues/7638))
- [http] fail downloads with HTML content ([#4798](https://github.com/mikf/gallery-dl/issues/4798) [#7697](https://github.com/mikf/gallery-dl/issues/7697))
- [http] add MIME type and signature check for `.html` files
- [http] fix potential `FileExistsError` when `.part` file moved ([#5385](https://github.com/mikf/gallery-dl/issues/5385))
- [http] implement `_http_signature` checks ([#4902](https://github.com/mikf/gallery-dl/issues/4902))
- [ytdl] fix `KeyError - 'filepath'` when using legacy `youtube_dl` ([#6949](https://github.com/mikf/gallery-dl/issues/6949) [#7752](https://github.com/mikf/gallery-dl/issues/7752) [#7824](https://github.com/mikf/gallery-dl/issues/7824))
- [ytdl] fix postprocessing/merge errors ([#7581](https://github.com/mikf/gallery-dl/issues/7581))
- [ytdl] detect `yt-dlp` independent of module name ([#7599](https://github.com/mikf/gallery-dl/issues/7599))
- [ytdl] support custom headers when fetching HLS/DASH manifests
### Post Processors
- implement shortcuts for `mode` and `event` options (e.g. `metadata/jsonl@post`)
- [exec] implement `commands` option
### Options
- add `category-map` and `config-map` ([#7612](https://github.com/mikf/gallery-dl/issues/7612))
- add `signals-actions` ([#1861](https://github.com/mikf/gallery-dl/issues/1861) [#6582](https://github.com/mikf/gallery-dl/issues/6582))
- add `--compat` command-line option
- add `--Print` command-line option
- swap `--print` and `--Print` semantics
### Cookies
- add native support for LibreWolf profiles ([#4101](https://github.com/mikf/gallery-dl/issues/4101) [#7625](https://github.com/mikf/gallery-dl/issues/7625))
- improve cookie-related logging messages
- update expired cookie messages ([#7644](https://github.com/mikf/gallery-dl/issues/7644))
### Formatter
- add `D` conversion - ISO 8601 string to `datetime`
- add `L` conversion - ISO 639-1 code to language name
- change old `L`/length conversion to `n`
- implement `M` format specifier
### Optimizations
- replace `%`-formatted and `.format(…)` strings with `f-strings` ([#7671](https://github.com/mikf/gallery-dl/issues/7671))
- improve regular expression usage
- replace `match.group(N)` with `match[N]` ([#7671](https://github.com/mikf/gallery-dl/issues/7671))
- update `match.lastindex` usage
- remove pre-3.8 workarounds ([#7671](https://github.com/mikf/gallery-dl/issues/7671))
- remove `@staticmethod` decorators
- add `request_json()` and `request_xml()` functions
- slightly improve performance of `extract` functions
- slightly improve `filter` performance
### Miscellaneous
- [actions] add `flag` and `raise` actions
- [job] refactor parent-child config path building ([#7527](https://github.com/mikf/gallery-dl/issues/7527))
- [job:data] wrap exceptions in a dict ([#7723](https://github.com/mikf/gallery-dl/issues/7723))
- [path] support character sequences in `path-restrict` replacements ([#1707](https://github.com/mikf/gallery-dl/issues/1707))
- [pyinstaller] exclude `pkg_resources` module ([#7592](https://github.com/mikf/gallery-dl/issues/7592))
- [scripts/init] add scripts to generate initial extractor code and test results
- [scripts/options] make output width independent of terminal size
- fix Last-Modified mtime overwriting post processor mtime ([#7529](https://github.com/mikf/gallery-dl/issues/7529))
- use `pip` for `make install` ([#7628](https://github.com/mikf/gallery-dl/issues/7628))

## 1.29.7 - 2025-05-23
### Extractors
#### Additions
- [mangadex] add `following` extractor ([#7487](https://github.com/mikf/gallery-dl/issues/7487))
- [pixeldrain] add support for filesystem URLs ([#7473](https://github.com/mikf/gallery-dl/issues/7473))
#### Fixes
- [bluesky] handle posts without `record` data ([#7499](https://github.com/mikf/gallery-dl/issues/7499))
- [civitai] fix & improve video downloads ([#7502](https://github.com/mikf/gallery-dl/issues/7502))
- [civitai] fix exception for images without `modelVersionId` ([#7432](https://github.com/mikf/gallery-dl/issues/7432))
- [civitai] make metadata extraction non-fatal ([#7562](https://github.com/mikf/gallery-dl/issues/7562))
- [fanbox] use `"browser": "firefox"` by default ([#7490](https://github.com/mikf/gallery-dl/issues/7490))
- [idolcomplex] fix pagination logic ([#7549](https://github.com/mikf/gallery-dl/issues/7549))
- [idolcomplex] fix 429 error during login by adding a 10s delay
- [instagram:stories] fix `post_date` metadata ([#7521](https://github.com/mikf/gallery-dl/issues/7521))
- [motherless] fix video gallery downloads ([#7530](https://github.com/mikf/gallery-dl/issues/7530))
- [pinterest] handle `story_pin_product_sticker_block` blocks ([#7563](https://github.com/mikf/gallery-dl/issues/7563))
- [subscribestar] fix `content` and `title` metadata ([#7486](https://github.com/mikf/gallery-dl/issues/7486) [#7526](https://github.com/mikf/gallery-dl/issues/7526))
#### Improvements
- [arcalive] allow overriding default `User-Agent` header ([#7556](https://github.com/mikf/gallery-dl/issues/7556))
- [fanbox] update API headers ([#7490](https://github.com/mikf/gallery-dl/issues/7490))
- [flickr] add `info` option ([#4720](https://github.com/mikf/gallery-dl/issues/4720) [#6817](https://github.com/mikf/gallery-dl/issues/6817))
- [flickr] add `profile` option
- [instagram:stories] add `split` option ([#7521](https://github.com/mikf/gallery-dl/issues/7521))
- [mangadex] implement login with client credentials
- [mangadex] send `Authorization` header only when necessary
- [mastodon] support Akkoma/Pleroma `/notice/:ID` URLs ([#7496](https://github.com/mikf/gallery-dl/issues/7496))
- [mastodon] support Akkoma/Pleroma `/objects/:UUID` URLs ([#7497](https://github.com/mikf/gallery-dl/issues/7497))
- [pixiv] Implement sanity handling for ugoira works ([#4327](https://github.com/mikf/gallery-dl/issues/4327) [#6297](https://github.com/mikf/gallery-dl/issues/6297) [#7285](https://github.com/mikf/gallery-dl/issues/7285) [#7434](https://github.com/mikf/gallery-dl/issues/7434))
- [twitter:ctid] reduce chance of generating the same ID
#### Metadata
- [civitai] provide proper `extension` for model files ([#7432](https://github.com/mikf/gallery-dl/issues/7432))
- [flickr] provide `license_name` metadata
- [sankaku] support new `tags` categories ([#7333](https://github.com/mikf/gallery-dl/issues/7333) [#7553](https://github.com/mikf/gallery-dl/issues/7553))
- [vipergirls] provide `num` and `count` metadata ([#7479](https://github.com/mikf/gallery-dl/issues/7479))
- [vipergirls] extract more metadata & rename fields ([#7479](https://github.com/mikf/gallery-dl/issues/7479))
### Downloaders
- [http] fix setting `mtime` per file ([#7529](https://github.com/mikf/gallery-dl/issues/7529))
- [ytdl] improve temp/part file handling ([#6949](https://github.com/mikf/gallery-dl/issues/6949) [#7494](https://github.com/mikf/gallery-dl/issues/7494))
### Cookies
- support Zen browser ([#7233](https://github.com/mikf/gallery-dl/issues/7233) [#7546](https://github.com/mikf/gallery-dl/issues/7546))

## 1.29.6 - 2025-05-04
### Extractors
#### Additions
- [manganelo] support `nelomanga.net` and mirror domains ([#7423](https://github.com/mikf/gallery-dl/issues/7423))
#### Fixes
- [deviantart] unescape `\'` in JSON data ([#6653](https://github.com/mikf/gallery-dl/issues/6653))
- [kemonoparty] revert to using default creator posts endpoint ([#7438](https://github.com/mikf/gallery-dl/issues/7438) [#7450](https://github.com/mikf/gallery-dl/issues/7450) [#7462](https://github.com/mikf/gallery-dl/issues/7462))
- [pixiv:novel] fix `embeds` extraction by using AJAX API ([#7422](https://github.com/mikf/gallery-dl/issues/7422) [#7435](https://github.com/mikf/gallery-dl/issues/7435))
- [scrolller] fix exception for albums with missing media ([#7428](https://github.com/mikf/gallery-dl/issues/7428))
- [twitter] fix `404 Not Found ()` errors ([#7382](https://github.com/mikf/gallery-dl/issues/7382) [#7386](https://github.com/mikf/gallery-dl/issues/7386) [#7426](https://github.com/mikf/gallery-dl/issues/7426) [#7430](https://github.com/mikf/gallery-dl/issues/7430) [#7431](https://github.com/mikf/gallery-dl/issues/7431) [#7445](https://github.com/mikf/gallery-dl/issues/7445) [#7459](https://github.com/mikf/gallery-dl/issues/7459))
#### Improvements
- [kemonoparty] add `endpoint` option ([#7438](https://github.com/mikf/gallery-dl/issues/7438) [#7450](https://github.com/mikf/gallery-dl/issues/7450) [#7462](https://github.com/mikf/gallery-dl/issues/7462))
- [tumblr] improve error message for dashboard-only blogs ([#7455](https://github.com/mikf/gallery-dl/issues/7455))
- [weasyl] support `/view/` URLs ([#7469](https://github.com/mikf/gallery-dl/issues/7469))
#### Metadata
- [chevereto] extract `date` metadata ([#7437](https://github.com/mikf/gallery-dl/issues/7437))
- [civitai] implement retrieving `model` and `version` metadata ([#7432](https://github.com/mikf/gallery-dl/issues/7432))
- [manganelo] extract more metadata
### Post Processors
- [directory] add `directory` post processor ([#7432](https://github.com/mikf/gallery-dl/issues/7432))
### Miscellaneous
- [job] do not reset skip count when `skip-filter` fails ([#7433](https://github.com/mikf/gallery-dl/issues/7433))

## 1.29.5 - 2025-04-26
### Extractors
#### Additions
- [bluesky] add `video` extractor ([#4438](https://github.com/mikf/gallery-dl/issues/4438))
- [instagram] add `followers` extractor ([#7374](https://github.com/mikf/gallery-dl/issues/7374))
- [itaku] add `stars` extractor ([#7411](https://github.com/mikf/gallery-dl/issues/7411))
- [pictoa] add support ([#6683](https://github.com/mikf/gallery-dl/issues/6683) [#7409](https://github.com/mikf/gallery-dl/issues/7409))
- [twitter] add `followers` extractor ([#6331](https://github.com/mikf/gallery-dl/issues/6331))
#### Fixes
- [architizer] fix `project` extractor ([#7421](https://github.com/mikf/gallery-dl/issues/7421))
- [bluesky:likes] fix infinite loop ([#7194](https://github.com/mikf/gallery-dl/issues/7194) [#7287](https://github.com/mikf/gallery-dl/issues/7287))
- [deviantart] fix `401 Unauthorized` errors for for multi-image posts ([#6653](https://github.com/mikf/gallery-dl/issues/6653))
- [everia] fix `title` extraction ([#7379](https://github.com/mikf/gallery-dl/issues/7379))
- [fanbox] fix `comments` extraction
- [fapello] stop pagination on empty results ([#7385](https://github.com/mikf/gallery-dl/issues/7385))
- [kemonoparty] fix `archives` option ([#7416](https://github.com/mikf/gallery-dl/issues/7416) [#7419](https://github.com/mikf/gallery-dl/issues/7419))
- [pixiv] fix `user_details` requests not being cached ([#7414](https://github.com/mikf/gallery-dl/issues/7414))
- [pixiv:novel] handle exceptions during `embeds` extraction ([#7422](https://github.com/mikf/gallery-dl/issues/7422))
- [subscribestar] fix username & password login
- [wikifeet] support site redesign ([#7286](https://github.com/mikf/gallery-dl/issues/7286) [#7396](https://github.com/mikf/gallery-dl/issues/7396))
#### Improvements
- [bluesky:likes] use `repo.listRecords` endpoint ([#7194](https://github.com/mikf/gallery-dl/issues/7194) [#7287](https://github.com/mikf/gallery-dl/issues/7287))
- [gelbooru] don't hardcode image server domains ([#7392](https://github.com/mikf/gallery-dl/issues/7392))
- [instagram] support `/share/` URLs ([#7241](https://github.com/mikf/gallery-dl/issues/7241))
- [kemonoparty] use `/posts-legacy` endpoint ([#6780](https://github.com/mikf/gallery-dl/issues/6780) [#6931](https://github.com/mikf/gallery-dl/issues/6931) [#7404](https://github.com/mikf/gallery-dl/issues/7404))
- [naver] support videos ([#4682](https://github.com/mikf/gallery-dl/issues/4682) [#7395](https://github.com/mikf/gallery-dl/issues/7395))
- [scrolller] support album posts ([#7339](https://github.com/mikf/gallery-dl/issues/7339))
- [subscribestar] add warning for missing login cookie
- [twitter] update API endpoint query hashes ([#7382](https://github.com/mikf/gallery-dl/issues/7382) [#7386](https://github.com/mikf/gallery-dl/issues/7386))
- [weasyl] use `gallery-dl` User-Agent header ([#7412](https://github.com/mikf/gallery-dl/issues/7412))
#### Metadata
- [deviantart:stash] extract more metadata ([#7397](https://github.com/mikf/gallery-dl/issues/7397))
- [moebooru:pool] replace underscores in pool names ([#4646](https://github.com/mikf/gallery-dl/issues/4646))
- [naver] fix recent `date` bug ([#4682](https://github.com/mikf/gallery-dl/issues/4682))
### Post Processors
- [ugoira] restore `keep-files` functionality ([#7304](https://github.com/mikf/gallery-dl/issues/7304))
- [ugoira] support `"keep-files": true` + custom extension ([#7304](https://github.com/mikf/gallery-dl/issues/7304))
- [ugoira] use `_ugoira_frame_index` to detect `.zip` files
### Miscellaneous
- [util] auto-update Chrome version
- use internal version of `re.compile()` for extractor patterns

## 1.29.4 - 2025-04-13
### Extractors
#### Additions
- [chevereto] support `imagepond.net` ([#7278](https://github.com/mikf/gallery-dl/issues/7278))
- [webtoons] add `artist` extractor ([#7274](https://github.com/mikf/gallery-dl/issues/7274))
#### Fixes
- [deviantart] fix `KeyError: 'has_subfolders'` ([#7272](https://github.com/mikf/gallery-dl/issues/7272) [#7337](https://github.com/mikf/gallery-dl/issues/7337))
- [discord] fix `parent` keyword inconsistency ([#7341](https://github.com/mikf/gallery-dl/issues/7341) [#7353](https://github.com/mikf/gallery-dl/issues/7353))
- [E621:pool] fix `AttributeError` ([#7265](https://github.com/mikf/gallery-dl/issues/7265) [#7344](https://github.com/mikf/gallery-dl/issues/7344))
- [everia] fix/improve image extraction ([#7270](https://github.com/mikf/gallery-dl/issues/7270))
- [gelbooru] fix video URLs ([#7345](https://github.com/mikf/gallery-dl/issues/7345))
- [hentai2read] fix `AttributeError` exception for chapters without artist ([#7355](https://github.com/mikf/gallery-dl/issues/7355))
- [issuu] fix extractors ([#7317](https://github.com/mikf/gallery-dl/issues/7317))
- [kemonoparty] fix file paths with backslashes ([#7321](https://github.com/mikf/gallery-dl/issues/7321))
- [readcomiconline] fix `issue` extractor ([#7269](https://github.com/mikf/gallery-dl/issues/7269) [#7330](https://github.com/mikf/gallery-dl/issues/7330))
- [rule34xyz] update to API v2 ([#7289](https://github.com/mikf/gallery-dl/issues/7289))
- [zerochan] fix `KeyError: 'author'` ([#7282](https://github.com/mikf/gallery-dl/issues/7282))
#### Improvements
- [instagram] use Chrome `User-Agent` by default ([#6379](https://github.com/mikf/gallery-dl/issues/6379))
- [pixiv] support `phixiv.net` URLs ([#7352](https://github.com/mikf/gallery-dl/issues/7352))
- [tumblr] support URLs without subdomain ([#7358](https://github.com/mikf/gallery-dl/issues/7358))
- [webtoons] download JPEG files in higher quality
- [webtoons] use a default 0.5-1.5s delay between requests ([#7329](https://github.com/mikf/gallery-dl/issues/7329))
- [zzup] support `w.zzup.com` URLs ([#7327](https://github.com/mikf/gallery-dl/issues/7327))
### Downloaders
- [ytdl] fix `KeyError: 'extractor'` exception when `ytdl` reports an error ([#7301](https://github.com/mikf/gallery-dl/issues/7301))
### Post Processors
- [metadata] add `metadata-path` option ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [metadata] fix handling of empty directory paths ([#7296](https://github.com/mikf/gallery-dl/issues/7296))
- [ugoira] preserve `extension` when using `"mode": "archive"` ([#7304](https://github.com/mikf/gallery-dl/issues/7304))
### Miscellaneous
- [formatter] add `i` and `f` conversions ([#6582](https://github.com/mikf/gallery-dl/issues/6582))

## 1.29.3 - 2025-03-29
### Extractors
#### Additions
- [danbooru] add `favgroup` extractor
- [imhentai] support `hentaienvy.com` and `hentaizap.com` ([#7192](https://github.com/mikf/gallery-dl/issues/7192) [#7218](https://github.com/mikf/gallery-dl/issues/7218))
#### Fixes
- [bunkr] fix `filename` extraction ([#7237](https://github.com/mikf/gallery-dl/issues/7237))
- [deviantart:stash] fix legacy `sta.sh` links ([#7181](https://github.com/mikf/gallery-dl/issues/7181))
- [hitomi] fix extractors ([#7230](https://github.com/mikf/gallery-dl/issues/7230))
- [mangapark] fix extractors ([#4999](https://github.com/mikf/gallery-dl/issues/4999) [#5883](https://github.com/mikf/gallery-dl/issues/5883) [#6507](https://github.com/mikf/gallery-dl/issues/6507) [#6908](https://github.com/mikf/gallery-dl/issues/6908) [#7232](https://github.com/mikf/gallery-dl/issues/7232))
- [nozomi] fix extractors ([#7242](https://github.com/mikf/gallery-dl/issues/7242))
- [patreon] include subdomains in `session_id` cookie check ([#7188](https://github.com/mikf/gallery-dl/issues/7188))
- [patreon] do not match `/messages` URLs as creator ([#7187](https://github.com/mikf/gallery-dl/issues/7187))
- [pinterest] handle `story_pin_static_sticker_block` blocks ([#7251](https://github.com/mikf/gallery-dl/issues/7251))
- [sexcom] fix `gif` pin extraction ([#7239](https://github.com/mikf/gallery-dl/issues/7239))
- [skeb] make exceptions when extracting posts non-fatal ([#7250](https://github.com/mikf/gallery-dl/issues/7250))
- [zerochan] parse `JSON-LD` data ([#7178](https://github.com/mikf/gallery-dl/issues/7178))
#### Improvements
- [arcalive] extend `gifs` option
- [deviantart] support multiple images for single posts ([#6653](https://github.com/mikf/gallery-dl/issues/6653) [#7261](https://github.com/mikf/gallery-dl/issues/7261))
- [deviantart] add subfolder support ([#4988](https://github.com/mikf/gallery-dl/issues/4988) [#7185](https://github.com/mikf/gallery-dl/issues/7185) [#7220](https://github.com/mikf/gallery-dl/issues/7220))
- [deviantart] match `/gallery/recommended-for-you` URLs ([#7168](https://github.com/mikf/gallery-dl/issues/7168) [#7243](https://github.com/mikf/gallery-dl/issues/7243))
- [instagram] extract videos from `video_dash_manifest` data ([#6379](https://github.com/mikf/gallery-dl/issues/6379) [#7006](https://github.com/mikf/gallery-dl/issues/7006))
- [mangapark] support mirror domains
- [mangapark] support v3 URLs ([#2072](https://github.com/mikf/gallery-dl/issues/2072))
- [mastodon] support `/statuses` URLs ([#7255](https://github.com/mikf/gallery-dl/issues/7255))
- [sexcom] support new-style `/gifs` and `/videos` URLs ([#7239](https://github.com/mikf/gallery-dl/issues/7239))
- [subscribestar] detect redirects to `/age_confirmation_warning` pages
- [tiktok] add retry mechanism to rehydration data extraction ([#7191](https://github.com/mikf/gallery-dl/issues/7191))
#### Metadata
- [bbc] extract more metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [kemonoparty] extract `archives` metadata ([#7195](https://github.com/mikf/gallery-dl/issues/7195))
- [kemonoparty] enable `username`/`user_profile` metadata by default
- [kemonoparty:discord] always provide `channel_name` metadata ([#7245](https://github.com/mikf/gallery-dl/issues/7245))
- [sexcom] extract `date_url` metadata ([#7239](https://github.com/mikf/gallery-dl/issues/7239))
- [subscribestar] extract `title` metadata ([#7219](https://github.com/mikf/gallery-dl/issues/7219))
### Downloaders
- [ytdl] support processing inline HLS/DASH manifest data ([#6379](https://github.com/mikf/gallery-dl/issues/6379) [#7006](https://github.com/mikf/gallery-dl/issues/7006))
### Miscellaneous
- [aes] simplify `block_count` calculation
- [common] add `subdomains` argument to `cookies_check()` ([#7188](https://github.com/mikf/gallery-dl/issues/7188))
- [config] fix using the same key multiple times with `apply` ([#7127](https://github.com/mikf/gallery-dl/issues/7127))
- [tests] implement expected failures

## 1.29.2 - 2025-03-15
### Extractors
#### Additions
- [arcalive] add support ([#5657](https://github.com/mikf/gallery-dl/issues/5657) [#7100](https://github.com/mikf/gallery-dl/issues/7100))
- [furaffinity] add `folder` extractor ([#1817](https://github.com/mikf/gallery-dl/issues/1817) [#7159](https://github.com/mikf/gallery-dl/issues/7159))
#### Fixes
- [civitai] fix/improve query parameter handling ([#7138](https://github.com/mikf/gallery-dl/issues/7138))
- [facebook] improve `date` extraction ([#7151](https://github.com/mikf/gallery-dl/issues/7151))
- [sankaku] update API URLs ([#7154](https://github.com/mikf/gallery-dl/issues/7154) [#7155](https://github.com/mikf/gallery-dl/issues/7155) [#7163](https://github.com/mikf/gallery-dl/issues/7163))
- [twitter] prevent exception in `_extract_components()` ([#7139](https://github.com/mikf/gallery-dl/issues/7139))
#### Improvements
- [batoto] add `domain` option ([#7174](https://github.com/mikf/gallery-dl/issues/7174))
- [furaffinity] extract `scraps` metadata ([#7015](https://github.com/mikf/gallery-dl/issues/7015))
- [tiktok] implement audio extraction without `yt-dlp`
- [wikimedia] add `subcategories` option ([#2340](https://github.com/mikf/gallery-dl/issues/2340))

## 1.29.1 - 2025-03-08
### Extractors
#### Additions
- [tenor] add support ([#6075](https://github.com/mikf/gallery-dl/issues/6075))
#### Fixes
- [bunkr] update API endpoint ([#7097](https://github.com/mikf/gallery-dl/issues/7097))
- [erome] fix `AttributeError` for albums without tags ([#7076](https://github.com/mikf/gallery-dl/issues/7076))
- [furaffinity] fix `artist` metadata ([#6582](https://github.com/mikf/gallery-dl/issues/6582) [#7115](https://github.com/mikf/gallery-dl/issues/7115) [#7123](https://github.com/mikf/gallery-dl/issues/7123) [#7130](https://github.com/mikf/gallery-dl/issues/7130))
- [jpgfish] decrypt file URLs ([#7073](https://github.com/mikf/gallery-dl/issues/7073) [#7079](https://github.com/mikf/gallery-dl/issues/7079) [#7109](https://github.com/mikf/gallery-dl/issues/7109))
- [sankaku] fix search tag limit check
- [vsco] fix `video` extractor ([#7113](https://github.com/mikf/gallery-dl/issues/7113))
- [vsco] fix extracting videos from `/gallery` results ([#7113](https://github.com/mikf/gallery-dl/issues/7113))
#### Improvements
- [bunkr] add `endpoint` option ([#7097](https://github.com/mikf/gallery-dl/issues/7097))
- [danbooru:pool] download posts in pool order, add `order-posts` option ([#7091](https://github.com/mikf/gallery-dl/issues/7091))
- [erome:search] recognize all URL query parameters ([#7125](https://github.com/mikf/gallery-dl/issues/7125))
- [reddit] add `selftext` option ([#7111](https://github.com/mikf/gallery-dl/issues/7111))
- [redgifs:search] support `/search?query=...` URLs ([#7118](https://github.com/mikf/gallery-dl/issues/7118))
- [sankaku] increase wait time on 429 errors ([#7129](https://github.com/mikf/gallery-dl/issues/7129))
- [tiktok] improve `tiktok-range` parsing ([#7098](https://github.com/mikf/gallery-dl/issues/7098))
### Downloaders
- [http] detect Cloudflare/DDoS-Guard challenges ([#7066](https://github.com/mikf/gallery-dl/issues/7066) [#7121](https://github.com/mikf/gallery-dl/issues/7121))
- warn about invalid `subcategory` values ([#7103](https://github.com/mikf/gallery-dl/issues/7103) [#7119](https://github.com/mikf/gallery-dl/issues/7119))

## 1.29.0 - 2025-03-01
### Changes
- build `gallery-dl.exe` on Windows 10 / Python 3.13 ([#6684](https://github.com/mikf/gallery-dl/issues/6684))
- provide Windows 7 / Python 3.8 builds as `gallery-dl_x86.exe`
### Extractors
#### Additions
- [bilibili] add `user-articles-favorite` extractor ([#6725](https://github.com/mikf/gallery-dl/issues/6725) [#6781](https://github.com/mikf/gallery-dl/issues/6781))
- [boosty] add `direct-messages` extractor ([#6768](https://github.com/mikf/gallery-dl/issues/6768))
- [discord] add support ([#454](https://github.com/mikf/gallery-dl/issues/454) [#6836](https://github.com/mikf/gallery-dl/issues/6836) [#7059](https://github.com/mikf/gallery-dl/issues/7059) [#7067](https://github.com/mikf/gallery-dl/issues/7067))
- [furry34] add support ([#1078](https://github.com/mikf/gallery-dl/issues/1078) [#7018](https://github.com/mikf/gallery-dl/issues/7018))
- [hentaiera] add support ([#3046](https://github.com/mikf/gallery-dl/issues/3046) [#6952](https://github.com/mikf/gallery-dl/issues/6952) [#7020](https://github.com/mikf/gallery-dl/issues/7020))
- [hentairox] add support ([#7003](https://github.com/mikf/gallery-dl/issues/7003))
- [imgur] add support for personal posts ([#6990](https://github.com/mikf/gallery-dl/issues/6990))
- [imhentai] add support ([#1660](https://github.com/mikf/gallery-dl/issues/1660) [#3046](https://github.com/mikf/gallery-dl/issues/3046) [#3824](https://github.com/mikf/gallery-dl/issues/3824) [#4338](https://github.com/mikf/gallery-dl/issues/4338) [#5936](https://github.com/mikf/gallery-dl/issues/5936))
- [tiktok] add support ([#3061](https://github.com/mikf/gallery-dl/issues/3061) [#4177](https://github.com/mikf/gallery-dl/issues/4177) [#5646](https://github.com/mikf/gallery-dl/issues/5646) [#6878](https://github.com/mikf/gallery-dl/issues/6878) [#6708](https://github.com/mikf/gallery-dl/issues/6708))
- [vsco] support `/video/` URLs ([#4295](https://github.com/mikf/gallery-dl/issues/4295) [#6973](https://github.com/mikf/gallery-dl/issues/6973))
#### Fixes
- [bunkr] decrypt file URLs ([#7058](https://github.com/mikf/gallery-dl/issues/7058) [#7070](https://github.com/mikf/gallery-dl/issues/7070) [#7085](https://github.com/mikf/gallery-dl/issues/7085) [#7089](https://github.com/mikf/gallery-dl/issues/7089) [#7090](https://github.com/mikf/gallery-dl/issues/7090))
- [chevereto/jpgfish] fix extraction ([#7073](https://github.com/mikf/gallery-dl/issues/7073) [#7079](https://github.com/mikf/gallery-dl/issues/7079))
- [generic] fix config lookups by subcategory
- [philomena] fix `date` values without UTC offset ([#6921](https://github.com/mikf/gallery-dl/issues/6921))
- [philomena] download `full` URLs to prevent potential 404 errors ([#6922](https://github.com/mikf/gallery-dl/issues/6922))
- [pixiv] prevent exceptions during `comments` extraction ([#6965](https://github.com/mikf/gallery-dl/issues/6965))
- [reddit] restrict subreddit search results ([#7025](https://github.com/mikf/gallery-dl/issues/7025))
- [sankaku] fix extraction ([#7071](https://github.com/mikf/gallery-dl/issues/7071) [#7072](https://github.com/mikf/gallery-dl/issues/7072))
- [subscribestar] fix `post` extractor ([#6582](https://github.com/mikf/gallery-dl/issues/6582))
- [twitter] revert generated CSRF token length to 32 characters ([#6895](https://github.com/mikf/gallery-dl/issues/6895))
- [vipergirls] change default `domain` to `viper.click` ([#4166](https://github.com/mikf/gallery-dl/issues/4166))
- [weebcentral] fix extracting wrong number of chapter pages ([#6966](https://github.com/mikf/gallery-dl/issues/6966))
#### Improvements
- [b4k] update domain to `arch.b4k.dev` ([#6955](https://github.com/mikf/gallery-dl/issues/6955) [#6956](https://github.com/mikf/gallery-dl/issues/6956))
- [bunkr] update default archive ID format ([#6935](https://github.com/mikf/gallery-dl/issues/6935))
- [bunkr] provide fallback URLs for 403 download links ([#6732](https://github.com/mikf/gallery-dl/issues/6732) [#6972](https://github.com/mikf/gallery-dl/issues/6972))
- [bunkr] implement fast `--range` support ([#6985](https://github.com/mikf/gallery-dl/issues/6985))
- [furaffinity] use a default delay of 1 second between requests ([#7054](https://github.com/mikf/gallery-dl/issues/7054))
- [itaku] support gallery section URLs ([#6951](https://github.com/mikf/gallery-dl/issues/6951))
- [patreon] support `/profile/creators` URLs
- [subscribestar] detect and handle redirects ([#6916](https://github.com/mikf/gallery-dl/issues/6916))
- [twibooru] match URLs with `www` subdomain ([#6903](https://github.com/mikf/gallery-dl/issues/6903))
- [twitter] support `grok` cards content ([#7040](https://github.com/mikf/gallery-dl/issues/7040))
- [vsco] improve `m3u8` handling
- [weibo] add `movies` option ([#6988](https://github.com/mikf/gallery-dl/issues/6988))
#### Metadata
- [bunkr] extract `id_url` metadata ([#6935](https://github.com/mikf/gallery-dl/issues/6935))
- [erome] extract `tags` metadata ([#7076](https://github.com/mikf/gallery-dl/issues/7076))
- [issuu] unescape HTML entities
- [newgrounds] provide `comment_html` metadata ([#7038](https://github.com/mikf/gallery-dl/issues/7038))
- [patreon] extract `campaign` metadata ([#6989](https://github.com/mikf/gallery-dl/issues/6989))
### Downloaders
- implement `downloader` options per extractor category
- [http] add `sleep-429` option ([#6996](https://github.com/mikf/gallery-dl/issues/6996))
- [ytdl] support specifying `module` as filesystem paths ([#6991](https://github.com/mikf/gallery-dl/issues/6991))
### Archives
- [archive] implement support for PostgreSQL databases ([#6152](https://github.com/mikf/gallery-dl/issues/6152))
- [archive] add `archive-table` option ([#6152](https://github.com/mikf/gallery-dl/issues/6152))
### Miscellaneous
- [aes] handle errors during `cryptodome` import ([#6906](https://github.com/mikf/gallery-dl/issues/6906))
- [executables] fix loading `certifi` SSL certificates ([#6393](https://github.com/mikf/gallery-dl/issues/6393))
- improve `\f` format string handling for `--print`

## 1.28.5 - 2025-01-28
### Extractors
#### Additions
- [nekohouse] add support ([#5241](https://github.com/mikf/gallery-dl/issues/5241), [#6738](https://github.com/mikf/gallery-dl/issues/6738))
- [turboimagehost] add support for galleries ([#6855](https://github.com/mikf/gallery-dl/issues/6855))
- [xfolio] add support ([#5514](https://github.com/mikf/gallery-dl/issues/5514), [#6351](https://github.com/mikf/gallery-dl/issues/6351), [#6837](https://github.com/mikf/gallery-dl/issues/6837))
#### Fixes
- [4archive] fix `TypeError`
- [adultempire] bypass age confirmation check
- [architizer] fix extraction
- [artstation] avoid Cloudflare challenges ([#5817](https://github.com/mikf/gallery-dl/issues/5817), [#5658](https://github.com/mikf/gallery-dl/issues/5658), [#5564](https://github.com/mikf/gallery-dl/issues/5564), [#5554](https://github.com/mikf/gallery-dl/issues/5554))
- [deviantart] prevent crash when accessing `premium_folder` data ([#6873](https://github.com/mikf/gallery-dl/issues/6873))
- [fapachi] fix extraction ([#6881](https://github.com/mikf/gallery-dl/issues/6881))
- [issuu] fix `user` extractor
- [kemonoparty] fix `username` metadata and filtering by `tag` for `/posts` URLs ([#6833](https://github.com/mikf/gallery-dl/issues/6833))
- [mangafox] fix chapter extraction
- [mangahere] fix chapter extraction
- [pixiv] fix `sanity_level` workaround ([#4327](https://github.com/mikf/gallery-dl/issues/4327))
- [pornpics] fix pagination results from HTML pages
- [twitter] handle exceptions during file extraction ([#6647](https://github.com/mikf/gallery-dl/issues/6647))
- [vsco] fix `JSONDecodeError` ([#6887](https://github.com/mikf/gallery-dl/issues/6887), [#6891](https://github.com/mikf/gallery-dl/issues/6891))
- [weebcentral] fix extraction ([#6860](https://github.com/mikf/gallery-dl/issues/6860))
- [xhamster] fix `gallery` extractor ([#6818](https://github.com/mikf/gallery-dl/issues/6818), [#6876](https://github.com/mikf/gallery-dl/issues/6876))
#### Improvements
- [batoto] use `chapter_id` in default archive IDs ([#6835](https://github.com/mikf/gallery-dl/issues/6835))
- [e621] support `e621.cc` and `e621.anthro.fr` frontend URLs ([#6809](https://github.com/mikf/gallery-dl/issues/6809))
- [e621] prevent premature pagination end ([#6886](https://github.com/mikf/gallery-dl/issues/6886))
- [facebook] allow accessing all metadata in `directory` format strings ([#6874](https://github.com/mikf/gallery-dl/issues/6874))
- [hiperdex] update domain to `hiperdex.com`
- [kemonoparty] enable filtering creator posts by tag ([#6833](https://github.com/mikf/gallery-dl/issues/6833))
- [khinsider] add `covers` option ([#6844](https://github.com/mikf/gallery-dl/issues/6844))
- [komikcast] update domain to `komikcast.la`
- [lofter] improve error handling ([#6865](https://github.com/mikf/gallery-dl/issues/6865))
- [pornpics] avoid redirect when retrieving a gallery page
- [urlgalleries] support new URL format
#### Metadata
- [bunkr] extract better `filename` metadata ([#6824](https://github.com/mikf/gallery-dl/issues/6824))
- [hiperdex] fix `description` metadata
- [khinsider] extract more `album` metadata ([#6844](https://github.com/mikf/gallery-dl/issues/6844))
- [mangaread] fix manga metadata extraction
- [rule34xyz] fix `date` and `tags` metadata
- [saint] fix metadata of `/d/` URLs
- [toyhouse] fix `date`, `artists`, and `characters` metadata
- [webtoons] fix `username` and `author_name` metadata
#### Removals
- [cohost] remove module
- [fanleaks] remove module
- [shimmie2] remove `tentaclerape.net`
- [szurubooru] remove `booru.foalcon.com`
### Miscellaneous
- [docs] add `nix` docs to README ([#6606](https://github.com/mikf/gallery-dl/issues/6606))
- [path] fix exception when using `--rename-to` + `--no-download` ([#6861](https://github.com/mikf/gallery-dl/issues/6861))
- [release] include `scripts/run_tests.py` in release tarball ([#6856](https://github.com/mikf/gallery-dl/issues/6856))

## 1.28.4 - 2025-01-12
### Extractors
#### Additions
- [pexels] add support ([#2286](https://github.com/mikf/gallery-dl/issues/2286), [#4214](https://github.com/mikf/gallery-dl/issues/4214), [#6769](https://github.com/mikf/gallery-dl/issues/6769))
- [weebcentral] add support ([#6778](https://github.com/mikf/gallery-dl/issues/6778))
#### Fixes
- [bunkr] update to new site layout ([#6798](https://github.com/mikf/gallery-dl/issues/6798), [#6805](https://github.com/mikf/gallery-dl/issues/6805))
- [bunkr] fix `ValueError` on relative redirects ([#6790](https://github.com/mikf/gallery-dl/issues/6790))
- [plurk] fix `user` data extraction and make it non-fatal ([#6742](https://github.com/mikf/gallery-dl/issues/6742))
#### Improvements
- [bunkr] support `/f/` media URLs
- [e621] accept `tag` search URLs with empty tag ([#6783](https://github.com/mikf/gallery-dl/issues/6783))
- [pixiv] provide fallback URLs ([#6762](https://github.com/mikf/gallery-dl/issues/6762))
- [wallhaven] extract `search[tags]` and `search[tag_id]` metadata ([#6772](https://github.com/mikf/gallery-dl/issues/6772))
### Miscellaneous
- [util] support not splitting `value` argument when calling `contains()`  ([#6773](https://github.com/mikf/gallery-dl/issues/6773))

## 1.28.3 - 2025-01-04
### Extractors
#### Additions
- [civitai] add `user-videos` extractor ([#6644](https://github.com/mikf/gallery-dl/issues/6644))
- [szurubooru] support `visuabusters.com/booru` ([#6729](https://github.com/mikf/gallery-dl/issues/6729))
#### Fixes
- [8muses] skip albums without valid `permalink` ([#6717](https://github.com/mikf/gallery-dl/issues/6717))
- [batoto] update domains ([#6714](https://github.com/mikf/gallery-dl/issues/6714))
- [deviantart:tiptap] fix deviation embeds without `token`
- [hitomi] fix searches ([#6713](https://github.com/mikf/gallery-dl/issues/6713))
- [instagram:reels] fix `pinned` values ([#6719](https://github.com/mikf/gallery-dl/issues/6719))
- [kemonoparty] handle `discord` favorites ([#6706](https://github.com/mikf/gallery-dl/issues/6706))
- [piczel] fix extraction ([#6735](https://github.com/mikf/gallery-dl/issues/6735))
- [poipiku] fix downloads when post has a warning ([#6736](https://github.com/mikf/gallery-dl/issues/6736))
- [sankaku] support alphanumeric book/pool IDs ([#6757](https://github.com/mikf/gallery-dl/issues/6757))
- [subscribestar] fix attachment downloads ([#6721](https://github.com/mikf/gallery-dl/issues/6721), [#6724](https://github.com/mikf/gallery-dl/issues/6724), [#6758](https://github.com/mikf/gallery-dl/issues/6758))
- [subscribestar] improve `content` metadata extraction ([#6761](https://github.com/mikf/gallery-dl/issues/6761))
- [tapas] fix `TypeError` for locked episodes ([#6700](https://github.com/mikf/gallery-dl/issues/6700))
#### Improvements
- [boosty] support `file` post attachments ([#6760](https://github.com/mikf/gallery-dl/issues/6760))
- [deviantart:tiptap] support more content block types ([#6686](https://github.com/mikf/gallery-dl/issues/6686))
- [directlink] use domain as `subcategory` ([#6703](https://github.com/mikf/gallery-dl/issues/6703))
- [hitomi] provide `search_tags` metadata for `tag` and `search` results ([#6756](https://github.com/mikf/gallery-dl/issues/6756))
- [subscribestar] support `audio` files ([#6758](https://github.com/mikf/gallery-dl/issues/6758))
### Miscellaneous
- [workflows:executables] build with Python 3.13

## 1.28.2 - 2024-12-20
### Extractors
#### Additions
- [cyberdrop] add extractor for media URLs ([#2496](https://github.com/mikf/gallery-dl/issues/2496))
- [itaku] add `search` extractor ([#6613](https://github.com/mikf/gallery-dl/issues/6613))
- [lofter] add initial support ([#650](https://github.com/mikf/gallery-dl/issues/650), [#2294](https://github.com/mikf/gallery-dl/issues/2294), [#4095](https://github.com/mikf/gallery-dl/issues/4095), [#4728](https://github.com/mikf/gallery-dl/issues/4728), [#5656](https://github.com/mikf/gallery-dl/issues/5656), [#6607](https://github.com/mikf/gallery-dl/issues/6607))
- [yiffverse] add support ([#6611](https://github.com/mikf/gallery-dl/issues/6611))
#### Fixes
- [facebook] decode Unicode surrogate pairs in metadata values ([#6599](https://github.com/mikf/gallery-dl/issues/6599))
- [zerochan] parse API responses manually when receiving invalid JSON ([#6632](https://github.com/mikf/gallery-dl/issues/6632))
- [zerochan] fix `source` metadata extraction when not logged in
#### Improvements
- [bilibili] extract files from `module_top` entries ([#6687](https://github.com/mikf/gallery-dl/issues/6687))
- [bilibili] support `/upload/opus` URLs ([#6687](https://github.com/mikf/gallery-dl/issues/6687))
- [bluesky] default to `posts` timeline when `reposts` or `quoted` is enabled ([#6583](https://github.com/mikf/gallery-dl/issues/6583))
- [common] simplify HTTP error messages
- [common] detect `DDoS-Guard` challenge pages
- [deviantart] improve `tiptap` markup to HTML conversion ([#6686](https://github.com/mikf/gallery-dl/issues/6686))
  - fix `KeyError: 'attrs'` for links without `href`
  - support `heading` content blocks
  - support `strike` text markers
- [instagram] extract `date` metadata for stories ([#6677](https://github.com/mikf/gallery-dl/issues/6677))
- [kemonoparty:favorite] support new URL format ([#6676](https://github.com/mikf/gallery-dl/issues/6676))
- [saint] support `saint2.cr` URLs ([#6692](https://github.com/mikf/gallery-dl/issues/6692))
- [tapas] improve extractor hierarchy ([#6680](https://github.com/mikf/gallery-dl/issues/6680))
#### Options
- [cohost] add `avatar` and `background` options ([#6656](https://github.com/mikf/gallery-dl/issues/6656))
### Miscellaneous
- support `*` wildcards for `parent>child` categories, for example `reddit>*` ([#6673](https://github.com/mikf/gallery-dl/issues/6673))
- use latest Firefox UA as default `user-agent`
- use random unused port for `"user-agent": "browser"` requests

## 1.28.1 - 2024-12-07
### Extractors
#### Additions
- [bluesky] add `info` extractor
#### Fixes
- [bluesky] fix exception when encountering non-quote embeds ([#6577](https://github.com/mikf/gallery-dl/issues/6577))
- [bluesky] unescape search queries ([#6579](https://github.com/mikf/gallery-dl/issues/6579))
- [common] restore using environment proxy settings by default ([#6553](https://github.com/mikf/gallery-dl/issues/6553), [#6609](https://github.com/mikf/gallery-dl/issues/6609))
- [common] improve handling of `user-agent` settings ([#6594](https://github.com/mikf/gallery-dl/issues/6594))
- [e621] fix `TypeError` when `metadata` is enabled ([#6587](https://github.com/mikf/gallery-dl/issues/6587))
- [gofile] fix website token extraction ([#6596](https://github.com/mikf/gallery-dl/issues/6596))
- [inkbunny] fix re-login loop ([#6618](https://github.com/mikf/gallery-dl/issues/6618))
- [instagram] handle empty `carousel_media` entries ([#6595](https://github.com/mikf/gallery-dl/issues/6595))
- [kemonoparty] fix `o` query parameter handling ([#6597](https://github.com/mikf/gallery-dl/issues/6597))
- [nhentai] fix download URLs ([#6620](https://github.com/mikf/gallery-dl/issues/6620))
- [readcomiconline] fix `chapter` extraction ([#6070](https://github.com/mikf/gallery-dl/issues/6070), [#6335](https://github.com/mikf/gallery-dl/issues/6335))
- [realbooru] fix extraction ([#6543](https://github.com/mikf/gallery-dl/issues/6543))
- [rule34] fix `favorite` extraction ([#6573](https://github.com/mikf/gallery-dl/issues/6573))
- [zerochan] download `.webp` and `.gif` files ([#6576](https://github.com/mikf/gallery-dl/issues/6576))
#### Improvements
- [hentaicosplays] update domains ([#6578](https://github.com/mikf/gallery-dl/issues/6578))
- [pixiv:ranking] implement filtering results by `content` ([#6574](https://github.com/mikf/gallery-dl/issues/6574))
- [pixiv] include user ID in failed AJAX request warnings ([#6581](https://github.com/mikf/gallery-dl/issues/6581))
#### Options
- [patreon] add `format-images` option ([#6569](https://github.com/mikf/gallery-dl/issues/6569))
- [zerochan] add `extensions` option ([#6576](https://github.com/mikf/gallery-dl/issues/6576))

## 1.28.0 - 2024-11-30
### Changes
- [common] disable using environment network settings by default (`HTTP_PROXY`, `.netrc`, …)
  - disable `trust_env` session attribute
  - disable `Authorization` header injection from `.netrc` auth ([#5780](https://github.com/mikf/gallery-dl/issues/5780), [#6134](https://github.com/mikf/gallery-dl/issues/6134), [#6455](https://github.com/mikf/gallery-dl/issues/6455))
  - add `proxy-env` option
- [ytdl] change `forward-cookies` default value to `true` ([#6401](https://github.com/mikf/gallery-dl/issues/6401), [#6348](https://github.com/mikf/gallery-dl/issues/6348))
### Extractors
#### Additions
- [bilibili] add support for `opus` articles ([#2824](https://github.com/mikf/gallery-dl/issues/2824), [#6443](https://github.com/mikf/gallery-dl/issues/6443))
- [bluesky] add `hashtag` extractor ([#4438](https://github.com/mikf/gallery-dl/issues/4438))
- [danbooru] add `artist` and `artist-search` extractors ([#5348](https://github.com/mikf/gallery-dl/issues/5348))
- [everia] add support ([#1067](https://github.com/mikf/gallery-dl/issues/1067), [#2472](https://github.com/mikf/gallery-dl/issues/2472), [#4091](https://github.com/mikf/gallery-dl/issues/4091), [#6227](https://github.com/mikf/gallery-dl/issues/6227))
- [facebook] add support ([#470](https://github.com/mikf/gallery-dl/issues/470), [#2612](https://github.com/mikf/gallery-dl/issues/2612), [#5626](https://github.com/mikf/gallery-dl/issues/5626), [#6548](https://github.com/mikf/gallery-dl/issues/6548))
- [hentaifoundry] add `tag` extractor ([#6465](https://github.com/mikf/gallery-dl/issues/6465))
- [hitomi] add `index` and `search` extractors ([#2502](https://github.com/mikf/gallery-dl/issues/2502), [#6392](https://github.com/mikf/gallery-dl/issues/6392), [#3720](https://github.com/mikf/gallery-dl/issues/3720))
- [motherless] add support ([#2074](https://github.com/mikf/gallery-dl/issues/2074), [#4413](https://github.com/mikf/gallery-dl/issues/4413), [#6221](https://github.com/mikf/gallery-dl/issues/6221))
- [noop] add `noop` extractor
- [rule34vault] add support ([#5708](https://github.com/mikf/gallery-dl/issues/5708), [#6240](https://github.com/mikf/gallery-dl/issues/6240))
- [rule34xyz] add support ([#1078](https://github.com/mikf/gallery-dl/issues/1078), [#4960](https://github.com/mikf/gallery-dl/issues/4960))
- [saint] add support ([#4405](https://github.com/mikf/gallery-dl/issues/4405), [#6324](https://github.com/mikf/gallery-dl/issues/6324))
- [tumblr] add `search` extractor ([#6394](https://github.com/mikf/gallery-dl/issues/6394))
#### Fixes
- [8chan] avoid performing network requests within `_init()` ([#6387](https://github.com/mikf/gallery-dl/issues/6387))
- [bluesky] fix downloads from non-bsky PDSs ([#6406](https://github.com/mikf/gallery-dl/issues/6406))
- [bunkr] fix album names containing `<>&` characters
- [flickr] use `download` URLs ([#6360](https://github.com/mikf/gallery-dl/issues/6360), [#6464](https://github.com/mikf/gallery-dl/issues/6464))
- [hiperdex] update domain to `hipertoon.com` ([#6420](https://github.com/mikf/gallery-dl/issues/6420))
- [imagechest] fix extractors ([#6475](https://github.com/mikf/gallery-dl/issues/6475), [#6491](https://github.com/mikf/gallery-dl/issues/6491))
- [instagram] fix using numeric cursor values ([#6414](https://github.com/mikf/gallery-dl/issues/6414))
- [kemonoparty] update to new site layout ([#6415](https://github.com/mikf/gallery-dl/issues/6415), [#6503](https://github.com/mikf/gallery-dl/issues/6503), [#6528](https://github.com/mikf/gallery-dl/issues/6528), [#6530](https://github.com/mikf/gallery-dl/issues/6530), [#6536](https://github.com/mikf/gallery-dl/issues/6536), [#6542](https://github.com/mikf/gallery-dl/issues/6542), [#6554](https://github.com/mikf/gallery-dl/issues/6554))
- [koharu] update domain to `niyaniya.moe` ([#6430](https://github.com/mikf/gallery-dl/issues/6430), [#6432](https://github.com/mikf/gallery-dl/issues/6432))
- [mangadex] apply `lang` option only to chapter results ([#6372](https://github.com/mikf/gallery-dl/issues/6372))
- [newgrounds] fix metadata extraction ([#6463](https://github.com/mikf/gallery-dl/issues/6463), [#6533](https://github.com/mikf/gallery-dl/issues/6533))
- [nhentai] support `.webp` files ([#6442](https://github.com/mikf/gallery-dl/issues/6442), [#6479](https://github.com/mikf/gallery-dl/issues/6479))
- [patreon] use legacy mobile UA when no `session_id` is set
- [pinterest] update API headers ([#6513](https://github.com/mikf/gallery-dl/issues/6513))
- [pinterest] detect video/audio by block content ([#6421](https://github.com/mikf/gallery-dl/issues/6421))
- [scrolller] prevent exception for posts without `mediaSources` ([#5051](https://github.com/mikf/gallery-dl/issues/5051))
- [tumblrgallery] fix file downloads ([#6391](https://github.com/mikf/gallery-dl/issues/6391))
- [twitter] make `source` metadata extraction non-fatal ([#6472](https://github.com/mikf/gallery-dl/issues/6472))
- [weibo] fix livephoto `filename` & `extension` ([#6471](https://github.com/mikf/gallery-dl/issues/6471))
#### Improvements
- [bluesky] support `main.bsky.dev` URLs ([#4438](https://github.com/mikf/gallery-dl/issues/4438))
- [bluesky] match common embed fixes ([#6410](https://github.com/mikf/gallery-dl/issues/6410), [#6411](https://github.com/mikf/gallery-dl/issues/6411))
- [boosty] update default video format list ([#2387](https://github.com/mikf/gallery-dl/issues/2387))
- [bunkr] support `bunkr.cr` URLs
- [common] allow passing cookies to OAuth extractors
- [common] allow overriding more default `User-Agent` headers ([#6496](https://github.com/mikf/gallery-dl/issues/6496))
- [philomena] switch default `ponybooru` filter ([#6437](https://github.com/mikf/gallery-dl/issues/6437))
- [pinterest] support `story_pin_music` blocks ([#6421](https://github.com/mikf/gallery-dl/issues/6421))
- [pixiv] get ugoira frame extension from `meta_single_page` values ([#6056](https://github.com/mikf/gallery-dl/issues/6056))
- [reddit] support user profile share links ([#6389](https://github.com/mikf/gallery-dl/issues/6389))
- [steamgriddb] disable `adjust-extensions` for `fake-png` files ([#5274](https://github.com/mikf/gallery-dl/issues/5274))
- [twitter] remove cookies migration workaround
#### Metadata
- [bluesky] provide `author[instance]` metadata ([#4438](https://github.com/mikf/gallery-dl/issues/4438))
- [instagram] fix `extension` of apparent `.webp` files ([#6541](https://github.com/mikf/gallery-dl/issues/6541))
- [pillowfort] provide `count` metadata ([#6478](https://github.com/mikf/gallery-dl/issues/6478))
- [pixiv:ranking] add `rank` metadata field ([#6531](https://github.com/mikf/gallery-dl/issues/6531))
- [poipiku] return `count` as proper number ([#6445](https://github.com/mikf/gallery-dl/issues/6445))
- [webtoons] extract `episode_no` for comic results ([#6439](https://github.com/mikf/gallery-dl/issues/6439))
#### Options
- [civitai] add `metadata` option - support fetching `generation` data ([#6383](https://github.com/mikf/gallery-dl/issues/6383))
- [exhentai] implement `tags` option ([#2117](https://github.com/mikf/gallery-dl/issues/2117))
- [koharu] implement `tags` option
- [rule34xyz] add `format` option ([#1078](https://github.com/mikf/gallery-dl/issues/1078))
### Downloaders
- [ytdl] fix `AttributeError` caused by `decodeOption()` removal ([#6552](https://github.com/mikf/gallery-dl/issues/6552))
### Post Processors
- [classify] rewrite - fix skipping existing files ([#5213](https://github.com/mikf/gallery-dl/issues/5213))
- enable inheriting options from global `postprocessor` objects
- allow `postprocessors` values to be a single post processor object
### Cookies
- support Chromium table version 24 ([#6162](https://github.com/mikf/gallery-dl/issues/6162))
- fix GCM pad length calculation ([#6162](https://github.com/mikf/gallery-dl/issues/6162))
- try decryption with empty password as fallback
### Documentation
- update recommended `pip` command for installing `dev` version ([#6493](https://github.com/mikf/gallery-dl/issues/6493))
- update `gallery-dl.conf` ([#6501](https://github.com/mikf/gallery-dl/issues/6501))
### Options
- add `-4/--force-ipv4` and `-6/--force-ipv6` command-line options
- fix passing negative numbers as arguments ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
### Miscellaneous
- [output] use default ANSI colors only when stream is a TTY
- [util] implement `defaultdict` filters-environment
- [util] enable using multiple statements for all `filter` options ([#5262](https://github.com/mikf/gallery-dl/issues/5262))

## 1.27.7 - 2024-10-25
### Extractors
#### Additions
- [civitai] add extractors for global `models` and `images` ([#6310](https://github.com/mikf/gallery-dl/issues/6310))
- [mangadex] add `author` extractor ([#6372](https://github.com/mikf/gallery-dl/issues/6372))
- [scrolller] add support ([#295](https://github.com/mikf/gallery-dl/issues/295), [#3418](https://github.com/mikf/gallery-dl/issues/3418), [#5051](https://github.com/mikf/gallery-dl/issues/5051))
#### Fixes
- [8chan] automatically detect `TOS` cookie name ([#6318](https://github.com/mikf/gallery-dl/issues/6318))
- [bunkr] update to new site layout ([#6344](https://github.com/mikf/gallery-dl/issues/6344), [#6352](https://github.com/mikf/gallery-dl/issues/6352), [#6368](https://github.com/mikf/gallery-dl/issues/6368))
- [bunkr] send proper `Referer` headers for file downloads ([#6319](https://github.com/mikf/gallery-dl/issues/6319))
- [civitai] add `uuid` metadata field & use it as default archive format ([#6326](https://github.com/mikf/gallery-dl/issues/6326))
- [civitai] fix "My Reactions" results ([#6263](https://github.com/mikf/gallery-dl/issues/6263))
- [civitai] fix `model` file download URLs for tRPC API
- [lensdump] fix extraction ([#6313](https://github.com/mikf/gallery-dl/issues/6313))
- [pixiv] make retrieving ugoira metadata non-fatal ([#6297](https://github.com/mikf/gallery-dl/issues/6297))
- [pixiv] fix exception when processing deleted `sanity_level` works ([#6339](https://github.com/mikf/gallery-dl/issues/6339))
- [urlgalleries] fix extraction
- [wikimedia] fix non-English Fandom/wiki.gg articles ([#6370](https://github.com/mikf/gallery-dl/issues/6370))
#### Improvements
- [8chan] support `/last/` thread URLs ([#6318](https://github.com/mikf/gallery-dl/issues/6318))
- [bunkr] support `bunkr.ph` and `bunkr.ps` URLs
- [newgrounds] support page numbers in URLs ([#6320](https://github.com/mikf/gallery-dl/issues/6320))
- [patreon] support `/c/` prefix in creator URLs ([#6348](https://github.com/mikf/gallery-dl/issues/6348))
- [pinterest] support `story` pins ([#6188](https://github.com/mikf/gallery-dl/issues/6188), [#6078](https://github.com/mikf/gallery-dl/issues/6078), [#4229](https://github.com/mikf/gallery-dl/issues/4229))
- [pixiv] implement `sanity_level` workaround for user artworks results ([#4327](https://github.com/mikf/gallery-dl/issues/4327), [#5435](https://github.com/mikf/gallery-dl/issues/5435), [#6339](https://github.com/mikf/gallery-dl/issues/6339))
#### Options
- [bluesky] add `quoted` option ([#6323](https://github.com/mikf/gallery-dl/issues/6323))
- [pixiv] add `captions` option ([#4327](https://github.com/mikf/gallery-dl/issues/4327))
- [reddit] add `embeds` option ([#6357](https://github.com/mikf/gallery-dl/issues/6357))
- [vk] add `offset` option ([#6328](https://github.com/mikf/gallery-dl/issues/6328))
### Downloaders
- [ytdl] implement explicit HLS/DASH handling
### Post Processors
- add `error` event
### Miscellaneous
- [cookies] convert Chromium `expires_utc` values to Unix timestamps
- [util] add `std` object to global eval namespace ([#6330](https://github.com/mikf/gallery-dl/issues/6330))
- add `--print` and `--print-to-file` command-line options ([#6343](https://github.com/mikf/gallery-dl/issues/6343))
- use child extractor fallbacks only when a non-user error occurs ([#6329](https://github.com/mikf/gallery-dl/issues/6329))

## 1.27.6 - 2024-10-11
### Extractors
#### Additions
- [ao3] add `subscriptions` extractor ([#6247](https://github.com/mikf/gallery-dl/issues/6247))
- [boosty] add support ([#2387](https://github.com/mikf/gallery-dl/issues/2387))
- [civitai] add `post` extractors ([#6279](https://github.com/mikf/gallery-dl/issues/6279))
- [pixiv] support unlisted artworks ([#5162](https://github.com/mikf/gallery-dl/issues/5162))
#### Fixes
- [cohost] sanitize default filenames ([#6262](https://github.com/mikf/gallery-dl/issues/6262))
  - limit `headline` length
  - remove `plainTextBody`
- [deviantart] fix & improve journal/literature extraction ([#6254](https://github.com/mikf/gallery-dl/issues/6254), [#6207](https://github.com/mikf/gallery-dl/issues/6207), [#6196](https://github.com/mikf/gallery-dl/issues/6196))
  - extract journal HTML from webpage if possible
  - support converting `tiptap` markup to HTML
- [deviantart] fix `stash` folder extraction
- [flickr] update default API credentials ([#6300](https://github.com/mikf/gallery-dl/issues/6300))
- [flickr] fix `ZeroDivisionError` ([#6252](https://github.com/mikf/gallery-dl/issues/6252))
- [imagefap] fix `{num}` in single image default filenames
- [myhentaigallery] fix `tags` extraction
- [patreon] extract `attachments_media` files ([#6241](https://github.com/mikf/gallery-dl/issues/6241), [#6268](https://github.com/mikf/gallery-dl/issues/6268))
- [pixiv] implement workaround for `limit_sanity_level` works ([#4327](https://github.com/mikf/gallery-dl/issues/4327), [#4747](https://github.com/mikf/gallery-dl/issues/4747), [#5054](https://github.com/mikf/gallery-dl/issues/5054), [#5435](https://github.com/mikf/gallery-dl/issues/5435), [#5651](https://github.com/mikf/gallery-dl/issues/5651), [#5655](https://github.com/mikf/gallery-dl/issues/5655))
- [pornhub] fix `KeyError` when album images are missing ([#6299](https://github.com/mikf/gallery-dl/issues/6299))
- [rule34us] fix extraction ([#6289](https://github.com/mikf/gallery-dl/issues/6289))
- [8chan] set TOS cookie for current and previous day
#### Improvements
- [bunkr] support `bunkr.pk` URLs ([#6272](https://github.com/mikf/gallery-dl/issues/6272))
- [civitai] use tRPC API by default ([#6279](https://github.com/mikf/gallery-dl/issues/6279))
- [civitai] improve default archive format ([#6302](https://github.com/mikf/gallery-dl/issues/6302))
- [komikcast] update domain to `komikcast.cz`
- [newgrounds] detect more comment embeds ([#6253](https://github.com/mikf/gallery-dl/issues/6253))
- [newgrounds] add more fallback URL formats for `art-images` files
- [oauth] prevent empty browser names
- [patreon] use mobile UA ([#6241](https://github.com/mikf/gallery-dl/issues/6241), [#6239](https://github.com/mikf/gallery-dl/issues/6239), [#6140](https://github.com/mikf/gallery-dl/issues/6140))
- [patreon] handle suspended accounts
- [pixiv] detect works requiring `My pixiv` access
#### Metadata
- [civitai] ensure image files have an `id` ([#6251](https://github.com/mikf/gallery-dl/issues/6251))
- [gelbooru_v02] unescape HTML entities in categorized tags
- [generic] ensure `path` metadata is always defined
- [pixiv] retrieve `caption` from AJAX API when empty ([#4327](https://github.com/mikf/gallery-dl/issues/4327), [#5191](https://github.com/mikf/gallery-dl/issues/5191))
#### Options
- [fanbox] add `comments` option, extend `metadata` option ([#6287](https://github.com/mikf/gallery-dl/issues/6287))
- [pixiv] add `comments` option ([#6287](https://github.com/mikf/gallery-dl/issues/6287))
#### Removals
- [blogger] remove `micmicidol.club`
- [chevereto] remove `deltaporno.com`
- [lolisafe] remove `xbunkr.com`
- [pururin] remove module
- [shimmie2] remove `loudbooru.com`
### Post Processors
- [ugoira] fix `BadZipFile` exceptions ([#6285](https://github.com/mikf/gallery-dl/issues/6285))
- [ugoira] catch all exceptions when extracting ZIP archives ([#6285](https://github.com/mikf/gallery-dl/issues/6285))
- [ugoira] forward frame data as `_ugoira_frame_data` ([#6154](https://github.com/mikf/gallery-dl/issues/6154), [#6285](https://github.com/mikf/gallery-dl/issues/6285))
### Miscellaneous
- [build] remove setuptools and requests version restrictions
- [docker] build from `python:3.12-alpine`
- [text] improve `parse_query()` performance

## 1.27.5 - 2024-09-28
### Extractors
#### Additions
- [ao3] add support ([#6013](https://github.com/mikf/gallery-dl/issues/6013))
- [civitai] add support ([#3706](https://github.com/mikf/gallery-dl/issues/3706), [#3787](https://github.com/mikf/gallery-dl/issues/3787), [#4129](https://github.com/mikf/gallery-dl/issues/4129), [#5995](https://github.com/mikf/gallery-dl/issues/5995), [#6220](https://github.com/mikf/gallery-dl/issues/6220))
- [cohost] add support ([#4483](https://github.com/mikf/gallery-dl/issues/4483), [#6191](https://github.com/mikf/gallery-dl/issues/6191))
#### Fixes
- [8chan] update `TOS` cookie name
- [deviantart] work around OAuth API returning empty journal texts ([#6196](https://github.com/mikf/gallery-dl/issues/6196), [#6207](https://github.com/mikf/gallery-dl/issues/6207), [#5916](https://github.com/mikf/gallery-dl/issues/5916))
- [weasyl:favorite] fix pagination ([#6113](https://github.com/mikf/gallery-dl/issues/6113))
#### Improvements
- [bluesky] support video downloads ([#6183](https://github.com/mikf/gallery-dl/issues/6183))
- [deviantart] add `previews` option ([#3782](https://github.com/mikf/gallery-dl/issues/3782), [#6124](https://github.com/mikf/gallery-dl/issues/6124))
- [deviantart] warn about empty journal texts ([#5916](https://github.com/mikf/gallery-dl/issues/5916))
- [inkbunny:favorite] update default directory ([#6115](https://github.com/mikf/gallery-dl/issues/6115))
- [jpgfish] update domain to `jpg5.su` ([#6231](https://github.com/mikf/gallery-dl/issues/6231))
- [skeb] prevent 429 errors and need for `request_key` cookie
- [weasyl:favorite] support readable URL format ([#6113](https://github.com/mikf/gallery-dl/issues/6113))
- [wikimedia] automatically detect API endpoint when none is defined
- [zzup] support `up.zzup.com` galleries ([#6181](https://github.com/mikf/gallery-dl/issues/6181))
### Post Processors
- [ugoira] implement storing "original" frames in ZIP archives ([#6147](https://github.com/mikf/gallery-dl/issues/6147))
- [ugoira] fix `KeyError: '_ugoira_frame_index'` ([#6154](https://github.com/mikf/gallery-dl/issues/6154))
### Formatter
- add `L` conversion - returns the length of a value
- allow accessing `util.NONE` via global `_nul`
### Miscellaneous
- [cookies] add `cookies-select` option
- [cookies:firefox] support using domain & container filters together
- [docker] prevent errors in Dockerfile build
- [tests] make `#category` result entries optional
- allow filtering `--list-extractors` results
- implement alternatives for deprecated `utc` datetime functions

## 1.27.4 - 2024-09-06
### Extractors
#### Additions
- [sexcom] add `likes` extractor ([#6149](https://github.com/mikf/gallery-dl/issues/6149))
- [wikimedia] add `wiki` extractor ([#6050](https://github.com/mikf/gallery-dl/issues/6050))
#### Fixes
- [bunkr] fix file downloads ([#6037](https://github.com/mikf/gallery-dl/issues/6037))
- [cyberdrop] fix extraction
- [deviantart] fix `"pagination": "manual"` for cursor-based endpoints ([#6079](https://github.com/mikf/gallery-dl/issues/6079))
- [deviantart] fix `"original": "images"` ([#6124](https://github.com/mikf/gallery-dl/issues/6124))
- [exhentai] fix `limits` option ([#6090](https://github.com/mikf/gallery-dl/issues/6090))
- [flickr] make `exif` and `context` metadata extraction non-fatal ([#6002](https://github.com/mikf/gallery-dl/issues/6002), [#6077](https://github.com/mikf/gallery-dl/issues/6077))
- [flickr] make `album` metadata extraction non-fatal ([#3441](https://github.com/mikf/gallery-dl/issues/3441))
- [furaffinity] fix `favorite` pagination ([#6151](https://github.com/mikf/gallery-dl/issues/6151))
- [gofile] fix `KeyError: 'childrenIds'` ([#5993](https://github.com/mikf/gallery-dl/issues/5993))
- [newgrounds] fix warning for age-restricted posts ([#6005](https://github.com/mikf/gallery-dl/issues/6005))
- [toyhouse] fix extraction of image URLs
- [tumblr] fix `401 Unauthorized` for likes when using api-key ([#5994](https://github.com/mikf/gallery-dl/issues/5994))
- [twitter] fix pinned Tweet extraction ([#6102](https://github.com/mikf/gallery-dl/issues/6102))
- [ytdl] fix processing playlists of playlists ([#6127](https://github.com/mikf/gallery-dl/issues/6127))
#### Improvements
- [bcbnsfw] use `*` as query when retrieving all posts ([#6135](https://github.com/mikf/gallery-dl/issues/6135))
- [bunkr] support `bunkr:` URL prefix ([#6017](https://github.com/mikf/gallery-dl/issues/6017))
- [e621] cache pool metadata API calls ([#6001](https://github.com/mikf/gallery-dl/issues/6001))
- [generic] better directory names ([#6104](https://github.com/mikf/gallery-dl/issues/6104))
- [koharu] improve format selection ([#6088](https://github.com/mikf/gallery-dl/issues/6088))
- [pixiv] implement downloading "original" ugoira frames ([#6056](https://github.com/mikf/gallery-dl/issues/6056))
- [pixiv] use mobile API for `series` ([#5983](https://github.com/mikf/gallery-dl/issues/5983))
#### Metadata
- [batoto] improve chapter info regex ([#5988](https://github.com/mikf/gallery-dl/issues/5988), [#5997](https://github.com/mikf/gallery-dl/issues/5997))
- [batoto] extract `chapter_url` metadata ([#5562](https://github.com/mikf/gallery-dl/issues/5562))
- [batoto] improve `title` extraction ([#5988](https://github.com/mikf/gallery-dl/issues/5988))
- [hitomi] extract `extension_original` metadata ([#6049](https://github.com/mikf/gallery-dl/issues/6049))
- [instagram] add `post_date` metadata field ([#6081](https://github.com/mikf/gallery-dl/issues/6081), [#6091](https://github.com/mikf/gallery-dl/issues/6091))
- [sankaku] restore old `tags` format ([#6043](https://github.com/mikf/gallery-dl/issues/6043))
- [twitter] extract `type` metadata ([#6111](https://github.com/mikf/gallery-dl/issues/6111))
#### Options
- [bunkr] add `tlds` option to match URLs with all possible TLDs ([#5875](https://github.com/mikf/gallery-dl/issues/5875), [#6017](https://github.com/mikf/gallery-dl/issues/6017))
- [instagram] add `max-posts` option ([#6054](https://github.com/mikf/gallery-dl/issues/6054))
- [instagram] add `info` as a possible `include` value
- [instagram] allow disabling `cursor` output
- [twitter] add `info` as a possible `include` value ([#6114](https://github.com/mikf/gallery-dl/issues/6114))
- [twitter] allow disabling `cursor` output ([#5990](https://github.com/mikf/gallery-dl/issues/5990))
### Post Processors
- [hash] add `hash` post processor to compute file hash metadata ([#6099](https://github.com/mikf/gallery-dl/issues/6099))
- [metadata] add `include` and `exclude` options ([#6058](https://github.com/mikf/gallery-dl/issues/6058))
- [metadata] fix using `..` in directories on Windows ([#5942](https://github.com/mikf/gallery-dl/issues/5942), [#6094](https://github.com/mikf/gallery-dl/issues/6094))
- [rename] add `rename` post processor to rename previously downloaded files ([#5846](https://github.com/mikf/gallery-dl/issues/5846), [#6044](https://github.com/mikf/gallery-dl/issues/6044))
- [ugoira] support converting "original" frames ([#6056](https://github.com/mikf/gallery-dl/issues/6056))
- [ugoira] add `skip` option ([#6056](https://github.com/mikf/gallery-dl/issues/6056))
### Miscellaneous
- [cookies:firefox] extract only cookies without container by default ([#5957](https://github.com/mikf/gallery-dl/issues/5957))
- [formatter] implement `A` format specifier ([#6036](https://github.com/mikf/gallery-dl/issues/6036))
- [tests] fix bug when running tests in a certain order
- [util] extend `CustomNone` with arithmetic operators ([#6007](https://github.com/mikf/gallery-dl/issues/6007), [#6009](https://github.com/mikf/gallery-dl/issues/6009))
- add `--rename` and `--rename-to` command-line options ([#5846](https://github.com/mikf/gallery-dl/issues/5846), [#6044](https://github.com/mikf/gallery-dl/issues/6044))
- add `input-files` config option ([#6059](https://github.com/mikf/gallery-dl/issues/6059))

## 1.27.3 - 2024-08-10
### Extractors
#### Additions
- [bunkr] support `bunkr.ci` and `bunkrrr.org` ([#5970](https://github.com/mikf/gallery-dl/issues/5970))
- [furaffinity] add `submissions` extractor ([#5954](https://github.com/mikf/gallery-dl/issues/5954))
- [hentaicosplays] support `hentai-cosplay-xxx.com` ([#5959](https://github.com/mikf/gallery-dl/issues/5959))
#### Fixes
- [behance] fix `KeyError: 'fields'` ([#5965](https://github.com/mikf/gallery-dl/issues/5965))
- [behance] fix video extraction ([#5965](https://github.com/mikf/gallery-dl/issues/5965))
- [cien] extract all files when authenticated ([#5934](https://github.com/mikf/gallery-dl/issues/5934))
- [deviantart] fix `KeyError - 'category'` ([#5960](https://github.com/mikf/gallery-dl/issues/5960), [#5961](https://github.com/mikf/gallery-dl/issues/5961), [#5969](https://github.com/mikf/gallery-dl/issues/5969), [#5971](https://github.com/mikf/gallery-dl/issues/5971), [#5976](https://github.com/mikf/gallery-dl/issues/5976), [#5978](https://github.com/mikf/gallery-dl/issues/5978))
- [fanbox] update pagination logic ([#5949](https://github.com/mikf/gallery-dl/issues/5949), [#5951](https://github.com/mikf/gallery-dl/issues/5951), [#5956](https://github.com/mikf/gallery-dl/issues/5956))
- [hotleak] fix AttributeError ([#5950](https://github.com/mikf/gallery-dl/issues/5950))
- [instagram] restore GraphQL API functionality ([#5920](https://github.com/mikf/gallery-dl/issues/5920))
- [twitter] update `x-csrf-token` header during login ([#5945](https://github.com/mikf/gallery-dl/issues/5945))
#### Improvements
- [bunkr] fail downloads for `maintenance` files ([#5952](https://github.com/mikf/gallery-dl/issues/5952))
- [zerochan] improve tag redirect handling, add `redirects` option ([#5891](https://github.com/mikf/gallery-dl/issues/5891))
### Post Processors
- [metadata] add `base-directory` option ([#5262](https://github.com/mikf/gallery-dl/issues/5262), [#5728](https://github.com/mikf/gallery-dl/issues/5728))

## 1.27.2 - 2024-08-03
### Extractors
#### Additions
- [agnph] add `tag` and `post` extractors ([#5284](https://github.com/mikf/gallery-dl/issues/5284), [#5890](https://github.com/mikf/gallery-dl/issues/5890))
- [aryion] add `favorite` extractor ([#4511](https://github.com/mikf/gallery-dl/issues/4511), [#5870](https://github.com/mikf/gallery-dl/issues/5870))
- [cien] add support ([#2885](https://github.com/mikf/gallery-dl/issues/2885), [#4103](https://github.com/mikf/gallery-dl/issues/4103), [#5240](https://github.com/mikf/gallery-dl/issues/5240))
- [instagram] add `info` extractor ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
- [koharu] add `gallery`, `search`, and `favorite` extractors ([#5893](https://github.com/mikf/gallery-dl/issues/5893), [#4707](https://github.com/mikf/gallery-dl/issues/4707))
- [twitter] add `info` extractor ([#3623](https://github.com/mikf/gallery-dl/issues/3623))
#### Fixes
- [8chan] update `TOS` cookie name ([#5868](https://github.com/mikf/gallery-dl/issues/5868))
- [behance] fix image extraction ([#5873](https://github.com/mikf/gallery-dl/issues/5873), [#5926](https://github.com/mikf/gallery-dl/issues/5926))
- [booru] prevent crash when file URL is empty ([#5859](https://github.com/mikf/gallery-dl/issues/5859))
- [deviantart] try to work around journal/status API changes ([#5916](https://github.com/mikf/gallery-dl/issues/5916))
- [hentainexus] fix error with spread pages ([#5827](https://github.com/mikf/gallery-dl/issues/5827))
- [hotleak] fix faulty image URLs ([#5915](https://github.com/mikf/gallery-dl/issues/5915))
- [inkbunny:following] fix potentially infinite loop
- [nijie] fix image URLs of single image posts ([#5842](https://github.com/mikf/gallery-dl/issues/5842))
- [readcomiconline] fix extraction ([#5866](https://github.com/mikf/gallery-dl/issues/5866))
- [toyhouse] fix Content Warning bypass ([#5820](https://github.com/mikf/gallery-dl/issues/5820))
- [tumblr] revert to `offset` pagination, implement `pagination` option ([#5880](https://github.com/mikf/gallery-dl/issues/5880))
- [twitter] fix `username-alt` option name ([#5715](https://github.com/mikf/gallery-dl/issues/5715))
- [warosu] fix extraction
- [zerochan] handle `KeyError - 'items'` ([#5826](https://github.com/mikf/gallery-dl/issues/5826))
- [zerochan] fix error on tag redirections ([#5891](https://github.com/mikf/gallery-dl/issues/5891))
- [zerochan] fix `Invalid control character` errors ([#5892](https://github.com/mikf/gallery-dl/issues/5892))
#### Improvements
- [bunkr] support `bunkr.fi` domain ([#5872](https://github.com/mikf/gallery-dl/issues/5872))
- [deviantart:following] use OAuth API endpoint ([#2511](https://github.com/mikf/gallery-dl/issues/2511))
- [directlink] extend recognized file extensions ([#5924](https://github.com/mikf/gallery-dl/issues/5924))
- [exhentai] improve error message when temporarily banned ([#5845](https://github.com/mikf/gallery-dl/issues/5845))
- [gelbooru_v02] use total number of posts as pagination end marker ([#5830](https://github.com/mikf/gallery-dl/issues/5830))
- [imagefap] add enumeration index to default filenames ([#1746](https://github.com/mikf/gallery-dl/issues/1746), [#5887](https://github.com/mikf/gallery-dl/issues/5887))
- [paheal] implement fast `--range` support ([#5905](https://github.com/mikf/gallery-dl/issues/5905))
- [redgifs] support URLs with numeric IDs ([#5898](https://github.com/mikf/gallery-dl/issues/5898), [#5899](https://github.com/mikf/gallery-dl/issues/5899))
- [sankaku] match URLs with `www` subdomain ([#5907](https://github.com/mikf/gallery-dl/issues/5907))
- [sankakucomplex] update domain to `news.sankakucomplex.com`
- [twitter] implement `cursor` support ([#5753](https://github.com/mikf/gallery-dl/issues/5753))
- [vipergirls] improve `thread` URL pattern
- [wallpapercave] support `album` listings ([#5925](https://github.com/mikf/gallery-dl/issues/5925))
#### Metadata
- [dynastyscans] extract chapter `tags` ([#5904](https://github.com/mikf/gallery-dl/issues/5904))
- [erome] extract `date` metadata ([#5796](https://github.com/mikf/gallery-dl/issues/5796))
- [furaffinity] extract `folders` and `thumbnail` metadata ([#1284](https://github.com/mikf/gallery-dl/issues/1284), [#5824](https://github.com/mikf/gallery-dl/issues/5824))
- [sankaku] implement `notes` extraction ([#5865](https://github.com/mikf/gallery-dl/issues/5865))
- [subscribestar] fix `date` parsing in updated posts ([#5783](https://github.com/mikf/gallery-dl/issues/5783))
- [twitter] extract `bookmark_count` and `view_count` metadata ([#5802](https://github.com/mikf/gallery-dl/issues/5802))
- [zerochan] fix `source` metadata
- [zerochan] fix tag category extraction ([#5874](https://github.com/mikf/gallery-dl/issues/5874))
- [zerochan] delay fetching extended metadata ([#5869](https://github.com/mikf/gallery-dl/issues/5869))
#### Options
- [agnph] implement `tags` option ([#5284](https://github.com/mikf/gallery-dl/issues/5284))
- [booru] allow multiple `url` keys ([#5859](https://github.com/mikf/gallery-dl/issues/5859))
- [cien] add `files` option ([#2885](https://github.com/mikf/gallery-dl/issues/2885))
- [koharu] add `cbz` and `format` options ([#5893](https://github.com/mikf/gallery-dl/issues/5893))
- [vsco] add `include` option ([#5911](https://github.com/mikf/gallery-dl/issues/5911))
- [zerochan] implement `tags` option ([#5874](https://github.com/mikf/gallery-dl/issues/5874))
#### Removals
- [fallenangels] remove module
### Post Processors
- [metadata] allow using format strings for `directory` ([#5728](https://github.com/mikf/gallery-dl/issues/5728))
### Options
- add `--print-traffic` command-line option
- add `-J/--resolve-json` command-line option ([#5864](https://github.com/mikf/gallery-dl/issues/5864))
- add `filters-environment` option
- implement `archive-event` option ([#5784](https://github.com/mikf/gallery-dl/issues/5784))
### Actions
- [actions] support multiple actions per pattern
- [actions] add `exec` action ([#5619](https://github.com/mikf/gallery-dl/issues/5619))
- [actions] add `abort` and `terminate` actions ([#5778](https://github.com/mikf/gallery-dl/issues/5778))
- [actions] allow setting a duration for `wait`
- [actions] emit logging messages before waiting/exiting/etc
### Tests
- [tests] enable test results for external extractors ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
- [tests] load results from `${GDL_TEST_RESULTS}` ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
### Miscellaneous
- [cookies] add `thorium` support ([#5781](https://github.com/mikf/gallery-dl/issues/5781))
- [job] add `resolve` argument to DataJob ([#5864](https://github.com/mikf/gallery-dl/issues/5864))
- [path] fix moving temporary files across drives on Windows ([#5807](https://github.com/mikf/gallery-dl/issues/5807))
- [ytdl] fix `--cookies-from-browser` option parsing ([#5885](https://github.com/mikf/gallery-dl/issues/5885))
- make exceptions in filters/conditionals non-fatal
- update default User-Agent header to Firefox 128 ESR
- include `zstd` in Accept-Encoding header when supported

## 1.27.1 - 2024-06-22
### Extractors
#### Additions
- [hentainexus] restore module ([#5275](https://github.com/mikf/gallery-dl/issues/5275), [#5712](https://github.com/mikf/gallery-dl/issues/5712))
- [shimmie2] support `vidya.pics` ([#5632](https://github.com/mikf/gallery-dl/issues/5632))
- [tcbscans] support other domains ([#5774](https://github.com/mikf/gallery-dl/issues/5774))
#### Fixes
- [deviantart] fix watching module ID extraction ([#5696](https://github.com/mikf/gallery-dl/issues/5696), [#5772](https://github.com/mikf/gallery-dl/issues/5772))
- [fanbox] handle KeyError for no longer existing plans ([#5759](https://github.com/mikf/gallery-dl/issues/5759))
- [kemonoparty:favorite] fix exception when sorting `null` objects ([#5692](https://github.com/mikf/gallery-dl/issues/5692). [#5721](https://github.com/mikf/gallery-dl/issues/5721))
- [skeb] fix `429 Too Many Requests` errors ([#5766](https://github.com/mikf/gallery-dl/issues/5766))
- [speakerdeck] fix extraction ([#5730](https://github.com/mikf/gallery-dl/issues/5730))
- [twitter] fix duplicate `ArkoseLogin` check
#### Improvements
- [nijie] support downloading videos ([#5707](https://github.com/mikf/gallery-dl/issues/5707), [#5617](https://github.com/mikf/gallery-dl/issues/5617))
- [philomena] support downloading `.svg` files ([#5643](https://github.com/mikf/gallery-dl/issues/5643))
- [szurubooru] support empty tag searches ([#5711](https://github.com/mikf/gallery-dl/issues/5711))
- [twitter] ignore `Unavailable` media ([#5736](https://github.com/mikf/gallery-dl/issues/5736))
#### Metadata
- [hitomi] extract `title_jpn` metadata ([#5706](https://github.com/mikf/gallery-dl/issues/5706))
- [instagram] extract `liked` metadata ([#5609](https://github.com/mikf/gallery-dl/issues/5609))
#### Options
- [newgrounds] extend `format` option ([#5709](https://github.com/mikf/gallery-dl/issues/5709))
- [twitter] extend `ratelimit` option ([#5532](https://github.com/mikf/gallery-dl/issues/5532))
- [twitter] add `username-alt` option ([#5715](https://github.com/mikf/gallery-dl/issues/5715))
#### Removals
- [photobucket] remove module
- [nitter] remove instances
- [vichan] remove `wikieat.club`
### Downloaders
- [ytdl] fix exception due to missing `ext` in unavailable videos ([#5675](https://github.com/mikf/gallery-dl/issues/5675))
### Formatter
- implement `C` format specifier ([#5647](https://github.com/mikf/gallery-dl/issues/5647))
- implement `X` format specifier ([#5770](https://github.com/mikf/gallery-dl/issues/5770))
### Options
- add `--no-input` command-line and `input` config option ([#5733](https://github.com/mikf/gallery-dl/issues/5733))
- add `--config-open` command-line option ([#5713](https://github.com/mikf/gallery-dl/issues/5713))
- add `--config-status` command-line option ([#5713](https://github.com/mikf/gallery-dl/issues/5713))
### Miscellaneous
- [actions] fix exception when `msg` is not a string ([#5683](https://github.com/mikf/gallery-dl/issues/5683))

## 1.27.0 - 2024-06-01
### Extractors
#### Additions
- [mastodon] add `favorite`, `list`, and `hashtag` extractors ([#5529](https://github.com/mikf/gallery-dl/issues/5529))
- [mastodon] add support for card images
- [pixeldrain] add support for single-file album downloads ([#5641](https://github.com/mikf/gallery-dl/issues/5641))
- [reddit] support comment embeds ([#5366](https://github.com/mikf/gallery-dl/issues/5366))
- [seiga] re-implement login with username & password
- [tapas] add `creator` extractor ([#5306](https://github.com/mikf/gallery-dl/issues/5306))
- [vsco] add `avatar` extractor ([#5341](https://github.com/mikf/gallery-dl/issues/5341))
- [wikimedia] support `wiki.gg` wikis
#### Fixes
- [4archive] fix extraction
- [8chan] fix file downloads by sending a `TOS` cookie ([#5578](https://github.com/mikf/gallery-dl/issues/5578))
- [artstation] disable TLS 1.2 ciphers by default ([#5564](https://github.com/mikf/gallery-dl/issues/5564), [#5658](https://github.com/mikf/gallery-dl/issues/5658))
- [bluesky] filter reposts only for user timelines ([#5528](https://github.com/mikf/gallery-dl/issues/5528))
- [common] disable `check_hostname` for custom SSLContexts ([#3614](https://github.com/mikf/gallery-dl/issues/3614), [#4891](https://github.com/mikf/gallery-dl/issues/4891), [#5576](https://github.com/mikf/gallery-dl/issues/5576))
- [exhentai] fix Multi-Page Viewer detection ([#4969](https://github.com/mikf/gallery-dl/issues/4969))
- [exhentai] fix blank page detection
- [hiperdex] update domain to `hiperdex.top` ([#5635](https://github.com/mikf/gallery-dl/issues/5635))
- [hotleak] download files returning a 404 status code ([#5395](https://github.com/mikf/gallery-dl/issues/5395))
- [imgur] match URLs with title slugs ([#5593](https://github.com/mikf/gallery-dl/issues/5593))
- [kemonoparty] fix `KeyError - 'path'` for posts without files ([#5368](https://github.com/mikf/gallery-dl/issues/5368), [#5394](https://github.com/mikf/gallery-dl/issues/5394), [#5422](https://github.com/mikf/gallery-dl/issues/5422), [#5488](https://github.com/mikf/gallery-dl/issues/5488))
- [kemonoparty] fix crash on posts with missing datetime info ([#5422](https://github.com/mikf/gallery-dl/issues/5422))
- [mastodon] send canonical `true`/`false` boolean values ([#5516](https://github.com/mikf/gallery-dl/issues/5516))
- [newgrounds] update and fix login procedure ([#5109](https://github.com/mikf/gallery-dl/issues/5109))
- [patreon] fix `bootstrap` data extraction ([#5624](https://github.com/mikf/gallery-dl/issues/5624))
- [poipiku] fix downloading R-18 posts ([#5567](https://github.com/mikf/gallery-dl/issues/5567))
- [poipoku] avoid language-specific extraction ([#5590](https://github.com/mikf/gallery-dl/issues/5590), [#5591](https://github.com/mikf/gallery-dl/issues/5591))
- [realbooru] fix videos and provide fallback URLs ([#2530](https://github.com/mikf/gallery-dl/issues/2530))
- [slideshare] fix extraction
- [subscribestar] fix file URLs ([#5631](https://github.com/mikf/gallery-dl/issues/5631))
- [twitter] update domain to `x.com` ([#5597](https://github.com/mikf/gallery-dl/issues/5597))
- [twitter] transfer `twitter.com` cookies to `x.com` ([#5597](https://github.com/mikf/gallery-dl/issues/5597))
- [twitter] prevent crash when extracting `birdwatch` metadata ([#5403](https://github.com/mikf/gallery-dl/issues/5403))
- [twitter] handle missing `expanded_url` fields ([#5463](https://github.com/mikf/gallery-dl/issues/5463), [#5490](https://github.com/mikf/gallery-dl/issues/5490))
- [wikimedia] suppress exception for entries without `imageinfo` ([#5384](https://github.com/mikf/gallery-dl/issues/5384))
- [wikimedia] fix exception for files with empty `metadata`
#### Improvements
- [exhentai] detect CAPTCHAs during login ([#5492](https://github.com/mikf/gallery-dl/issues/5492))
- [foolfuuka] improve `board` pattern & support pages ([#5408](https://github.com/mikf/gallery-dl/issues/5408))
- [furaffinity] match `fxfuraffinity.net`/`fxraffinity.net`/`xfuraffinity.net` URLs ([#5511](https://github.com/mikf/gallery-dl/issues/5511), [#5568](https://github.com/mikf/gallery-dl/issues/5568))
- [gelbooru] improve pagination logic for meta tags ([#5478](https://github.com/mikf/gallery-dl/issues/5478))
- [kemonoparty:favorite] return artists/posts in native order and support `sort` and `order` query parameters ([#5375](https://github.com/mikf/gallery-dl/issues/5375), [#5620](https://github.com/mikf/gallery-dl/issues/5620))
- [oauth] use `Extractor.request()` for HTTP requests to support proxy servers etc ([#5433](https://github.com/mikf/gallery-dl/issues/5433))
- [pixiv] change `sanity_level` debug message to a warning ([#5180](https://github.com/mikf/gallery-dl/issues/5180))
- [twitter] improve username & password login procedure ([#5445](https://github.com/mikf/gallery-dl/issues/5445))
- [twitter] wait for rate limit reset before encountering a 429 error ([#5532](https://github.com/mikf/gallery-dl/issues/5532))
- [twitter] match `fixvx.com` URLs ([#5511](https://github.com/mikf/gallery-dl/issues/5511))
- [twitter] match Tweet URLs with query parameters ([#5371](https://github.com/mikf/gallery-dl/issues/5371), [#5372](https://github.com/mikf/gallery-dl/issues/5372))
- [twitter] match `/photo/` and `/video/` Tweet URLs ([#5443](https://github.com/mikf/gallery-dl/issues/5443), [#5601](https://github.com/mikf/gallery-dl/issues/5601))
#### Options
- [common] add `sleep-429` option ([#5160](https://github.com/mikf/gallery-dl/issues/5160))
- [common] implement `skip-filter` option ([#5255](https://github.com/mikf/gallery-dl/issues/5255))
- [common] implement `keywords-eval` option ([#5621](https://github.com/mikf/gallery-dl/issues/5621))
- [kemonoparty] add `announcements` option ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
- [pixiv:novel] add `covers` option ([#5373](https://github.com/mikf/gallery-dl/issues/5373))
- [twitter] implement `relogin` option ([#5445](https://github.com/mikf/gallery-dl/issues/5445))
### Downloaders
- [http] add MIME type and signature for `.m4v` files ([#5505](https://github.com/mikf/gallery-dl/issues/5505))
### Post Processors
- [mtime] do not overwrite `_mtime` values with `None` ([#5439](https://github.com/mikf/gallery-dl/issues/5439))
- [ugoira] log errors for general exceptions
### Archives
- [archive] move DownloadArchive code into its own module
- [archive] implement `DownloadArchiveMemory` class ([#5255](https://github.com/mikf/gallery-dl/issues/5255))
- [archive] add `archive-mode` option ([#5255](https://github.com/mikf/gallery-dl/issues/5255))
### Cookies
- [cookies] use temporary file when saving cookies.txt files ([#5461](https://github.com/mikf/gallery-dl/issues/5461))
- [cookies] optimize `_find_most_recently_used_file()` for exact profiles ([#5538](https://github.com/mikf/gallery-dl/issues/5538))
- [cookies] set proper `expires` value for Chrome session cookies
### Documentation
- [docs] update docs/configuration links ([#5059](https://github.com/mikf/gallery-dl/issues/5059), [#5369](https://github.com/mikf/gallery-dl/issues/5369), [#5423](https://github.com/mikf/gallery-dl/issues/5423))
- [docs] update link to "nightly" builds ([#5618](https://github.com/mikf/gallery-dl/issues/5618))
- [docs] replace AnchorJS with custom script
- [docs] update defaults of `sleep-request`, `browser`, `tls12`
- [docs] complete Authentication info in docs/supportedsites
### Formatter
- [formatter] allow dots in `'...'` literals ([#5539](https://github.com/mikf/gallery-dl/issues/5539))
### Output
- [output] enable colored output by default
- [output] extend `output.colors` ([#2566](https://github.com/mikf/gallery-dl/issues/2566))
- [output] support `NO_COLOR` environment variable
- [output] add `--no-colors` command-line option
- [output] add `-w/--warning` command-line option ([#5474](https://github.com/mikf/gallery-dl/issues/5474))
### Tests
- [tests] select unused port number for local HTTP server
- [tests] allow filtering extractor result tests by URL or comment
- [tests] mark tests with missing auth as `only_matching`
### Update
- implement update-related command-line options ([#5233](https://github.com/mikf/gallery-dl/issues/5233))
  - `-U`/`--update` updates an executable file to the latest release
  - `--update-check` checks if the local version is up to date
  - `--update-to` allows switching to a different release channel (`stable` or `dev`)
    as well as upgrading/downgrading to a specific tag.
    - `--update-to dev`
    - `--update-to dev@2024.05.25`
    - `--update-to v1.25.2`
  - (non-executable installations have only access to `-U`/`--update-check` for version checks)
### Miscellaneous
- add workaround for requests 2.32.3 issues ([#5665](https://github.com/mikf/gallery-dl/issues/5665))
- fix exit status of `--clear-cache`/`--list-extractors`/`--list-modules`
- restore `LD_LIBRARY_PATH` for executables built with PyInstaller  ([#5421](https://github.com/mikf/gallery-dl/issues/5421))
- store `match` and `groups` values in Extractor objects

## 1.26.9 - 2024-03-23
### Extractors
#### Additions
- [artstation] support video clips ([#2566](https://github.com/mikf/gallery-dl/issues/2566), [#3309](https://github.com/mikf/gallery-dl/issues/3309), [#3911](https://github.com/mikf/gallery-dl/issues/3911))
- [artstation] support collections ([#146](https://github.com/mikf/gallery-dl/issues/146))
- [deviantart] recognize `deviantart.com/stash/…` URLs
- [idolcomplex] support new pool URLs
- [lensdump] recognize direct image links ([#5293](https://github.com/mikf/gallery-dl/issues/5293))
- [skeb] add extractor for followed users ([#5290](https://github.com/mikf/gallery-dl/issues/5290))
- [twitter] add `quotes` extractor ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
- [wikimedia] support `azurlane.koumakan.jp` ([#5256](https://github.com/mikf/gallery-dl/issues/5256))
- [xvideos] support `/channels/` URLs ([#5244](https://github.com/mikf/gallery-dl/issues/5244))
#### Fixes
- [artstation] fix handling usernames with dashes in domain names ([#5224](https://github.com/mikf/gallery-dl/issues/5224))
- [bluesky] fix not spawning child extractors for followed users ([#5246](https://github.com/mikf/gallery-dl/issues/5246))
- [deviantart] handle CloudFront blocks ([#5363](https://github.com/mikf/gallery-dl/issues/5363))
- [deviantart:avatar] fix `index` for URLs without `?` ([#5276](https://github.com/mikf/gallery-dl/issues/5276))
- [deviantart:stash] fix `index` values ([#5335](https://github.com/mikf/gallery-dl/issues/5335))
- [gofile] fix extraction
- [hiperdex] update URL patterns & fix `manga` metadata ([#5340](https://github.com/mikf/gallery-dl/issues/5340))
- [idolcomplex] fix metadata extraction
- [imagefap] fix folder extraction ([#5333](https://github.com/mikf/gallery-dl/issues/5333))
- [instagram] make accessing `like_count` non-fatal ([#5218](https://github.com/mikf/gallery-dl/issues/5218))
- [mastodon] fix handling null `moved` account field ([#5321](https://github.com/mikf/gallery-dl/issues/5321))
- [naver] fix EUC-KR encoding issue in old image URLs ([#5126](https://github.com/mikf/gallery-dl/issues/5126))
- [nijie] increase default delay between requests ([#5221](https://github.com/mikf/gallery-dl/issues/5221))
- [nitter] ignore invalid Tweets ([#5253](https://github.com/mikf/gallery-dl/issues/5253))
- [pixiv:novel] fix text extraction ([#5285](https://github.com/mikf/gallery-dl/issues/5285), [#5309](https://github.com/mikf/gallery-dl/issues/5309))
- [skeb] retry 429 responses containing a `request_key` cookie ([#5210](https://github.com/mikf/gallery-dl/issues/5210))
- [warosu] fix crash for threads with deleted posts ([#5289](https://github.com/mikf/gallery-dl/issues/5289))
- [weibo] fix retweets ([#2825](https://github.com/mikf/gallery-dl/issues/2825), [#3874](https://github.com/mikf/gallery-dl/issues/3874), [#5263](https://github.com/mikf/gallery-dl/issues/5263))
- [weibo] fix `livephoto` filename extensions ([#5287](https://github.com/mikf/gallery-dl/issues/5287))
- [xvideos] fix galleries with more than 500 images ([#5244](https://github.com/mikf/gallery-dl/issues/5244))
#### Improvements
- [bluesky] improve API error messages
- [bluesky] handle posts with different `embed` structure
- [deviantart:avatar] ignore default avatars ([#5276](https://github.com/mikf/gallery-dl/issues/5276))
- [fapello] download full-sized images ([#5349](https://github.com/mikf/gallery-dl/issues/5349))
- [gelbooru:favorite] automatically detect returned post order ([#5220](https://github.com/mikf/gallery-dl/issues/5220))
- [imgur] fail downloads when redirected to `removed.png` ([#5308](https://github.com/mikf/gallery-dl/issues/5308))
- [instagram] raise proper error for missing `reels_media` ([#5257](https://github.com/mikf/gallery-dl/issues/5257))
- [instagram] change `posts are private` exception to a warning ([#5322](https://github.com/mikf/gallery-dl/issues/5322))
- [reddit] improve preview fallback formats ([#5296](https://github.com/mikf/gallery-dl/issues/5296), [#5315](https://github.com/mikf/gallery-dl/issues/5315))
- [steamgriddb] raise exception for deleted assets
- [twitter] handle "account is temporarily locked" errors ([#5300](https://github.com/mikf/gallery-dl/issues/5300))
- [weibo] rework pagination logic ([#4168](https://github.com/mikf/gallery-dl/issues/4168))
- [zerochan] fetch more posts by using the API ([#3669](https://github.com/mikf/gallery-dl/issues/3669))
#### Metadata
- [bluesky] add `instance` metadata field ([#4438](https://github.com/mikf/gallery-dl/issues/4438))
- [gelbooru:favorite] add `date_favorited` metadata field
- [imagefap] extract `folder` metadata ([#5270](https://github.com/mikf/gallery-dl/issues/5270))
- [instagram] default `likes` to `0` ([#5323](https://github.com/mikf/gallery-dl/issues/5323))
- [kemonoparty] add `revision_count` metadata field ([#5334](https://github.com/mikf/gallery-dl/issues/5334))
- [naver] unescape post `title` and `description`
- [pornhub:gif] extract `viewkey` and `timestamp` metadata ([#4463](https://github.com/mikf/gallery-dl/issues/4463))
- [redgifs] make `date` available for directories ([#5262](https://github.com/mikf/gallery-dl/issues/5262))
- [subscribestar] fix `date` metadata
- [twitter] add `birdwatch` metadata field ([#5317](https://github.com/mikf/gallery-dl/issues/5317))
- [twitter] add `protected` metadata field ([#5327](https://github.com/mikf/gallery-dl/issues/5327))
- [warosu] fix `board_name` metadata
#### Options
- [bluesky] add `reposts` option ([#4438](https://github.com/mikf/gallery-dl/issues/4438), [#5248](https://github.com/mikf/gallery-dl/issues/5248))
- [deviantart] add `comments-avatars` option ([#4995](https://github.com/mikf/gallery-dl/issues/4995))
- [deviantart] extend `metadata` option ([#5175](https://github.com/mikf/gallery-dl/issues/5175))
- [flickr] add `contexts` option ([#5324](https://github.com/mikf/gallery-dl/issues/5324))
- [gelbooru:favorite] add `order-posts` option ([#5220](https://github.com/mikf/gallery-dl/issues/5220))
- [kemonoparty] add `order-revisions` option ([#5334](https://github.com/mikf/gallery-dl/issues/5334))
- [vipergirls] add `like` option ([#4166](https://github.com/mikf/gallery-dl/issues/4166))
- [vipergirls] add `domain` option ([#4166](https://github.com/mikf/gallery-dl/issues/4166))
### Downloaders
- [http] add MIME type and signature for `.mov` files ([#5287](https://github.com/mikf/gallery-dl/issues/5287))
### Docker
- build images from source instead of PyPI package
- build `linux/arm64` images ([#5227](https://github.com/mikf/gallery-dl/issues/5227))
- build images on every push to master
  - tag images as `YYYY.MM.DD`
  - tag the most recent build from master as `dev`
  - tag the most recent release build as `latest`
- reduce image size ([#5097](https://github.com/mikf/gallery-dl/issues/5097))
### Miscellaneous
- [formatter] fix local DST datetime offsets for `:O`
- build Linux executable on Ubuntu 22.04 LTS ([#4184](https://github.com/mikf/gallery-dl/issues/4184))
- automatically create directories for logging files ([#5249](https://github.com/mikf/gallery-dl/issues/5249))

## 1.26.8 - 2024-02-17
### Extractors
#### Additions
- [bluesky] add support ([#4438](https://github.com/mikf/gallery-dl/issues/4438), [#4708](https://github.com/mikf/gallery-dl/issues/4708), [#4722](https://github.com/mikf/gallery-dl/issues/4722), [#5047](https://github.com/mikf/gallery-dl/issues/5047))
- [bunkr] support new domains ([#5114](https://github.com/mikf/gallery-dl/issues/5114), [#5130](https://github.com/mikf/gallery-dl/issues/5130), [#5134](https://github.com/mikf/gallery-dl/issues/5134))
- [fanbox] add `home` and `supporting` extractors ([#5138](https://github.com/mikf/gallery-dl/issues/5138))
- [imagechest] add `user` extractor ([#5143](https://github.com/mikf/gallery-dl/issues/5143))
- [imagetwist] add `gallery` extractor ([#5190](https://github.com/mikf/gallery-dl/issues/5190))
- [kemonoparty] add `posts` extractor ([#5194](https://github.com/mikf/gallery-dl/issues/5194), [#5198](https://github.com/mikf/gallery-dl/issues/5198))
- [twitter] support communities ([#4913](https://github.com/mikf/gallery-dl/issues/4913))
- [vsco] support spaces ([#5202](https://github.com/mikf/gallery-dl/issues/5202))
- [weibo] add `gifs` option ([#5183](https://github.com/mikf/gallery-dl/issues/5183))
- [wikimedia] support `www.pidgi.net` ([#5205](https://github.com/mikf/gallery-dl/issues/5205))
- [wikimedia] support `bulbapedia.bulbagarden.net` ([#5206](https://github.com/mikf/gallery-dl/issues/5206))
#### Fixes
- [archivedmoe] fix `thebarchive` WebM URLs ([#5116](https://github.com/mikf/gallery-dl/issues/5116))
- [batoto] fix crash when manga name or chapter contains a `-` ([#5200](https://github.com/mikf/gallery-dl/issues/5200))
- [bunkr] fix extraction ([#5088](https://github.com/mikf/gallery-dl/issues/5088), [#5151](https://github.com/mikf/gallery-dl/issues/5151), [#5153](https://github.com/mikf/gallery-dl/issues/5153))
- [gofile] update `website_token` extraction
- [idolcomplex] fix pagination for tags containing `:` ([#5184](https://github.com/mikf/gallery-dl/issues/5184))
- [kemonoparty] fix deleting file names when computing `revision_hash` ([#5103](https://github.com/mikf/gallery-dl/issues/5103))
- [luscious] fix IndexError for files without thumbnail ([#5122](https://github.com/mikf/gallery-dl/issues/5122), [#5124](https://github.com/mikf/gallery-dl/issues/5124), [#5182](https://github.com/mikf/gallery-dl/issues/5182))
- [naverwebtoon] fix `title` for comics with empty tags ([#5120](https://github.com/mikf/gallery-dl/issues/5120))
- [pinterest] fix section URLs for boards with `/`, `?`, or `#` in their name ([#5104](https://github.com/mikf/gallery-dl/issues/5104))
- [twitter] update query hashes
- [zerochan] fix skipping every other post
#### Improvements
- [deviantart] skip locked/blurred posts ([#4567](https://github.com/mikf/gallery-dl/issues/4567), [#5193](https://github.com/mikf/gallery-dl/issues/5193))
- [deviantart] implement downloading PNG versions of non-original images with `"quality": "png"` ([#4846](https://github.com/mikf/gallery-dl/issues/4846))
- [flickr] handle non-JSON errors ([#5131](https://github.com/mikf/gallery-dl/issues/5131))
- [idolcomplex] support alphanumeric post IDs ([#5171](https://github.com/mikf/gallery-dl/issues/5171))
- [kemonoparty] implement filtering duplicate revisions with `"revisions": "unique"`([#5013](https://github.com/mikf/gallery-dl/issues/5013))
- [naverwebtoon] support `/webtoon/` paths for all comics ([#5123](https://github.com/mikf/gallery-dl/issues/5123))
#### Metadata
- [idolcomplex] extract `id_alnum` metadata ([#5171](https://github.com/mikf/gallery-dl/issues/5171))
- [pornpics] support multiple values for `channel` ([#5195](https://github.com/mikf/gallery-dl/issues/5195))
- [sankaku] add `id-format` option ([#5073](https://github.com/mikf/gallery-dl/issues/5073))
- [skeb] add `num` and `count` metadata fields ([#5187](https://github.com/mikf/gallery-dl/issues/5187))
### Downloaders
#### Fixes
- [http] remove `pyopenssl` import ([#5156](https://github.com/mikf/gallery-dl/issues/5156))
### Miscellaneous
- fix filename formatting silently failing under certain circumstances ([#5185](https://github.com/mikf/gallery-dl/issues/5185), [#5186](https://github.com/mikf/gallery-dl/issues/5186))

## 1.26.7 - 2024-01-21
### Extractors
#### Additions
- [2ch] add support ([#1009](https://github.com/mikf/gallery-dl/issues/1009), [#3540](https://github.com/mikf/gallery-dl/issues/3540), [#4444](https://github.com/mikf/gallery-dl/issues/4444))
- [deviantart:avatar] add `formats` option ([#4995](https://github.com/mikf/gallery-dl/issues/4995))
- [hatenablog] add support ([#5036](https://github.com/mikf/gallery-dl/issues/5036), [#5037](https://github.com/mikf/gallery-dl/issues/5037))
- [mangadex] add `list` extractor ([#5025](https://github.com/mikf/gallery-dl/issues/5025))
- [steamgriddb] add support ([#5033](https://github.com/mikf/gallery-dl/issues/5033), [#5041](https://github.com/mikf/gallery-dl/issues/5041))
- [wikimedia] add support ([#1443](https://github.com/mikf/gallery-dl/issues/1443), [#2906](https://github.com/mikf/gallery-dl/issues/2906), [#3660](https://github.com/mikf/gallery-dl/issues/3660), [#2340](https://github.com/mikf/gallery-dl/issues/2340))
- [wikimedia] support `fandom` wikis ([#2677](https://github.com/mikf/gallery-dl/issues/2677), [#3378](https://github.com/mikf/gallery-dl/issues/3378))
#### Fixes
- [blogger] fix `lh-*.googleusercontent.com` URLs ([#5091](https://github.com/mikf/gallery-dl/issues/5091))
- [bunkr] update domain ([#5088](https://github.com/mikf/gallery-dl/issues/5088))
- [deviantart] fix AttributeError for URLs without username ([#5065](https://github.com/mikf/gallery-dl/issues/5065))
- [deviantart] fix `KeyError: 'premium_folder_data'` ([#5063](https://github.com/mikf/gallery-dl/issues/5063))
- [deviantart:avatar] fix exception when `comments` are enabled ([#4995](https://github.com/mikf/gallery-dl/issues/4995))
- [fuskator] make metadata extraction non-fatal ([#5039](https://github.com/mikf/gallery-dl/issues/5039))
- [gelbooru] only log "Incomplete API response" for favorites ([#5045](https://github.com/mikf/gallery-dl/issues/5045))
- [giantessbooru] update domain
- [issuu] fix extraction
- [nijie] fix download URLs of single image posts ([#5049](https://github.com/mikf/gallery-dl/issues/5049))
- [patreon] fix `KeyError: 'name'` ([#5048](https://github.com/mikf/gallery-dl/issues/5048), [#5069](https://github.com/mikf/gallery-dl/issues/5069), [#5093](https://github.com/mikf/gallery-dl/issues/5093))
- [pixiv] update API headers ([#5029](https://github.com/mikf/gallery-dl/issues/5029))
- [realbooru] fix download URLs of older posts
- [twitter] revert to using `media` timeline by default ([#4953](https://github.com/mikf/gallery-dl/issues/4953))
- [vk] transform image URLs to non-blurred versions ([#5017](https://github.com/mikf/gallery-dl/issues/5017))
#### Improvements
- [batoto] support more mirror domains ([#5042](https://github.com/mikf/gallery-dl/issues/5042))
- [batoto] improve v2 manga URL pattern
- [gelbooru] support `all` tag and URLs with empty tags ([#5076](https://github.com/mikf/gallery-dl/issues/5076))
- [patreon] download `m3u8` manifests with ytdl
- [sankaku] support post URLs with alphanumeric IDs ([#5073](https://github.com/mikf/gallery-dl/issues/5073))
#### Metadata
- [batoto] improve `manga_id` extraction ([#5042](https://github.com/mikf/gallery-dl/issues/5042))
- [erome] fix `count` metadata
- [kemonoparty] add `revision_hash` metadata ([#4706](https://github.com/mikf/gallery-dl/issues/4706), [#4727](https://github.com/mikf/gallery-dl/issues/4727), [#5013](https://github.com/mikf/gallery-dl/issues/5013))
- [paheal] fix `source` metadata
- [webtoons] extract more metadata ([#5061](https://github.com/mikf/gallery-dl/issues/5061), [#5094](https://github.com/mikf/gallery-dl/issues/5094))
#### Removals
- [chevereto] remove `pixl.li`
- [hbrowse] remove module
- [nitter] remove `nitter.lacontrevoie.fr`

## 1.26.6 - 2024-01-06
### Extractors
#### Additions
- [batoto] add `chapter` and `manga` extractors ([#1434](https://github.com/mikf/gallery-dl/issues/1434), [#2111](https://github.com/mikf/gallery-dl/issues/2111), [#4979](https://github.com/mikf/gallery-dl/issues/4979))
- [deviantart] add `avatar` and `background` extractors ([#4995](https://github.com/mikf/gallery-dl/issues/4995))
- [poringa] add support ([#4675](https://github.com/mikf/gallery-dl/issues/4675), [#4962](https://github.com/mikf/gallery-dl/issues/4962))
- [szurubooru] support `snootbooru.com` ([#5023](https://github.com/mikf/gallery-dl/issues/5023))
- [zzup] add `gallery` extractor ([#4517](https://github.com/mikf/gallery-dl/issues/4517), [#4604](https://github.com/mikf/gallery-dl/issues/4604), [#4659](https://github.com/mikf/gallery-dl/issues/4659), [#4863](https://github.com/mikf/gallery-dl/issues/4863), [#5016](https://github.com/mikf/gallery-dl/issues/5016))
#### Fixes
- [gelbooru] fix `favorite` extractor ([#4903](https://github.com/mikf/gallery-dl/issues/4903))
- [idolcomplex] fix extraction & update URL patterns ([#5002](https://github.com/mikf/gallery-dl/issues/5002))
- [imagechest] fix loading more than 10 images in a gallery ([#4469](https://github.com/mikf/gallery-dl/issues/4469))
- [jpgfish] update domain
- [komikcast] fix `manga` extractor ([#5027](https://github.com/mikf/gallery-dl/issues/5027))
- [komikcast] update domain ([#5027](https://github.com/mikf/gallery-dl/issues/5027))
- [lynxchan] update `bbw-chan` domain ([#4970](https://github.com/mikf/gallery-dl/issues/4970))
- [manganelo] fix extraction & recognize `.to` TLDs ([#5005](https://github.com/mikf/gallery-dl/issues/5005))
- [paheal] restore `extension` metadata ([#4976](https://github.com/mikf/gallery-dl/issues/4976))
- [rule34us] add fallback for `video-cdn1` videos ([#4985](https://github.com/mikf/gallery-dl/issues/4985))
- [weibo] fix AttributeError in `user` extractor ([#5022](https://github.com/mikf/gallery-dl/issues/5022))
#### Improvements
- [gelbooru] show error for invalid API responses ([#4903](https://github.com/mikf/gallery-dl/issues/4903))
- [rule34] recognize URLs with `www` subdomain ([#4984](https://github.com/mikf/gallery-dl/issues/4984))
- [twitter] raise error for invalid `strategy` values ([#4953](https://github.com/mikf/gallery-dl/issues/4953))
#### Metadata
- [fanbox] add `metadata` option ([#4921](https://github.com/mikf/gallery-dl/issues/4921))
- [nijie] add `count` metadata ([#146](https://github.com/mikf/gallery-dl/issues/146))
- [pinterest] add `count` metadata ([#4981](https://github.com/mikf/gallery-dl/issues/4981))
### Miscellaneous
- fix and update zsh completion ([#4972](https://github.com/mikf/gallery-dl/issues/4972))
- fix `--cookies-from-browser` macOS Firefox profile path

## 1.26.5 - 2023-12-23
### Extractors
#### Additions
- [deviantart] add `intermediary` option ([#4955](https://github.com/mikf/gallery-dl/issues/4955))
- [inkbunny] add `unread` extractor ([#4934](https://github.com/mikf/gallery-dl/issues/4934))
- [mastodon] support non-numeric status IDs ([#4936](https://github.com/mikf/gallery-dl/issues/4936))
- [myhentaigallery] recognize `/g/` URLs ([#4920](https://github.com/mikf/gallery-dl/issues/4920))
- [postmill] add support ([#4917](https://github.com/mikf/gallery-dl/issues/4917), [#4919](https://github.com/mikf/gallery-dl/issues/4919))
- {shimmie2[ support `rule34hentai.net` ([#861](https://github.com/mikf/gallery-dl/issues/861), [#4789](https://github.com/mikf/gallery-dl/issues/4789), [#4945](https://github.com/mikf/gallery-dl/issues/4945))
#### Fixes
- [deviantart] add workaround for integer `client-id` values ([#4924](https://github.com/mikf/gallery-dl/issues/4924))
- [exhentai] fix error for infinite `fallback-retries` ([#4911](https://github.com/mikf/gallery-dl/issues/4911))
- [inkbunny] stop pagination on empty results
- [patreon] fix bootstrap data extraction again ([#4904](https://github.com/mikf/gallery-dl/issues/4904))
- [tumblr] fix exception after waiting for rate limit ([#4916](https://github.com/mikf/gallery-dl/issues/4916))
#### Improvements
- [exhentai] output continuation URL when interrupted ([#4782](https://github.com/mikf/gallery-dl/issues/4782))
- [inkbunny] improve `/submissionsviewall.php` patterns ([#4934](https://github.com/mikf/gallery-dl/issues/4934))
- [tumblr] support infinite `fallback-retries`
- [twitter] default to `tweets` timeline when `replies` are enabled ([#4953](https://github.com/mikf/gallery-dl/issues/4953))
#### Metadata
- [danbooru] provide `tags` as list ([#4942](https://github.com/mikf/gallery-dl/issues/4942))
- [deviantart] set `is_original` for intermediary URLs to `false`
- [twitter] remove `date_liked` ([#3850](https://github.com/mikf/gallery-dl/issues/3850), [#4108](https://github.com/mikf/gallery-dl/issues/4108), [#4657](https://github.com/mikf/gallery-dl/issues/4657))
### Docker
- add Docker instructions to README ([#4850](https://github.com/mikf/gallery-dl/issues/4850))
- fix auto-generation of `latest` tags

## 1.26.4 - 2023-12-10
### Extractors
#### Additions
- [exhentai] add `fallback-retries` option ([#4792](https://github.com/mikf/gallery-dl/issues/4792))
- [urlgalleries] add `gallery` extractor ([#919](https://github.com/mikf/gallery-dl/issues/919), [#1184](https://github.com/mikf/gallery-dl/issues/1184), [#2905](https://github.com/mikf/gallery-dl/issues/2905), [#4886](https://github.com/mikf/gallery-dl/issues/4886))
#### Fixes
- [nijie] fix image URLs of multi-image posts ([#4876](https://github.com/mikf/gallery-dl/issues/4876))
- [patreon] fix bootstrap data extraction ([#4904](https://github.com/mikf/gallery-dl/issues/4904), [#4906](https://github.com/mikf/gallery-dl/issues/4906))
- [twitter] fix `/media` timelines ([#4898](https://github.com/mikf/gallery-dl/issues/4898), [#4899](https://github.com/mikf/gallery-dl/issues/4899))
- [twitter] retry API requests when response contains incomplete results ([#4811](https://github.com/mikf/gallery-dl/issues/4811))
#### Improvements
- [exhentai] store more cookies when logging in with username & password ([#4881](https://github.com/mikf/gallery-dl/issues/4881))
- [twitter] generalize "Login Required" errors ([#4734](https://github.com/mikf/gallery-dl/issues/4734), [#4324](https://github.com/mikf/gallery-dl/issues/4324))
### Options
- add `-e/--error-file` command-line and `output.errorfile` config option ([#4732](https://github.com/mikf/gallery-dl/issues/4732))
### Miscellaneous
- automatically build and push Docker images
- prompt for passwords on login when necessary
- fix `util.dump_response()` to work with `bytes` header values

## 1.26.3 - 2023-11-27
### Extractors
#### Additions
- [behance] support `text` modules ([#4799](https://github.com/mikf/gallery-dl/issues/4799))
- [behance] add `modules` option ([#4799](https://github.com/mikf/gallery-dl/issues/4799))
- [blogger] support `www.micmicidol.club` ([#4759](https://github.com/mikf/gallery-dl/issues/4759))
- [erome] add `count` metadata ([#4812](https://github.com/mikf/gallery-dl/issues/4812))
- [exhentai] add `gp` option ([#4576](https://github.com/mikf/gallery-dl/issues/4576))
- [fapello] support `.su` TLD ([#4840](https://github.com/mikf/gallery-dl/issues/4840), [#4841](https://github.com/mikf/gallery-dl/issues/4841))
- [pixeldrain] add `file` and `album` extractors ([#4839](https://github.com/mikf/gallery-dl/issues/4839))
- [pixeldrain] add `api-key` option ([#4839](https://github.com/mikf/gallery-dl/issues/4839))
- [tmohentai] add `gallery` extractor ([#4808](https://github.com/mikf/gallery-dl/issues/4808), [#4832](https://github.com/mikf/gallery-dl/issues/4832))
#### Fixes
- [cyberdrop] update to site layout changes
- [exhentai] handle `Downloading … requires GP` errors ([#4576](https://github.com/mikf/gallery-dl/issues/4576), [#4763](https://github.com/mikf/gallery-dl/issues/4763))
- [exhentai] fix empty API URL with `"source": "hitomi"` ([#4829](https://github.com/mikf/gallery-dl/issues/4829))
- [hentaifoundry] check for and update expired sessions ([#4694](https://github.com/mikf/gallery-dl/issues/4694))
- [hiperdex] fix `manga` metadata
- [idolcomplex] update to site layout changes
- [imagefap] fix resolution of single images
- [instagram] fix exception on empty `video_versions` ([#4795](https://github.com/mikf/gallery-dl/issues/4795))
- [mangaread] fix extraction
- [mastodon] fix reblogs ([#4580](https://github.com/mikf/gallery-dl/issues/4580))
- [nitter] fix video extraction ([#4853](https://github.com/mikf/gallery-dl/issues/4853), [#4855](https://github.com/mikf/gallery-dl/issues/4855))
- [pornhub] fix `user` metadata for gifs
- [tumblr] fix `day` extractor
- [wallpapercave] fix extraction
- [warosu] fix file URLs
- [webtoons] fix pagination when receiving an HTTP redirect
- [xvideos] fix metadata extraction
- [zerochan] fix metadata extraction
#### Improvements
- [hentaicosplays] force `https://` for download URLs
- [oauth] warn when cache is enabled but not writeable ([#4771](https://github.com/mikf/gallery-dl/issues/4771))
- [sankaku] update URL patterns
- [twitter] ignore promoted Tweets ([#3894](https://github.com/mikf/gallery-dl/issues/3894), [#4790](https://github.com/mikf/gallery-dl/issues/4790))
- [weibo] detect redirects to login page ([#4773](https://github.com/mikf/gallery-dl/issues/4773))
#### Removals
- [foolslide] remove `powermanga.org`
### Downloaders
#### Changes
- [http] treat files not passing `filesize-min`/`-max` as skipped ([#4821](https://github.com/mikf/gallery-dl/issues/4821))
### Options
#### Additions
- add `metadata-extractor` option ([#4549](https://github.com/mikf/gallery-dl/issues/4549))
- support `metadata-*` names for `*-metadata` options
  (for example `url-metadata` is now also recognized as `metadata-url`)
### CLI
#### Additions
- implement `-I/--input-file-comment` and `-x/--input-file-delete` options ([#4732](https://github.com/mikf/gallery-dl/issues/4732))
- add `--ugoira` as a general version of `--ugoira-conv` and co.
- add `--mtime` as a general version of `--mtime-from-date`
- add `--cbz`
#### Fixes
- allow `--mtime-from-date` to work with Weibo`s metadata structure
### Miscellaneous
#### Additions
- add a simple Dockerfile ([#4831](https://github.com/mikf/gallery-dl/issues/4831))

## 1.26.2 - 2023-11-04
### Extractors
#### Additions
- [4archive] add `thread` and `board` extractors ([#1262](https://github.com/mikf/gallery-dl/issues/1262), [#2418](https://github.com/mikf/gallery-dl/issues/2418), [#4400](https://github.com/mikf/gallery-dl/issues/4400), [#4710](https://github.com/mikf/gallery-dl/issues/4710), [#4714](https://github.com/mikf/gallery-dl/issues/4714))
- [hitomi] recognize `imageset` gallery URLs ([#4756](https://github.com/mikf/gallery-dl/issues/4756))
- [kemonoparty] add `revision_index` metadata field ([#4727](https://github.com/mikf/gallery-dl/issues/4727))
- [misskey] support `misskey.design` ([#4713](https://github.com/mikf/gallery-dl/issues/4713))
- [reddit] support Reddit Mobile share links ([#4693](https://github.com/mikf/gallery-dl/issues/4693))
- [sankaku] support `/posts/` tag search URLs ([#4740](https://github.com/mikf/gallery-dl/issues/4740))
- [twitter] recognize `fixupx.com` URLs ([#4755](https://github.com/mikf/gallery-dl/issues/4755))
#### Fixes
- [exhentai] update to site layout changes ([#4730](https://github.com/mikf/gallery-dl/issues/4730), [#4754](https://github.com/mikf/gallery-dl/issues/4754))
- [exhentai] provide fallback URLs ([#1021](https://github.com/mikf/gallery-dl/issues/1021), [#4745](https://github.com/mikf/gallery-dl/issues/4745))
- [exhentai] disable `DH` ciphers to avoid `DH_KEY_TOO_SMALL` errors ([#1021](https://github.com/mikf/gallery-dl/issues/1021), [#4593](https://github.com/mikf/gallery-dl/issues/4593))
- [idolcomplex] disable sending Referer headers ([#4726](https://github.com/mikf/gallery-dl/issues/4726))
- [instagram] update API headers
- [kemonoparty] fix parsing of non-standard `date` values ([#4676](https://github.com/mikf/gallery-dl/issues/4676))
- [patreon] fix `campaign_id` extraction ([#4699](https://github.com/mikf/gallery-dl/issues/4699), [#4715](https://github.com/mikf/gallery-dl/issues/4715), [#4736](https://github.com/mikf/gallery-dl/issues/4736), [#4738](https://github.com/mikf/gallery-dl/issues/4738))
- [pixiv] load cookies for non-OAuth URLs ([#4760](https://github.com/mikf/gallery-dl/issues/4760))
- [twitter] fix avatars without `date` information ([#4696](https://github.com/mikf/gallery-dl/issues/4696))
- [twitter] restore truncated retweet texts ([#3430](https://github.com/mikf/gallery-dl/issues/3430), [#4690](https://github.com/mikf/gallery-dl/issues/4690))
- [weibo] fix Sina Visitor requests
#### Improvements
- [behance] unescape embed URLs ([#4742](https://github.com/mikf/gallery-dl/issues/4742))
- [fantia] simplify `tags` to a list of strings ([#4752](https://github.com/mikf/gallery-dl/issues/4752))
- [kemonoparty] limit `title` length ([#4741](https://github.com/mikf/gallery-dl/issues/4741))
- [nijie] set 1-2s delay between requests to avoid 429 errors
- [p
Download .txt
gitextract_l6ot1457/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       ├── docker.yml
│       ├── executables.yml
│       ├── pages.yml
│       └── tests.yml
├── .gitignore
├── CHANGELOG.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── bin/
│   └── gallery-dl
├── docs/
│   ├── _layouts/
│   │   └── default.html
│   ├── configuration.rst
│   ├── formatting.md
│   ├── gallery-dl-example.conf
│   ├── gallery-dl.conf
│   ├── index.md
│   ├── links.js
│   ├── oauth-redirect.html
│   ├── options.md
│   └── supportedsites.md
├── gallery_dl/
│   ├── __init__.py
│   ├── __main__.py
│   ├── actions.py
│   ├── aes.py
│   ├── archive.py
│   ├── cache.py
│   ├── config.py
│   ├── cookies.py
│   ├── downloader/
│   │   ├── __init__.py
│   │   ├── common.py
│   │   ├── http.py
│   │   ├── text.py
│   │   └── ytdl.py
│   ├── dt.py
│   ├── exception.py
│   ├── extractor/
│   │   ├── 2ch.py
│   │   ├── 2chan.py
│   │   ├── 2chen.py
│   │   ├── 35photo.py
│   │   ├── 3dbooru.py
│   │   ├── 4archive.py
│   │   ├── 4chan.py
│   │   ├── 4chanarchives.py
│   │   ├── 500px.py
│   │   ├── 8chan.py
│   │   ├── 8muses.py
│   │   ├── __init__.py
│   │   ├── adultempire.py
│   │   ├── agnph.py
│   │   ├── ahottie.py
│   │   ├── allporncomic.py
│   │   ├── ao3.py
│   │   ├── arcalive.py
│   │   ├── architizer.py
│   │   ├── arena.py
│   │   ├── artstation.py
│   │   ├── aryion.py
│   │   ├── audiochan.py
│   │   ├── bbc.py
│   │   ├── behance.py
│   │   ├── bellazon.py
│   │   ├── bilibili.py
│   │   ├── blogger.py
│   │   ├── bluesky.py
│   │   ├── booru.py
│   │   ├── boosty.py
│   │   ├── booth.py
│   │   ├── bunkr.py
│   │   ├── catbox.py
│   │   ├── cfake.py
│   │   ├── chevereto.py
│   │   ├── cien.py
│   │   ├── civitai.py
│   │   ├── comedywildlifephoto.py
│   │   ├── comick.py
│   │   ├── comicvine.py
│   │   ├── common.py
│   │   ├── cyberdrop.py
│   │   ├── cyberfile.py
│   │   ├── danbooru.py
│   │   ├── dandadan.py
│   │   ├── dankefuerslesen.py
│   │   ├── desktopography.py
│   │   ├── deviantart.py
│   │   ├── directlink.py
│   │   ├── discord.py
│   │   ├── dynastyscans.py
│   │   ├── e621.py
│   │   ├── eporner.py
│   │   ├── erome.py
│   │   ├── everia.py
│   │   ├── exhentai.py
│   │   ├── facebook.py
│   │   ├── fanbox.py
│   │   ├── fansly.py
│   │   ├── fantia.py
│   │   ├── fapachi.py
│   │   ├── fapello.py
│   │   ├── fikfap.py
│   │   ├── filester.py
│   │   ├── fitnakedgirls.py
│   │   ├── flickr.py
│   │   ├── foolfuuka.py
│   │   ├── foolslide.py
│   │   ├── foriio.py
│   │   ├── furaffinity.py
│   │   ├── furry34.py
│   │   ├── fuskator.py
│   │   ├── gelbooru.py
│   │   ├── gelbooru_v01.py
│   │   ├── gelbooru_v02.py
│   │   ├── generic.py
│   │   ├── girlsreleased.py
│   │   ├── girlswithmuscle.py
│   │   ├── gofile.py
│   │   ├── hatenablog.py
│   │   ├── hdoujin.py
│   │   ├── hentai2read.py
│   │   ├── hentaicosplays.py
│   │   ├── hentaifoundry.py
│   │   ├── hentaihand.py
│   │   ├── hentaihere.py
│   │   ├── hentainexus.py
│   │   ├── hiperdex.py
│   │   ├── hitomi.py
│   │   ├── hotleak.py
│   │   ├── idolcomplex.py
│   │   ├── imagebam.py
│   │   ├── imagechest.py
│   │   ├── imagefap.py
│   │   ├── imagehosts.py
│   │   ├── imagepond.py
│   │   ├── imgbb.py
│   │   ├── imgbox.py
│   │   ├── imgpile.py
│   │   ├── imgth.py
│   │   ├── imgur.py
│   │   ├── imhentai.py
│   │   ├── inkbunny.py
│   │   ├── instagram.py
│   │   ├── issuu.py
│   │   ├── itaku.py
│   │   ├── itchio.py
│   │   ├── iwara.py
│   │   ├── joyreactor.py
│   │   ├── jschan.py
│   │   ├── kabeuchi.py
│   │   ├── kaliscan.py
│   │   ├── keenspot.py
│   │   ├── kemono.py
│   │   ├── khinsider.py
│   │   ├── komikcast.py
│   │   ├── koofr.py
│   │   ├── leakgallery.py
│   │   ├── lensdump.py
│   │   ├── lexica.py
│   │   ├── lightroom.py
│   │   ├── listal.py
│   │   ├── livedoor.py
│   │   ├── lofter.py
│   │   ├── lolisafe.py
│   │   ├── luscious.py
│   │   ├── lynxchan.py
│   │   ├── madokami.py
│   │   ├── mangadex.py
│   │   ├── mangafire.py
│   │   ├── mangafox.py
│   │   ├── mangafreak.py
│   │   ├── mangahere.py
│   │   ├── manganelo.py
│   │   ├── mangapark.py
│   │   ├── mangaread.py
│   │   ├── mangareader.py
│   │   ├── mangataro.py
│   │   ├── mangatown.py
│   │   ├── mangoxo.py
│   │   ├── mastodon.py
│   │   ├── message.py
│   │   ├── misskey.py
│   │   ├── mixdrop.py
│   │   ├── moebooru.py
│   │   ├── motherless.py
│   │   ├── myhentaigallery.py
│   │   ├── myportfolio.py
│   │   ├── naverblog.py
│   │   ├── naverchzzk.py
│   │   ├── naverwebtoon.py
│   │   ├── nekohouse.py
│   │   ├── newgrounds.py
│   │   ├── nhentai.py
│   │   ├── nijie.py
│   │   ├── nitter.py
│   │   ├── noop.py
│   │   ├── nozomi.py
│   │   ├── nsfwalbum.py
│   │   ├── nudostar.py
│   │   ├── oauth.py
│   │   ├── okporn.py
│   │   ├── paheal.py
│   │   ├── patreon.py
│   │   ├── pexels.py
│   │   ├── philomena.py
│   │   ├── pholder.py
│   │   ├── photovogue.py
│   │   ├── picarto.py
│   │   ├── picazor.py
│   │   ├── pictoa.py
│   │   ├── piczel.py
│   │   ├── pillowfort.py
│   │   ├── pinterest.py
│   │   ├── pixeldrain.py
│   │   ├── pixiv.py
│   │   ├── pixnet.py
│   │   ├── plurk.py
│   │   ├── poipiku.py
│   │   ├── poringa.py
│   │   ├── pornhub.py
│   │   ├── pornpics.py
│   │   ├── pornstarstube.py
│   │   ├── postmill.py
│   │   ├── rawkuma.py
│   │   ├── reactor.py
│   │   ├── readcomiconline.py
│   │   ├── realbooru.py
│   │   ├── recursive.py
│   │   ├── reddit.py
│   │   ├── redgifs.py
│   │   ├── rule34us.py
│   │   ├── rule34vault.py
│   │   ├── rule34xyz.py
│   │   ├── s3ndpics.py
│   │   ├── sankaku.py
│   │   ├── sankakucomplex.py
│   │   ├── schalenetwork.py
│   │   ├── scrolller.py
│   │   ├── seiga.py
│   │   ├── senmanga.py
│   │   ├── sexcom.py
│   │   ├── shimmie2.py
│   │   ├── shopify.py
│   │   ├── simplyhentai.py
│   │   ├── sizebooru.py
│   │   ├── skeb.py
│   │   ├── slickpic.py
│   │   ├── slideshare.py
│   │   ├── smugmug.py
│   │   ├── soundgasm.py
│   │   ├── speakerdeck.py
│   │   ├── steamgriddb.py
│   │   ├── subscribestar.py
│   │   ├── sxypix.py
│   │   ├── szurubooru.py
│   │   ├── tapas.py
│   │   ├── tcbscans.py
│   │   ├── telegraph.py
│   │   ├── tenor.py
│   │   ├── thefap.py
│   │   ├── thehentaiworld.py
│   │   ├── tiktok.py
│   │   ├── tmohentai.py
│   │   ├── toyhouse.py
│   │   ├── tumblr.py
│   │   ├── tumblrgallery.py
│   │   ├── tungsten.py
│   │   ├── turbo.py
│   │   ├── twibooru.py
│   │   ├── twitter.py
│   │   ├── unsplash.py
│   │   ├── uploadir.py
│   │   ├── urlgalleries.py
│   │   ├── urlshortener.py
│   │   ├── utils/
│   │   │   ├── 500px_graphql.py
│   │   │   ├── __init__.py
│   │   │   ├── behance_graphql.py
│   │   │   ├── deviantart_journal.py
│   │   │   ├── deviantart_tiptap.py
│   │   │   ├── geo.py
│   │   │   ├── joyreactor_graphql.py
│   │   │   ├── jsurl.py
│   │   │   ├── luscious_graphql.py
│   │   │   ├── mangafire_vrf.py
│   │   │   ├── mangapark_graphql.py
│   │   │   ├── patreon_tiptap.py
│   │   │   ├── scrolller_graphql.py
│   │   │   └── twitter_transaction_id.py
│   │   ├── vanillarock.py
│   │   ├── vichan.py
│   │   ├── vipergirls.py
│   │   ├── vk.py
│   │   ├── vsco.py
│   │   ├── wallhaven.py
│   │   ├── wallpapercave.py
│   │   ├── warosu.py
│   │   ├── weasyl.py
│   │   ├── webmshare.py
│   │   ├── webtoons.py
│   │   ├── weebcentral.py
│   │   ├── weebdex.py
│   │   ├── weibo.py
│   │   ├── whyp.py
│   │   ├── wikiart.py
│   │   ├── wikifeet.py
│   │   ├── wikimedia.py
│   │   ├── xasiat.py
│   │   ├── xenforo.py
│   │   ├── xfolio.py
│   │   ├── xhamster.py
│   │   ├── xvideos.py
│   │   ├── yiffverse.py
│   │   ├── yourlesbians.py
│   │   ├── ytdl.py
│   │   └── zerochan.py
│   ├── formatter.py
│   ├── job.py
│   ├── oauth.py
│   ├── option.py
│   ├── output.py
│   ├── path.py
│   ├── postprocessor/
│   │   ├── __init__.py
│   │   ├── actions.py
│   │   ├── classify.py
│   │   ├── common.py
│   │   ├── compare.py
│   │   ├── directory.py
│   │   ├── exec.py
│   │   ├── hash.py
│   │   ├── metadata.py
│   │   ├── mtime.py
│   │   ├── python.py
│   │   ├── rename.py
│   │   ├── ugoira.py
│   │   └── zip.py
│   ├── text.py
│   ├── update.py
│   ├── util.py
│   ├── version.py
│   └── ytdl.py
├── pyproject.toml
├── requirements.txt
├── scripts/
│   ├── build_testresult_db.py
│   ├── completion_bash.py
│   ├── completion_fish.py
│   ├── completion_zsh.py
│   ├── docs_compare.py
│   ├── generate_test_result.py
│   ├── hook-gallery_dl.py
│   ├── init.py
│   ├── man.py
│   ├── options.py
│   ├── pre-commit
│   ├── pull-request
│   ├── pyinstaller.py
│   ├── pyprint.py
│   ├── release.sh
│   ├── rm.py
│   ├── run_tests.py
│   ├── supportedsites.py
│   └── util.py
├── setup.cfg
├── setup.py
├── snap/
│   ├── local/
│   │   ├── launchers/
│   │   │   └── gallery-dl-launch
│   │   └── scriptlets/
│   │       └── selective-checkout
│   └── snapcraft.yaml
└── test/
    ├── __init__.py
    ├── results/
    │   ├── 2ch.py
    │   ├── 2chan.py
    │   ├── 35photo.py
    │   ├── 3dbooru.py
    │   ├── 4archive.py
    │   ├── 4chan.py
    │   ├── 4chanarchives.py
    │   ├── 4plebs.py
    │   ├── 500px.py
    │   ├── 8chan.py
    │   ├── 8kun.py
    │   ├── 8muses.py
    │   ├── 94chan.py
    │   ├── __init__.py
    │   ├── acidimg.py
    │   ├── adultempire.py
    │   ├── agnph.py
    │   ├── ahottie.py
    │   ├── aibooru.py
    │   ├── allgirlbooru.py
    │   ├── allporncomic.py
    │   ├── animereactor.py
    │   ├── ao3.py
    │   ├── arcalive.py
    │   ├── architizer.py
    │   ├── archivedmoe.py
    │   ├── archiveofsins.py
    │   ├── arena.py
    │   ├── artstation.py
    │   ├── aryion.py
    │   ├── atfbooru.py
    │   ├── atfforum.py
    │   ├── audiochan.py
    │   ├── azurlanewiki.py
    │   ├── b4k.py
    │   ├── baraag.py
    │   ├── bbc.py
    │   ├── bbw-chan.py
    │   ├── bcbnsfw.py
    │   ├── behance.py
    │   ├── bellazon.py
    │   ├── bilibili.py
    │   ├── bitly.py
    │   ├── blacktowhite.py
    │   ├── blogger.py
    │   ├── blogspot.py
    │   ├── bluesky.py
    │   ├── booruvar.py
    │   ├── boosty.py
    │   ├── booth.py
    │   ├── bulbapedia.py
    │   ├── bunkr.py
    │   ├── catbox.py
    │   ├── cavemanon.py
    │   ├── celebforum.py
    │   ├── cfake.py
    │   ├── chelseacrew.py
    │   ├── cien.py
    │   ├── civitai.py
    │   ├── comedywildlifephoto.py
    │   ├── comick.py
    │   ├── comicvine.py
    │   ├── coomer.py
    │   ├── cyberdrop.py
    │   ├── cyberfile.py
    │   ├── danbooru.py
    │   ├── dandadan.py
    │   ├── dankefuerslesen.py
    │   ├── derpibooru.py
    │   ├── desktopography.py
    │   ├── desuarchive.py
    │   ├── deviantart.py
    │   ├── directlink.py
    │   ├── discord.py
    │   ├── drawfriends.py
    │   ├── dynastyscans.py
    │   ├── e621.py
    │   ├── e6ai.py
    │   ├── e926.py
    │   ├── endchan.py
    │   ├── eporner.py
    │   ├── erome.py
    │   ├── everia.py
    │   ├── exhentai.py
    │   ├── facebook.py
    │   ├── fanbox.py
    │   ├── fandom.py
    │   ├── fansly.py
    │   ├── fantia.py
    │   ├── fapachi.py
    │   ├── fapello.py
    │   ├── fappic.py
    │   ├── fashionnova.py
    │   ├── fikfap.py
    │   ├── filester.py
    │   ├── fireden.py
    │   ├── fitnakedgirls.py
    │   ├── flickr.py
    │   ├── foriio.py
    │   ├── furaffinity.py
    │   ├── furbooru.py
    │   ├── furry34.py
    │   ├── fuskator.py
    │   ├── gelbooru.py
    │   ├── generic.py
    │   ├── girlsreleased.py
    │   ├── girlswithmuscle.py
    │   ├── gofile.py
    │   ├── gurochan.py
    │   ├── hatenablog.py
    │   ├── hdoujin.py
    │   ├── hentai2read.py
    │   ├── hentaicosplays.py
    │   ├── hentaienvy.py
    │   ├── hentaiera.py
    │   ├── hentaifoundry.py
    │   ├── hentaifox.py
    │   ├── hentaihand.py
    │   ├── hentaihere.py
    │   ├── hentainexus.py
    │   ├── hentairox.py
    │   ├── hentaizap.py
    │   ├── hiperdex.py
    │   ├── hitomi.py
    │   ├── horne.py
    │   ├── hotleak.py
    │   ├── hypnohub.py
    │   ├── idolcomplex.py
    │   ├── illusioncardsbooru.py
    │   ├── imagebam.py
    │   ├── imagechest.py
    │   ├── imagefap.py
    │   ├── imagepond.py
    │   ├── imagetwist.py
    │   ├── imagevenue.py
    │   ├── imgadult.py
    │   ├── imgbb.py
    │   ├── imgbox.py
    │   ├── imgclick.py
    │   ├── imgdrive.py
    │   ├── imglike.py
    │   ├── imgpile.py
    │   ├── imgpv.py
    │   ├── imgspice.py
    │   ├── imgtaxi.py
    │   ├── imgth.py
    │   ├── imgur.py
    │   ├── imgwallet.py
    │   ├── imhentai.py
    │   ├── imxto.py
    │   ├── inkbunny.py
    │   ├── instagram.py
    │   ├── issuu.py
    │   ├── itaku.py
    │   ├── itchio.py
    │   ├── iwara.py
    │   ├── joyreactor.py
    │   ├── jpgfish.py
    │   ├── kabeuchi.py
    │   ├── kaliscan.py
    │   ├── keenspot.py
    │   ├── kemono.py
    │   ├── khinsider.py
    │   ├── kohlchan.py
    │   ├── komikcast.py
    │   ├── konachan.py
    │   ├── koofr.py
    │   ├── leakgallery.py
    │   ├── lensdump.py
    │   ├── lesbianenergy.py
    │   ├── lexica.py
    │   ├── lightbrd.py
    │   ├── lightroom.py
    │   ├── listal.py
    │   ├── livedoor.py
    │   ├── lofter.py
    │   ├── lolibooru.py
    │   ├── loungeunderwear.py
    │   ├── luscious.py
    │   ├── madokami.py
    │   ├── mangadex.py
    │   ├── mangafire.py
    │   ├── mangafox.py
    │   ├── mangafreak.py
    │   ├── mangahere.py
    │   ├── mangakakalot.py
    │   ├── manganato.py
    │   ├── mangapark.py
    │   ├── mangaread.py
    │   ├── mangareader.py
    │   ├── mangataro.py
    │   ├── mangatown.py
    │   ├── mangoxo.py
    │   ├── mariowiki.py
    │   ├── mastodon.py
    │   ├── mastodonsocial.py
    │   ├── mediawiki.py
    │   ├── mgewiki.py
    │   ├── michaelscameras.py
    │   ├── misskeyart.py
    │   ├── misskeydesign.py
    │   ├── misskeyio.py
    │   ├── mixdrop.py
    │   ├── modcloth.py
    │   ├── motherless.py
    │   ├── myhentaigallery.py
    │   ├── myportfolio.py
    │   ├── natomanga.py
    │   ├── naverblog.py
    │   ├── naverchzzk.py
    │   ├── naverwebtoon.py
    │   ├── nekohouse.py
    │   ├── nelomanga.py
    │   ├── newgrounds.py
    │   ├── nhentai.py
    │   ├── nijie.py
    │   ├── nitternet.py
    │   ├── nitterspace.py
    │   ├── nittertiekoetter.py
    │   ├── noop.py
    │   ├── nozomi.py
    │   ├── nozrip.py
    │   ├── nsfwalbum.py
    │   ├── nudostar.py
    │   ├── nudostarforum.py
    │   ├── ohpolly.py
    │   ├── okporn.py
    │   ├── omgmiamiswimwear.py
    │   ├── paheal.py
    │   ├── palanq.py
    │   ├── patreon.py
    │   ├── pawoo.py
    │   ├── pexels.py
    │   ├── philomena.py
    │   ├── pholder.py
    │   ├── photovogue.py
    │   ├── picarto.py
    │   ├── picazor.py
    │   ├── picstate.py
    │   ├── pictoa.py
    │   ├── piczel.py
    │   ├── pidgiwiki.py
    │   ├── pillowfort.py
    │   ├── pinterest.py
    │   ├── pinupgirlclothing.py
    │   ├── pixeldrain.py
    │   ├── pixhost.py
    │   ├── pixiv.py
    │   ├── pixivnovel.py
    │   ├── pixnet.py
    │   ├── plurk.py
    │   ├── poipiku.py
    │   ├── ponybooru.py
    │   ├── poringa.py
    │   ├── pornhub.py
    │   ├── pornpics.py
    │   ├── pornreactor.py
    │   ├── pornstarstube.py
    │   ├── postimg.py
    │   ├── raddle.py
    │   ├── raidlondon.py
    │   ├── rawkuma.py
    │   ├── rbt.py
    │   ├── reactor.py
    │   ├── readcomiconline.py
    │   ├── realbooru.py
    │   ├── recursive.py
    │   ├── reddit.py
    │   ├── redgifs.py
    │   ├── rule34.py
    │   ├── rule34hentai.py
    │   ├── rule34us.py
    │   ├── rule34vault.py
    │   ├── rule34world.py
    │   ├── rule34xyz.py
    │   ├── s3ndpics.py
    │   ├── safebooru.py
    │   ├── sakugabooru.py
    │   ├── sankaku.py
    │   ├── sankakucomplex.py
    │   ├── schalenetwork.py
    │   ├── schan.py
    │   ├── scrolller.py
    │   ├── seiga.py
    │   ├── senmanga.py
    │   ├── sexcom.py
    │   ├── silverpic.py
    │   ├── simpcity.py
    │   ├── simplyhentai.py
    │   ├── sizebooru.py
    │   ├── skeb.py
    │   ├── slickpic.py
    │   ├── slideshare.py
    │   ├── smugloli.py
    │   ├── smugmug.py
    │   ├── snootbooru.py
    │   ├── socialmediagirlsforum.py
    │   ├── soundgasm.py
    │   ├── soybooru.py
    │   ├── speakerdeck.py
    │   ├── steamgriddb.py
    │   ├── sturdychan.py
    │   ├── subscribestar.py
    │   ├── sushiski.py
    │   ├── sxypix.py
    │   ├── tapas.py
    │   ├── tbib.py
    │   ├── tcbscans.py
    │   ├── tco.py
    │   ├── telegraph.py
    │   ├── tenor.py
    │   ├── thebarchive.py
    │   ├── thecollection.py
    │   ├── thecollectionS.py
    │   ├── thefap.py
    │   ├── thehentaiworld.py
    │   ├── tiktok.py
    │   ├── titsintops.py
    │   ├── tmohentai.py
    │   ├── toyhouse.py
    │   ├── tumblr.py
    │   ├── tumblrgallery.py
    │   ├── tungsten.py
    │   ├── turbo.py
    │   ├── turboimagehost.py
    │   ├── twibooru.py
    │   ├── twitter.py
    │   ├── unique-vintage.py
    │   ├── unsplash.py
    │   ├── uploadir.py
    │   ├── urlgalleries.py
    │   ├── vanillarock.py
    │   ├── vidyapics.py
    │   ├── vidyart2.py
    │   ├── vipergirls.py
    │   ├── vipr.py
    │   ├── visuabusters.py
    │   ├── vk.py
    │   ├── vsco.py
    │   ├── wallhaven.py
    │   ├── wallpapercave.py
    │   ├── warosu.py
    │   ├── weasyl.py
    │   ├── webmshare.py
    │   ├── webtoons.py
    │   ├── weebcentral.py
    │   ├── weebdex.py
    │   ├── weibo.py
    │   ├── whyp.py
    │   ├── wikiart.py
    │   ├── wikibooks.py
    │   ├── wikidata.py
    │   ├── wikifeet.py
    │   ├── wikifeetx.py
    │   ├── wikigg.py
    │   ├── wikimediacommons.py
    │   ├── wikinews.py
    │   ├── wikipedia.py
    │   ├── wikiquote.py
    │   ├── wikisource.py
    │   ├── wikispecies.py
    │   ├── wikiversity.py
    │   ├── wikivoyage.py
    │   ├── wiktionary.py
    │   ├── windsorstore.py
    │   ├── xasiat.py
    │   ├── xbooru.py
    │   ├── xcancel.py
    │   ├── xfolio.py
    │   ├── xhamster.py
    │   ├── xvideos.py
    │   ├── yandere.py
    │   ├── yiffverse.py
    │   ├── yourlesbians.py
    │   ├── ytdl.py
    │   └── zerochan.py
    ├── test_cache.py
    ├── test_config.py
    ├── test_cookies.py
    ├── test_downloader.py
    ├── test_dt.py
    ├── test_extractor.py
    ├── test_formatter.py
    ├── test_job.py
    ├── test_oauth.py
    ├── test_output.py
    ├── test_path.py
    ├── test_postprocessor.py
    ├── test_results.py
    ├── test_text.py
    ├── test_util.py
    └── test_ytdl.py
Download .txt
Showing preview only (422K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5840 symbols across 336 files)

FILE: docs/links.js
  function add_header_links (line 4) | function add_header_links()

FILE: gallery_dl/__init__.py
  function main (line 22) | def main():
  class InputManager (line 468) | class InputManager():
    method __init__ (line 470) | def __init__(self):
    method add_url (line 480) | def add_url(self, url):
    method add_list (line 483) | def add_list(self, urls):
    method add_file (line 486) | def add_file(self, path, action=None):
    method progress (line 601) | def progress(self, pformat=True):
    method next (line 608) | def next(self):
    method success (line 611) | def success(self):
    method error (line 615) | def error(self):
    method _rewrite (line 628) | def _rewrite(self):
    method _action_comment (line 643) | def _action_comment(self, lines, indicies):
    method _action_delete (line 647) | def _action_delete(self, lines, indicies):
    method __iter__ (line 651) | def __iter__(self):
    method __next__ (line 655) | def __next__(self):
  class ExtendedUrl (line 677) | class ExtendedUrl():
    method __init__ (line 681) | def __init__(self, url, gconf, lconf):
    method __str__ (line 686) | def __str__(self):

FILE: gallery_dl/actions.py
  function parse (line 18) | def parse(spec):
  function parse_logging (line 36) | def parse_logging(actionspec):
  function parse_signals (line 94) | def parse_signals(actionspec):
  class LoggerAdapter (line 109) | class LoggerAdapter():
    method __init__ (line 111) | def __init__(self, logger, job):
    method log (line 121) | def log(self, level, msg, *args, **kwargs):
    method traceback (line 149) | def traceback(self, exc):
  function _level_to_int (line 155) | def _level_to_int(level):
  function _chain_actions (line 162) | def _chain_actions(actions):
  function signals_handler (line 169) | def signals_handler(action, args={}):
  function action_print (line 177) | def action_print(opts):
  function action_status (line 183) | def action_status(opts):
  function action_level (line 200) | def action_level(opts):
  function action_exec (line 208) | def action_exec(opts):
  function action_wait (line 214) | def action_wait(opts):
  function action_flag (line 227) | def action_flag(opts):
  function action_keyword (line 245) | def action_keyword(opts):
  function action_raise (line 259) | def action_raise(opts):
  function action_abort (line 277) | def action_abort(opts):
  function action_terminate (line 283) | def action_terminate(opts):
  function action_restart (line 289) | def action_restart(opts):
  function action_exit (line 295) | def action_exit(opts):

FILE: gallery_dl/aes.py
  function aes_cbc_decrypt_bytes (line 27) | def aes_cbc_decrypt_bytes(data, key, iv):
  function aes_gcm_decrypt_and_verify_bytes (line 32) | def aes_gcm_decrypt_and_verify_bytes(data, key, tag, nonce):
  function aes_cbc_decrypt_bytes (line 37) | def aes_cbc_decrypt_bytes(data, key, iv):
  function aes_gcm_decrypt_and_verify_bytes (line 45) | def aes_gcm_decrypt_and_verify_bytes(data, key, tag, nonce):
  function intlist_to_bytes (line 58) | def intlist_to_bytes(xs):
  function unpad_pkcs7 (line 64) | def unpad_pkcs7(data):
  function aes_ecb_encrypt (line 71) | def aes_ecb_encrypt(data, key, iv=None):
  function aes_ecb_decrypt (line 92) | def aes_ecb_decrypt(data, key, iv=None):
  function aes_ctr_decrypt (line 113) | def aes_ctr_decrypt(data, key, iv):
  function aes_ctr_encrypt (line 125) | def aes_ctr_encrypt(data, key, iv):
  function aes_cbc_decrypt (line 151) | def aes_cbc_decrypt(data, key, iv):
  function aes_cbc_encrypt (line 177) | def aes_cbc_encrypt(data, key, iv):
  function aes_gcm_decrypt_and_verify (line 205) | def aes_gcm_decrypt_and_verify(data, key, tag, nonce):
  function aes_encrypt (line 255) | def aes_encrypt(data, expanded_key):
  function aes_decrypt (line 277) | def aes_decrypt(data, expanded_key):
  function aes_decrypt_text (line 299) | def aes_decrypt_text(data, password, key_size_bytes):
  function key_expansion (line 491) | def key_expansion(data):
  function iter_vector (line 527) | def iter_vector(iv):
  function sub_bytes (line 533) | def sub_bytes(data):
  function sub_bytes_inv (line 537) | def sub_bytes_inv(data):
  function rotate (line 541) | def rotate(data):
  function key_schedule_core (line 545) | def key_schedule_core(data, rcon_iteration):
  function xor (line 553) | def xor(data1, data2):
  function iter_mix_columns (line 557) | def iter_mix_columns(data, matrix):
  function shift_rows (line 572) | def shift_rows(data):
  function shift_rows_inv (line 580) | def shift_rows_inv(data):
  function shift_block (line 588) | def shift_block(data):
  function inc (line 602) | def inc(data):
  function block_product (line 613) | def block_product(block_x, block_y):
  function ghash (line 637) | def ghash(subkey, data):

FILE: gallery_dl/archive.py
  function connect (line 18) | def connect(path, prefix, format,
  function sanitize (line 43) | def sanitize(name):
  class DownloadArchive (line 47) | class DownloadArchive():
    method __init__ (line 50) | def __init__(self, path, keygen, table=None, pragma=None, cache_key=No...
    method add (line 91) | def add(self, kwdict):
    method check (line 96) | def check(self, kwdict):
    method finalize (line 102) | def finalize(self):
  class DownloadArchiveMemory (line 106) | class DownloadArchiveMemory(DownloadArchive):
    method __init__ (line 108) | def __init__(self, path, keygen, table=None, pragma=None, cache_key=No...
    method add (line 113) | def add(self, kwdict):
    method check (line 118) | def check(self, kwdict):
    method finalize (line 125) | def finalize(self):
  class DownloadArchivePostgresql (line 144) | class DownloadArchivePostgresql():
    method __init__ (line 147) | def __init__(self, uri, keygen, table=None, pragma=None, cache_key=None):
    method add (line 178) | def add(self, kwdict):
    method check (line 188) | def check(self, kwdict):
    method finalize (line 199) | def finalize(self):
  class DownloadArchivePostgresqlMemory (line 203) | class DownloadArchivePostgresqlMemory(DownloadArchivePostgresql):
    method __init__ (line 205) | def __init__(self, path, keygen, table=None, pragma=None, cache_key=No...
    method add (line 210) | def add(self, kwdict):
    method check (line 215) | def check(self, kwdict):
    method finalize (line 228) | def finalize(self):

FILE: gallery_dl/cache.py
  function database (line 20) | def database():
  function path (line 46) | def path():
  function error (line 66) | def error(ret=1):
  function get (line 71) | def get(module):
  function clear (line 99) | def clear(module):

FILE: gallery_dl/config.py
  function default (line 33) | def default(type=None):
  function initialize (line 79) | def initialize():
  function open_extern (line 119) | def open_extern():
  function status (line 158) | def status():
  function remap_categories (line 189) | def remap_categories():
  function load (line 217) | def load(files=None, strict=False, loads=None, conf=_config):
  function clear (line 250) | def clear():
  function get (line 255) | def get(path, key, default=None, conf=_config):
  function interpolate (line 265) | def interpolate(path, key, default=None, conf=_config):
  function interpolate_common (line 279) | def interpolate_common(common, paths, key, default=None, conf=_config):
  function accumulate (line 311) | def accumulate(path, key, conf=_config):
  function set (line 334) | def set(path, key, value, conf=_config):
  function setdefault (line 344) | def setdefault(path, key, value, conf=_config):
  function unset (line 354) | def unset(path, key, conf=_config):
  class apply (line 364) | class apply():
    method __init__ (line 367) | def __init__(self, kvlist):
    method __enter__ (line 371) | def __enter__(self):
    method __exit__ (line 376) | def __exit__(self, exc_type, exc_value, traceback):

FILE: gallery_dl/cookies.py
  function load_cookies (line 39) | def load_cookies(browser_specification):
  function load_cookies_firefox (line 52) | def load_cookies_firefox(browser_name, profile=None,
  function load_cookies_webkit (line 98) | def load_cookies_webkit(browser_name, profile=None, domain=None):
  function load_cookies_chromium (line 127) | def load_cookies_chromium(browser_name, profile=None,
  function _firefox_cookies_database (line 216) | def _firefox_cookies_database(browser_name, profile=None, container=None):
  function _firefox_browser_directory (line 269) | def _firefox_browser_directory(browser_name):
  function _safari_cookies_database (line 311) | def _safari_cookies_database():
  function _orion_cookies_database (line 322) | def _orion_cookies_database():
  function _webkit_parse_cookies_header (line 328) | def _webkit_parse_cookies_header(data):
  function _webkit_parse_cookies_page (line 337) | def _webkit_parse_cookies_page(data, cookies, domain=None):
  function _webkit_parse_cookies_record (line 356) | def _webkit_parse_cookies_record(data, cookies, host=None):
  function _chromium_cookies_database (line 411) | def _chromium_cookies_database(profile, config):
  function _chromium_browser_settings (line 431) | def _chromium_browser_settings(browser_name):
  function _chromium_cookie_decryptor (line 499) | def _chromium_cookie_decryptor(
  class ChromiumCookieDecryptor (line 512) | class ChromiumCookieDecryptor:
    method decrypt (line 542) | def decrypt(self, encrypted_value):
    method cookie_counts (line 546) | def cookie_counts(self):
  class LinuxChromiumCookieDecryptor (line 550) | class LinuxChromiumCookieDecryptor(ChromiumCookieDecryptor):
    method __init__ (line 551) | def __init__(self, browser_keyring_name, keyring=None, meta_version=0):
    method derive_key (line 559) | def derive_key(self, password):
    method cookie_counts (line 567) | def cookie_counts(self):
    method decrypt (line 570) | def decrypt(self, encrypted_value):
  class MacChromiumCookieDecryptor (line 596) | class MacChromiumCookieDecryptor(ChromiumCookieDecryptor):
    method __init__ (line 597) | def __init__(self, browser_keyring_name, meta_version=0):
    method derive_key (line 603) | def derive_key(self, password):
    method cookie_counts (line 611) | def cookie_counts(self):
    method decrypt (line 614) | def decrypt(self, encrypted_value):
  class WindowsChromiumCookieDecryptor (line 634) | class WindowsChromiumCookieDecryptor(ChromiumCookieDecryptor):
    method __init__ (line 635) | def __init__(self, browser_root, meta_version=0):
    method cookie_counts (line 641) | def cookie_counts(self):
    method decrypt (line 644) | def decrypt(self, encrypted_value):
  function _choose_linux_keyring (line 683) | def _choose_linux_keyring():
  function _get_kwallet_network_wallet (line 698) | def _get_kwallet_network_wallet():
  function _get_kwallet_password (line 730) | def _get_kwallet_password(browser_keyring_name):
  function _get_gnome_keyring_password (line 778) | def _get_gnome_keyring_password(browser_keyring_name):
  function _get_linux_keyring_password (line 804) | def _get_linux_keyring_password(browser_keyring_name, keyring):
  function _get_mac_keyring_password (line 827) | def _get_mac_keyring_password(browser_keyring_name):
  function _get_windows_v10_key (line 847) | def _get_windows_v10_key(browser_root):
  class ParserError (line 871) | class ParserError(Exception):
  class DataParser (line 875) | class DataParser:
    method __init__ (line 876) | def __init__(self, data):
    method read_bytes (line 880) | def read_bytes(self, num_bytes):
    method expect_bytes (line 890) | def expect_bytes(self, expected_value, message):
    method read_uint (line 896) | def read_uint(self, big_endian=False):
    method read_double (line 900) | def read_double(self, big_endian=False):
    method read_cstring (line 904) | def read_cstring(self):
    method skip (line 913) | def skip(self, num_bytes, description="unknown"):
    method skip_to (line 920) | def skip_to(self, offset, description="unknown"):
    method skip_to_end (line 923) | def skip_to_end(self, description="unknown"):
  class DatabaseConnection (line 927) | class DatabaseConnection():
    method __init__ (line 929) | def __init__(self, path):
    method __enter__ (line 934) | def __enter__(self):
    method __exit__ (line 961) | def __exit__(self, exc_type, exc_value, traceback):
  function Popen_communicate (line 967) | def Popen_communicate(*args):
  function _get_linux_desktop_environment (line 1002) | def _get_linux_desktop_environment(env):
  function _mac_absolute_time_to_posix (line 1045) | def _mac_absolute_time_to_posix(timestamp):
  function pbkdf2_sha1 (line 1050) | def pbkdf2_sha1(password, salt, iterations, key_length):
  function _decrypt_aes_cbc (line 1054) | def _decrypt_aes_cbc(ciphertext, key, offset=0,
  function _decrypt_aes_gcm (line 1066) | def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, offset=0):
  function _decrypt_windows_dpapi (line 1080) | def _decrypt_windows_dpapi(ciphertext):
  function _find_most_recently_used_file (line 1113) | def _find_most_recently_used_file(roots, filename):
  function _is_path (line 1136) | def _is_path(value):
  function _parse_browser_specification (line 1140) | def _parse_browser_specification(
  function _log_warning (line 1157) | def _log_warning(msg, *args):
  function _log_error (line 1163) | def _log_error(msg, *args):

FILE: gallery_dl/downloader/__init__.py
  function find (line 18) | def find(scheme):

FILE: gallery_dl/downloader/common.py
  class DownloaderBase (line 16) | class DownloaderBase():
    method __init__ (line 20) | def __init__(self, job):
    method config (line 50) | def config(self, key, default=None):
    method config_opts (line 54) | def config_opts(self, key, default=None, conf=_config):
    method _extractor_config (line 62) | def _extractor_config(self, extractor):
    method _extractor_opts (line 73) | def _extractor_opts(self, category, subcategory):
    method _report_config_error (line 97) | def _report_config_error(self, subcategory, value):
    method download (line 101) | def download(self, url, pathfmt):

FILE: gallery_dl/downloader/http.py
  class HttpDownloader (line 20) | class HttpDownloader(DownloaderBase):
    method __init__ (line 23) | def __init__(self, job):
    method download (line 99) | def download(self, url, pathfmt):
    method _download_impl (line 112) | def _download_impl(self, url, pathfmt):
    method _release_conn_impl (line 384) | def _release_conn_impl(self, response):
    method receive (line 396) | def receive(self, fp, content, bytes_total, bytes_start):
    method _receive_rate (line 403) | def _receive_rate(self, fp, content, bytes_total, bytes_start):
    method _find_extension (line 432) | def _find_extension(self, response):
    method _adjust_extension (line 449) | def _adjust_extension(self, pathfmt, file_header):
  function _signature_html (line 524) | def _signature_html(s):

FILE: gallery_dl/downloader/text.py
  class TextDownloader (line 14) | class TextDownloader(DownloaderBase):
    method download (line 17) | def download(self, url, pathfmt):

FILE: gallery_dl/downloader/ytdl.py
  class YoutubeDLDownloader (line 19) | class YoutubeDLDownloader(DownloaderBase):
    method __init__ (line 22) | def __init__(self, job):
    method download (line 41) | def download(self, url, pathfmt):
    method _extract_url (line 162) | def _extract_url(self, ytdl, url):
    method _extract_manifest (line 165) | def _extract_manifest(self, ytdl, url, kwdict):
    method _download_video (line 247) | def _download_video(self, ytdl_instance, pathfmt, info_dict):
    method _download_playlist (line 302) | def _download_playlist(self, ytdl_instance, pathfmt, info_dict):
    method _prepare (line 324) | def _prepare(self, ytdl_instance):
    method _progress_hook (line 335) | def _progress_hook(self, info):
    method _set_outtmpl (line 346) | def _set_outtmpl(self, ytdl_instance, outtmpl):
  class LoggerAdapter (line 358) | class LoggerAdapter():
    method __init__ (line 361) | def __init__(self, obj, ytdl_instance):
    method debug (line 365) | def debug(self, msg):
    method warning (line 371) | def warning(self, msg):
    method error (line 377) | def error(self, msg):
  function compatible_formats (line 383) | def compatible_formats(formats):

FILE: gallery_dl/dt.py
  class NullDatetime (line 16) | class NullDatetime(datetime):
    method __bool__ (line 18) | def __bool__(self):
    method __str__ (line 21) | def __str__(self):
    method __format__ (line 24) | def __format__(self, format_spec):
  function normalize (line 33) | def normalize(dt):
  function convert (line 43) | def convert(value):
  function parse (line 54) | def parse(dt_string, format):
  function parse_iso (line 64) | def parse_iso(dt_string):
  function parse_iso (line 82) | def parse_iso(dt_string):
  function from_ts (line 89) | def from_ts(ts=None):
  function parse_ts (line 97) | def parse_ts(ts, default=NONE):
  function to_ts (line 105) | def to_ts(dt):
  function to_ts_string (line 110) | def to_ts_string(dt):

FILE: gallery_dl/exception.py
  class GalleryDLException (line 38) | class GalleryDLException(Exception):
    method __init__ (line 44) | def __init__(self, message=None, fmt=True):
  class ExtractionError (line 58) | class ExtractionError(GalleryDLException):
  class HttpError (line 63) | class HttpError(ExtractionError):
    method __init__ (line 67) | def __init__(self, message="", response=None):
  class ChallengeError (line 79) | class ChallengeError(HttpError):
    method __init__ (line 82) | def __init__(self, challenge, response):
  class AuthenticationError (line 89) | class AuthenticationError(ExtractionError):
  class AuthorizationError (line 95) | class AuthorizationError(ExtractionError):
  class AuthRequired (line 101) | class AuthRequired(AuthorizationError):
    method __init__ (line 104) | def __init__(self, auth=None, resource="resource", message=None):
  class NotFoundError (line 121) | class NotFoundError(ExtractionError):
  class InputError (line 130) | class InputError(GalleryDLException):
  class FormatError (line 135) | class FormatError(InputError):
  class FilenameFormatError (line 139) | class FilenameFormatError(FormatError):
  class DirectoryFormatError (line 144) | class DirectoryFormatError(FormatError):
  class FilterError (line 149) | class FilterError(InputError):
  class InputFileError (line 154) | class InputFileError(InputError):
  class NoExtractorError (line 158) | class NoExtractorError(InputError):
  class ControlException (line 165) | class ControlException(GalleryDLException):
  class StopExtraction (line 169) | class StopExtraction(ControlException):
    method __init__ (line 172) | def __init__(self, target=None):
  class AbortExtraction (line 189) | class AbortExtraction(ExtractionError, ControlException):
  class TerminateExtraction (line 193) | class TerminateExtraction(ControlException):
  class RestartExtraction (line 197) | class RestartExtraction(ControlException):
  class StopDownload (line 201) | class StopDownload(ControlException):

FILE: gallery_dl/extractor/2ch.py
  class _2chThreadExtractor (line 15) | class _2chThreadExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 31) | def items(self):
  class _2chBoardExtractor (line 64) | class _2chBoardExtractor(Extractor):
    method __init__ (line 72) | def __init__(self, match):
    method items (line 77) | def items(self):

FILE: gallery_dl/extractor/2chan.py
  class _2chanThreadExtractor (line 15) | class _2chanThreadExtractor(Extractor):
    method __init__ (line 25) | def __init__(self, match):
    method items (line 29) | def items(self):
    method metadata (line 43) | def metadata(self, page):
    method posts (line 55) | def posts(self, page):
    method parse (line 64) | def parse(self, post):
    method _extract_post (line 77) | def _extract_post(self, post):
    method _extract_image (line 87) | def _extract_image(self, post, data):

FILE: gallery_dl/extractor/2chen.py
  class _2chenExtractor (line 15) | class _2chenExtractor(BaseExtractor):
  class _2chenThreadExtractor (line 31) | class _2chenThreadExtractor(_2chenExtractor):
    method items (line 40) | def items(self):
    method posts (line 64) | def posts(self, page):
    method parse (line 69) | def parse(self, post):
  class _2chenBoardExtractor (line 84) | class _2chenBoardExtractor(_2chenExtractor):
    method items (line 90) | def items(self):

FILE: gallery_dl/extractor/35photo.py
  class _35photoExtractor (line 15) | class _35photoExtractor(Extractor):
    method items (line 22) | def items(self):
    method metadata (line 35) | def metadata(self):
    method photos (line 39) | def photos(self):
    method _pagination (line 42) | def _pagination(self, params, extra_ids=None):
    method _photo_data (line 56) | def _photo_data(self, photo_id):
    method _photo_ids (line 86) | def _photo_ids(self, page):
  class _35photoUserExtractor (line 98) | class _35photoUserExtractor(_35photoExtractor):
    method __init__ (line 105) | def __init__(self, match):
    method metadata (line 110) | def metadata(self):
    method photos (line 119) | def photos(self):
  class _35photoTagExtractor (line 126) | class _35photoTagExtractor(_35photoExtractor):
    method __init__ (line 134) | def __init__(self, match):
    method metadata (line 138) | def metadata(self):
    method photos (line 141) | def photos(self):
  class _35photoGenreExtractor (line 159) | class _35photoGenreExtractor(_35photoExtractor):
    method __init__ (line 167) | def __init__(self, match):
    method metadata (line 172) | def metadata(self):
    method photos (line 182) | def photos(self):
  class _35photoImageExtractor (line 193) | class _35photoImageExtractor(_35photoExtractor):
    method __init__ (line 199) | def __init__(self, match):
    method photos (line 203) | def photos(self):

FILE: gallery_dl/extractor/3dbooru.py
  class _3dbooruBase (line 14) | class _3dbooruBase():
    method _init (line 20) | def _init(self):
  class _3dbooruTagExtractor (line 26) | class _3dbooruTagExtractor(_3dbooruBase, moebooru.MoebooruTagExtractor):
    method posts (line 32) | def posts(self):
  class _3dbooruPoolExtractor (line 37) | class _3dbooruPoolExtractor(_3dbooruBase, moebooru.MoebooruPoolExtractor):
    method posts (line 42) | def posts(self):
  class _3dbooruPostExtractor (line 47) | class _3dbooruPostExtractor(_3dbooruBase, moebooru.MoebooruPostExtractor):
    method posts (line 52) | def posts(self):
  class _3dbooruPopularExtractor (line 57) | class _3dbooruPopularExtractor(

FILE: gallery_dl/extractor/4archive.py
  class _4archiveThreadExtractor (line 13) | class _4archiveThreadExtractor(Extractor):
    method __init__ (line 25) | def __init__(self, match):
    method items (line 29) | def items(self):
    method metadata (line 46) | def metadata(self, page):
    method posts (line 54) | def posts(self, page):
    method parse (line 60) | def parse(self, post):
  class _4archiveBoardExtractor (line 84) | class _4archiveBoardExtractor(Extractor):
    method __init__ (line 92) | def __init__(self, match):
    method items (line 97) | def items(self):

FILE: gallery_dl/extractor/4chan.py
  class _4chanThreadExtractor (line 15) | class _4chanThreadExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 30) | def items(self):
  function _detect_null_byte (line 53) | def _detect_null_byte(signature):
  class _4chanBoardExtractor (line 64) | class _4chanBoardExtractor(Extractor):
    method __init__ (line 71) | def __init__(self, match):
    method items (line 75) | def items(self):

FILE: gallery_dl/extractor/4chanarchives.py
  class _4chanarchivesThreadExtractor (line 15) | class _4chanarchivesThreadExtractor(Extractor):
    method __init__ (line 27) | def __init__(self, match):
    method items (line 31) | def items(self):
    method metadata (line 47) | def metadata(self, page):
    method posts (line 55) | def posts(self, page):
    method parse (line 60) | def parse(self, html):
    method _extract_post (line 68) | def _extract_post(self, html):
    method _extract_file (line 78) | def _extract_file(self, html, post):
  class _4chanarchivesBoardExtractor (line 87) | class _4chanarchivesBoardExtractor(Extractor):
    method __init__ (line 95) | def __init__(self, match):
    method items (line 99) | def items(self):

FILE: gallery_dl/extractor/500px.py
  class _500pxExtractor (line 17) | class _500pxExtractor(Extractor):
    method items (line 26) | def items(self):
    method metadata (line 37) | def metadata(self):
    method photos (line 40) | def photos(self):
    method _extend (line 43) | def _extend(self, edges):
    method _request_api (line 69) | def _request_api(self, url, params):
    method _request_graphql (line 77) | def _request_graphql(self, opname, variables):
  class _500pxUserExtractor (line 92) | class _500pxUserExtractor(_500pxExtractor):
    method __init__ (line 98) | def __init__(self, match):
    method photos (line 102) | def photos(self):
  class _500pxGalleryExtractor (line 120) | class _500pxGalleryExtractor(_500pxExtractor):
    method __init__ (line 128) | def __init__(self, match):
    method metadata (line 133) | def metadata(self):
    method photos (line 157) | def photos(self):
  class _500pxFavoriteExtractor (line 178) | class _500pxFavoriteExtractor(_500pxExtractor):
    method photos (line 184) | def photos(self):
  class _500pxImageExtractor (line 202) | class _500pxImageExtractor(_500pxExtractor):
    method __init__ (line 208) | def __init__(self, match):
    method photos (line 212) | def photos(self):

FILE: gallery_dl/extractor/8chan.py
  class _8chanExtractor (line 18) | class _8chanExtractor(Extractor):
    method __init__ (line 23) | def __init__(self, match):
    method cookies_tos_name (line 27) | def cookies_tos_name(self):
    method cookies_prepare (line 47) | def cookies_prepare(self):
  class _8chanThreadExtractor (line 69) | class _8chanThreadExtractor(_8chanExtractor):
    method items (line 79) | def items(self):
  class _8chanBoardExtractor (line 113) | class _8chanBoardExtractor(_8chanExtractor):
    method items (line 119) | def items(self):
  function _validate (line 142) | def _validate(response):

FILE: gallery_dl/extractor/8muses.py
  class _8musesAlbumExtractor (line 15) | class _8musesAlbumExtractor(Extractor):
    method __init__ (line 27) | def __init__(self, match):
    method items (line 32) | def items(self):
    method _make_album (line 77) | def _make_album(self, album):
    method _unobfuscate (line 91) | def _unobfuscate(self, data):

FILE: gallery_dl/extractor/__init__.py
  function find (line 276) | def find(url):
  function add (line 284) | def add(cls):
  function add_module (line 292) | def add_module(module):
  function extractors (line 302) | def extractors():
  function _list_classes (line 314) | def _list_classes():
  function _modules_internal (line 324) | def _modules_internal():
  function _modules_path (line 330) | def _modules_path(path, files):
  function _get_classes (line 342) | def _get_classes(module):

FILE: gallery_dl/extractor/adultempire.py
  class AdultempireGalleryExtractor (line 15) | class AdultempireGalleryExtractor(GalleryExtractor):
    method __init__ (line 23) | def __init__(self, match):
    method _init (line 27) | def _init(self):
    method metadata (line 30) | def metadata(self, page):
    method images (line 42) | def images(self, page):

FILE: gallery_dl/extractor/agnph.py
  class AgnphExtractor (line 18) | class AgnphExtractor(booru.BooruExtractor):
    method _init (line 32) | def _init(self):
    method _prepare (line 35) | def _prepare(self, post):
    method _xml_to_dict (line 40) | def _xml_to_dict(self, xml):
    method _pagination (line 43) | def _pagination(self, url, params):
    method _html (line 62) | def _html(self, post):
    method _tags (line 66) | def _tags(self, post, page):
  class AgnphTagExtractor (line 80) | class AgnphTagExtractor(AgnphExtractor):
    method __init__ (line 87) | def __init__(self, match):
    method metadata (line 91) | def metadata(self):
    method posts (line 94) | def posts(self):
  class AgnphPostExtractor (line 99) | class AgnphPostExtractor(AgnphExtractor):
    method posts (line 105) | def posts(self):

FILE: gallery_dl/extractor/ahottie.py
  class AhottieExtractor (line 17) | class AhottieExtractor(Extractor):
    method items (line 22) | def items(self):
    method _pagination (line 26) | def _pagination(self, url, params):
  class AhottieGalleryExtractor (line 48) | class AhottieGalleryExtractor(GalleryExtractor, AhottieExtractor):
    method metadata (line 55) | def metadata(self, page):
    method images (line 64) | def images(self, page):
    method _validate (line 82) | def _validate(self, response):
  class AhottieTagExtractor (line 90) | class AhottieTagExtractor(AhottieExtractor):
    method albums (line 95) | def albums(self):
  class AhottieSearchExtractor (line 101) | class AhottieSearchExtractor(AhottieExtractor):
    method albums (line 106) | def albums(self):

FILE: gallery_dl/extractor/allporncomic.py
  class AllporncomicBase (line 17) | class AllporncomicBase():
    method _manga_info (line 22) | def _manga_info(self, slug, page=None):
  class AllporncomicChapterExtractor (line 64) | class AllporncomicChapterExtractor(AllporncomicBase, ChapterExtractor):
    method __init__ (line 73) | def __init__(self, match):
    method metadata (line 77) | def metadata(self, page):
    method images (line 94) | def images(self, page):
  class AllporncomicMangaExtractor (line 101) | class AllporncomicMangaExtractor(AllporncomicBase, MangaExtractor):
    method __init__ (line 107) | def __init__(self, match):
    method chapters (line 111) | def chapters(self, page):
  class AllporncomicTagExtractor (line 128) | class AllporncomicTagExtractor(AllporncomicBase, Extractor):
    method items (line 136) | def items(self):

FILE: gallery_dl/extractor/ao3.py
  class Ao3Extractor (line 18) | class Ao3Extractor(Extractor):
    method items (line 27) | def items(self):
    method items_list (line 36) | def items_list(self, type, needle, part=True):
    method works (line 56) | def works(self):
    method login (line 59) | def login(self):
    method _login_impl (line 69) | def _login_impl(self, username, password):
    method _pagination (line 102) | def _pagination(self, path, needle='<li id="work_'):
  class Ao3WorkExtractor (line 115) | class Ao3WorkExtractor(Ao3Extractor):
    method _init (line 124) | def _init(self):
    method items (line 137) | def items(self):
  class Ao3SeriesExtractor (line 233) | class Ao3SeriesExtractor(Ao3Extractor):
  class Ao3TagExtractor (line 240) | class Ao3TagExtractor(Ao3Extractor):
  class Ao3SearchExtractor (line 247) | class Ao3SearchExtractor(Ao3Extractor):
  class Ao3UserExtractor (line 254) | class Ao3UserExtractor(Dispatch, Ao3Extractor):
    method items (line 260) | def items(self):
  class Ao3UserWorksExtractor (line 269) | class Ao3UserWorksExtractor(Ao3Extractor):
  class Ao3UserSeriesExtractor (line 277) | class Ao3UserSeriesExtractor(Ao3Extractor):
    method items (line 284) | def items(self):
    method series (line 293) | def series(self):
  class Ao3UserBookmarkExtractor (line 297) | class Ao3UserBookmarkExtractor(Ao3Extractor):
    method items (line 304) | def items(self):
  class Ao3SubscriptionsExtractor (line 308) | class Ao3SubscriptionsExtractor(Ao3Extractor):
    method items (line 314) | def items(self):

FILE: gallery_dl/extractor/arcalive.py
  class ArcaliveExtractor (line 15) | class ArcaliveExtractor(Extractor):
    method _init (line 22) | def _init(self):
    method items (line 25) | def items(self):
  class ArcalivePostExtractor (line 33) | class ArcalivePostExtractor(ArcaliveExtractor):
    method items (line 42) | def items(self):
    method _extract_files (line 63) | def _extract_files(self, post):
  class ArcaliveBoardExtractor (line 115) | class ArcaliveBoardExtractor(ArcaliveExtractor):
    method articles (line 121) | def articles(self):
  class ArcaliveUserExtractor (line 127) | class ArcaliveUserExtractor(ArcaliveExtractor):
    method articles (line 133) | def articles(self):
  class ArcaliveAPI (line 140) | class ArcaliveAPI():
    method __init__ (line 142) | def __init__(self, extractor):
    method board (line 149) | def board(self, board_slug, params):
    method post (line 153) | def post(self, post_id):
    method user_posts (line 157) | def user_posts(self, username, params):
    method _call (line 163) | def _call(self, endpoint, params=None):
    method _pagination (line 178) | def _pagination(self, endpoint, params, key):

FILE: gallery_dl/extractor/architizer.py
  class ArchitizerProjectExtractor (line 15) | class ArchitizerProjectExtractor(GalleryExtractor):
    method __init__ (line 26) | def __init__(self, match):
    method metadata (line 30) | def metadata(self, page):
    method images (line 53) | def images(self, page):
  class ArchitizerFirmExtractor (line 61) | class ArchitizerFirmExtractor(Extractor):
    method __init__ (line 69) | def __init__(self, match):
    method items (line 73) | def items(self):

FILE: gallery_dl/extractor/arena.py
  class ArenaChannelExtractor (line 14) | class ArenaChannelExtractor(GalleryExtractor):
    method metadata (line 26) | def metadata(self, page):
    method images (line 43) | def images(self, page):

FILE: gallery_dl/extractor/artstation.py
  class ArtstationExtractor (line 16) | class ArtstationExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method _init (line 30) | def _init(self):
    method items (line 38) | def items(self):
    method _extract_embed (line 72) | def _extract_embed(self, asset):
    method _image_fallback (line 105) | def _image_fallback(self, lhs, rhs):
    method metadata (line 111) | def metadata(self):
    method projects (line 115) | def projects(self):
    method get_project_assets (line 118) | def get_project_assets(self, project_id):
    method get_user_info (line 145) | def get_user_info(self, username):
    method _pagination (line 151) | def _pagination(self, url, params=None, json=None):
    method _init_csrf_token (line 179) | def _init_csrf_token(self):
    method _no_cache (line 188) | def _no_cache(self, url):
  class ArtstationUserExtractor (line 205) | class ArtstationUserExtractor(ArtstationExtractor):
    method projects (line 213) | def projects(self):
  class ArtstationAlbumExtractor (line 219) | class ArtstationAlbumExtractor(ArtstationExtractor):
    method __init__ (line 230) | def __init__(self, match):
    method metadata (line 234) | def metadata(self):
    method projects (line 249) | def projects(self):
  class ArtstationLikesExtractor (line 255) | class ArtstationLikesExtractor(ArtstationExtractor):
    method projects (line 264) | def projects(self):
  class ArtstationCollectionExtractor (line 269) | class ArtstationCollectionExtractor(ArtstationExtractor):
    method __init__ (line 279) | def __init__(self, match):
    method metadata (line 283) | def metadata(self):
    method projects (line 290) | def projects(self):
  class ArtstationCollectionsExtractor (line 296) | class ArtstationCollectionsExtractor(ArtstationExtractor):
    method items (line 303) | def items(self):
  class ArtstationChallengeExtractor (line 314) | class ArtstationChallengeExtractor(ArtstationExtractor):
    method __init__ (line 326) | def __init__(self, match):
    method items (line 331) | def items(self):
    method _id_from_url (line 358) | def _id_from_url(self, url):
  class ArtstationSearchExtractor (line 364) | class ArtstationSearchExtractor(ArtstationExtractor):
    method __init__ (line 373) | def __init__(self, match):
    method metadata (line 380) | def metadata(self):
    method projects (line 387) | def projects(self):
  class ArtstationArtworkExtractor (line 411) | class ArtstationArtworkExtractor(ArtstationExtractor):
    method __init__ (line 420) | def __init__(self, match):
    method metadata (line 424) | def metadata(self):
    method projects (line 427) | def projects(self):
  class ArtstationImageExtractor (line 432) | class ArtstationImageExtractor(ArtstationExtractor):
    method __init__ (line 440) | def __init__(self, match):
    method metadata (line 445) | def metadata(self):
    method projects (line 454) | def projects(self):
    method get_project_assets (line 457) | def get_project_assets(self, project_id):
  class ArtstationFollowingExtractor (line 461) | class ArtstationFollowingExtractor(ArtstationExtractor):
    method items (line 468) | def items(self):

FILE: gallery_dl/extractor/aryion.py
  class AryionExtractor (line 18) | class AryionExtractor(Extractor):
    method __init__ (line 28) | def __init__(self, match):
    method login (line 33) | def login(self):
    method _login_impl (line 43) | def _login_impl(self, username, password):
    method items (line 58) | def items(self):
    method posts (line 74) | def posts(self):
    method metadata (line 77) | def metadata(self):
    method _pagination_params (line 80) | def _pagination_params(self, url, params=None, needle=None, quote="'"):
    method _pagination_next (line 101) | def _pagination_next(self, url):
    method _pagination_folders (line 111) | def _pagination_folders(self, url, folder=None, seen=None):
    method _parse_post (line 147) | def _parse_post(self, post_id):
  class AryionGalleryExtractor (line 210) | class AryionGalleryExtractor(AryionExtractor):
    method _init (line 217) | def _init(self):
    method skip_files (line 221) | def skip_files(self, num):
    method posts (line 227) | def posts(self):
  class AryionFavoriteExtractor (line 236) | class AryionFavoriteExtractor(AryionExtractor):
    method _init (line 244) | def _init(self):
    method posts (line 247) | def posts(self):
  class AryionWatchExtractor (line 252) | class AryionWatchExtractor(AryionExtractor):
    method posts (line 259) | def posts(self):
  class AryionTagExtractor (line 269) | class AryionTagExtractor(AryionExtractor):
    method _init (line 277) | def _init(self):
    method metadata (line 281) | def metadata(self):
    method posts (line 284) | def posts(self):
  class AryionSearchExtractor (line 289) | class AryionSearchExtractor(AryionExtractor):
    method metadata (line 299) | def metadata(self):
    method posts (line 308) | def posts(self):
  class AryionPostExtractor (line 313) | class AryionPostExtractor(AryionExtractor):
    method posts (line 319) | def posts(self):

FILE: gallery_dl/extractor/audiochan.py
  class AudiochanExtractor (line 17) | class AudiochanExtractor(Extractor):
    method _init (line 26) | def _init(self):
    method items (line 44) | def items(self):
    method request_api (line 72) | def request_api(self, endpoint, params=None):
    method _pagination (line 76) | def _pagination(self, endpoint, params, key=None):
    method _extract_description (line 91) | def _extract_description(self, description, texts=None):
  class AudiochanAudioExtractor (line 104) | class AudiochanAudioExtractor(AudiochanExtractor):
    method posts (line 109) | def posts(self):
  class AudiochanUserExtractor (line 115) | class AudiochanUserExtractor(AudiochanExtractor):
    method posts (line 120) | def posts(self):
  class AudiochanCollectionExtractor (line 131) | class AudiochanCollectionExtractor(AudiochanExtractor):
    method posts (line 136) | def posts(self):
  class AudiochanSearchExtractor (line 147) | class AudiochanSearchExtractor(AudiochanExtractor):
    method posts (line 152) | def posts(self):

FILE: gallery_dl/extractor/bbc.py
  class BbcGalleryExtractor (line 17) | class BbcGalleryExtractor(GalleryExtractor):
    method metadata (line 27) | def metadata(self, page):
    method images (line 42) | def images(self, page):
    method _fallback_urls (line 62) | def _fallback_urls(self, src, max_width):
  class BbcProgrammeExtractor (line 69) | class BbcProgrammeExtractor(Extractor):
    method items (line 77) | def items(self):

FILE: gallery_dl/extractor/behance.py
  class BehanceExtractor (line 15) | class BehanceExtractor(Extractor):
    method _init (line 23) | def _init(self):
    method items (line 29) | def items(self):
    method galleries (line 34) | def galleries(self):
    method _request_graphql (line 37) | def _request_graphql(self, endpoint, variables):
    method _update (line 52) | def _update(self, data):
  class BehanceGalleryExtractor (line 84) | class BehanceGalleryExtractor(BehanceExtractor):
    method __init__ (line 93) | def __init__(self, match):
    method _init (line 97) | def _init(self):
    method items (line 107) | def items(self):
    method get_gallery_data (line 119) | def get_gallery_data(self):
    method get_images (line 137) | def get_images(self, data):
  class BehanceUserExtractor (line 227) | class BehanceUserExtractor(BehanceExtractor):
    method __init__ (line 234) | def __init__(self, match):
    method galleries (line 238) | def galleries(self):
  class BehanceCollectionExtractor (line 255) | class BehanceCollectionExtractor(BehanceExtractor):
    method __init__ (line 262) | def __init__(self, match):
    method galleries (line 266) | def galleries(self):

FILE: gallery_dl/extractor/bellazon.py
  class BellazonExtractor (line 17) | class BellazonExtractor(Extractor):
    method items (line 26) | def items(self):
    method _pagination (line 96) | def _pagination(self, base, pnum=None):
    method _pagination_reverse (line 117) | def _pagination_reverse(self, base, pnum=None):
    method _parse_thread (line 139) | def _parse_thread(self, page):
    method _parse_post (line 175) | def _parse_post(self, html):
    method _remove_quotes (line 198) | def _remove_quotes(self, content):
  class BellazonPostExtractor (line 208) | class BellazonPostExtractor(BellazonExtractor):
    method posts (line 214) | def posts(self):
  class BellazonThreadExtractor (line 227) | class BellazonThreadExtractor(BellazonExtractor):
    method posts (line 232) | def posts(self):
  class BellazonForumExtractor (line 252) | class BellazonForumExtractor(BellazonExtractor):
    method items (line 257) | def items(self):

FILE: gallery_dl/extractor/bilibili.py
  class BilibiliExtractor (line 13) | class BilibiliExtractor(Extractor):
    method _init (line 19) | def _init(self):
    method items (line 22) | def items(self):
    method articles (line 28) | def articles(self):
  class BilibiliArticleExtractor (line 32) | class BilibiliArticleExtractor(BilibiliExtractor):
    method items (line 42) | def items(self):
  class BilibiliUserArticlesExtractor (line 94) | class BilibiliUserArticlesExtractor(BilibiliExtractor):
    method articles (line 101) | def articles(self):
  class BilibiliUserArticlesFavoriteExtractor (line 105) | class BilibiliUserArticlesFavoriteExtractor(BilibiliExtractor):
    method articles (line 112) | def articles(self):
  class BilibiliAPI (line 120) | class BilibiliAPI():
    method __init__ (line 121) | def __init__(self, extractor):
    method _call (line 125) | def _call(self, endpoint, params):
    method user_articles (line 135) | def user_articles(self, user_id):
    method article (line 149) | def article(self, article_id):
    method user_favlist (line 163) | def user_favlist(self):
    method login_user_id (line 176) | def login_user_id(self):

FILE: gallery_dl/extractor/blogger.py
  function original (line 15) | def original(url):
  class BloggerExtractor (line 21) | class BloggerExtractor(BaseExtractor):
    method _init (line 29) | def _init(self):
    method items (line 39) | def items(self):
    method posts (line 81) | def posts(self, blog):
    method metadata (line 84) | def metadata(self):
    method _extract_videos (line 87) | def _extract_videos(self, files, post):
  class BloggerPostExtractor (line 117) | class BloggerPostExtractor(BloggerExtractor):
    method posts (line 123) | def posts(self, blog):
  class BloggerBlogExtractor (line 127) | class BloggerBlogExtractor(BloggerExtractor):
    method posts (line 133) | def posts(self, blog):
  class BloggerSearchExtractor (line 137) | class BloggerSearchExtractor(BloggerExtractor):
    method metadata (line 143) | def metadata(self):
    method posts (line 147) | def posts(self, blog):
  class BloggerLabelExtractor (line 151) | class BloggerLabelExtractor(BloggerExtractor):
    method metadata (line 157) | def metadata(self):
    method posts (line 161) | def posts(self, blog):
  class BloggerAPI (line 165) | class BloggerAPI():
    method __init__ (line 172) | def __init__(self, extractor):
    method blog_by_url (line 176) | def blog_by_url(self, url):
    method blog_posts (line 179) | def blog_posts(self, blog_id, label=None):
    method blog_search (line 184) | def blog_search(self, blog_id, query):
    method post_by_path (line 189) | def post_by_path(self, blog_id, path):
    method _call (line 193) | def _call(self, endpoint, params, notfound=None):
    method _pagination (line 199) | def _pagination(self, endpoint, params):

FILE: gallery_dl/extractor/bluesky.py
  class BlueskyExtractor (line 19) | class BlueskyExtractor(Extractor):
    method _init (line 27) | def _init(self):
    method items (line 42) | def items(self):
    method posts (line 86) | def posts(self):
    method _posts_records (line 89) | def _posts_records(self, actor, collection):
    method _pid (line 105) | def _pid(self, post):
    method _instance (line 108) | def _instance(self, handle):
    method _prepare (line 111) | def _prepare(self, post):
    method _extract_files (line 138) | def _extract_files(self, post):
    method _extract_media (line 163) | def _extract_media(self, media, key):
    method _make_post (line 185) | def _make_post(self, actor, kind):
  class BlueskyUserExtractor (line 216) | class BlueskyUserExtractor(Dispatch, BlueskyExtractor):
    method items (line 220) | def items(self):
  class BlueskyPostsExtractor (line 236) | class BlueskyPostsExtractor(BlueskyExtractor):
    method posts (line 241) | def posts(self):
  class BlueskyRepliesExtractor (line 246) | class BlueskyRepliesExtractor(BlueskyExtractor):
    method posts (line 251) | def posts(self):
  class BlueskyMediaExtractor (line 256) | class BlueskyMediaExtractor(BlueskyExtractor):
    method posts (line 261) | def posts(self):
  class BlueskyVideoExtractor (line 266) | class BlueskyVideoExtractor(BlueskyExtractor):
    method posts (line 271) | def posts(self):
  class BlueskyLikesExtractor (line 276) | class BlueskyLikesExtractor(BlueskyExtractor):
    method posts (line 281) | def posts(self):
  class BlueskyFeedExtractor (line 287) | class BlueskyFeedExtractor(BlueskyExtractor):
    method posts (line 292) | def posts(self):
  class BlueskyListExtractor (line 297) | class BlueskyListExtractor(BlueskyExtractor):
    method posts (line 302) | def posts(self):
  class BlueskyFollowingExtractor (line 307) | class BlueskyFollowingExtractor(BlueskyExtractor):
    method items (line 312) | def items(self):
  class BlueskyPostExtractor (line 319) | class BlueskyPostExtractor(BlueskyExtractor):
    method posts (line 324) | def posts(self):
  class BlueskyInfoExtractor (line 329) | class BlueskyInfoExtractor(BlueskyExtractor):
    method items (line 334) | def items(self):
  class BlueskyAvatarExtractor (line 340) | class BlueskyAvatarExtractor(BlueskyExtractor):
    method posts (line 346) | def posts(self):
  class BlueskyBackgroundExtractor (line 350) | class BlueskyBackgroundExtractor(BlueskyExtractor):
    method posts (line 356) | def posts(self):
  class BlueskySearchExtractor (line 360) | class BlueskySearchExtractor(BlueskyExtractor):
    method posts (line 365) | def posts(self):
  class BlueskyHashtagExtractor (line 370) | class BlueskyHashtagExtractor(BlueskyExtractor):
    method posts (line 375) | def posts(self):
  class BlueskyBookmarkExtractor (line 380) | class BlueskyBookmarkExtractor(BlueskyExtractor):
    method posts (line 385) | def posts(self):
  class BlueskyAPI (line 389) | class BlueskyAPI():
    method __init__ (line 395) | def __init__(self, extractor):
    method get_actor_likes (line 409) | def get_actor_likes(self, actor):
    method get_author_feed (line 417) | def get_author_feed(self, actor, filter="posts_and_author_threads"):
    method get_bookmarks (line 426) | def get_bookmarks(self):
    method get_feed (line 430) | def get_feed(self, actor, feed):
    method get_follows (line 437) | def get_follows(self, actor):
    method get_list_feed (line 445) | def get_list_feed(self, actor, list):
    method get_post_thread (line 451) | def get_post_thread(self, actor, post_id):
    method get_post_thread_uri (line 457) | def get_post_thread_uri(self, uri, depth="0"):
    method get_profile (line 478) | def get_profile(self, did):
    method list_records (line 483) | def list_records(self, actor, collection):
    method resolve_handle (line 495) | def resolve_handle(self, handle):
    method service_endpoint (line 500) | def service_endpoint(self, did):
    method search_posts (line 515) | def search_posts(self, query, sort=None):
    method _did_from_actor (line 524) | def _did_from_actor(self, actor, user_did=False):
    method authenticate (line 539) | def authenticate(self):
    method _authenticate_impl (line 543) | def _authenticate_impl(self, username):
    method _call (line 573) | def _call(self, endpoint, params, root=None):
    method _pagination (line 600) | def _pagination(self, endpoint, params,
  function _refresh_token_cache (line 615) | def _refresh_token_cache(username):

FILE: gallery_dl/extractor/booru.py
  class BooruExtractor (line 16) | class BooruExtractor(BaseExtractor):
    method items (line 23) | def items(self):
    method skip_files (line 63) | def skip_files(self, num):
    method login (line 68) | def login(self):
    method metadata (line 71) | def metadata(self):
    method posts (line 75) | def posts(self):
    method _file_url_list (line 81) | def _file_url_list(self, post):
    method _prepare (line 86) | def _prepare(self, post):
    method _html (line 89) | def _html(self, post):
    method _tags (line 92) | def _tags(self, post, page):
    method _notes (line 95) | def _notes(self, post, page):

FILE: gallery_dl/extractor/boosty.py
  class BoostyExtractor (line 16) | class BoostyExtractor(Extractor):
    method _init (line 27) | def _init(self):
    method items (line 51) | def items(self):
    method posts (line 76) | def posts(self):
    method _extract_files (line 79) | def _extract_files(self, post):
    method _update_url (line 147) | def _update_url(self, post, block):
  class BoostyUserExtractor (line 163) | class BoostyUserExtractor(BoostyExtractor):
    method posts (line 169) | def posts(self):
  class BoostyMediaExtractor (line 177) | class BoostyMediaExtractor(BoostyExtractor):
    method posts (line 185) | def posts(self):
  class BoostyFeedExtractor (line 192) | class BoostyFeedExtractor(BoostyExtractor):
    method posts (line 198) | def posts(self):
  class BoostyPostExtractor (line 203) | class BoostyPostExtractor(BoostyExtractor):
    method posts (line 209) | def posts(self):
  class BoostyFollowingExtractor (line 216) | class BoostyFollowingExtractor(BoostyExtractor):
    method items (line 222) | def items(self):
  class BoostyDirectMessagesExtractor (line 229) | class BoostyDirectMessagesExtractor(BoostyExtractor):
    method items (line 237) | def items(self):
  class BoostyAPI (line 274) | class BoostyAPI():
    method __init__ (line 278) | def __init__(self, extractor, access_token=None):
    method blog_posts (line 296) | def blog_posts(self, username, params):
    method blog_media_album (line 306) | def blog_media_album(self, username, type="all", params=()):
    method _transform_media_posts (line 316) | def _transform_media_posts(self, data):
    method post (line 326) | def post(self, username, post_id):
    method feed_posts (line 330) | def feed_posts(self, params=None):
    method user (line 343) | def user(self, username):
    method user_subscriptions (line 349) | def user_subscriptions(self, params=None):
    method _merge_params (line 358) | def _merge_params(self, params_web, params_api):
    method _call (line 371) | def _call(self, endpoint, params=None):
    method _pagination (line 393) | def _pagination(self, endpoint, params, transform=None, key=None):
    method _pagination_users (line 416) | def _pagination_users(self, endpoint, params):
    method dialog (line 427) | def dialog(self, dialog_id):
    method dialog_messages (line 431) | def dialog_messages(self, dialog_id, limit=300, offset=None):
    method _pagination_dialog (line 440) | def _pagination_dialog(self, endpoint, params):

FILE: gallery_dl/extractor/booth.py
  class BoothExtractor (line 15) | class BoothExtractor(Extractor):
    method _init (line 24) | def _init(self):
    method _pagination (line 27) | def _pagination(self, url, json=False):
  class BoothItemExtractor (line 45) | class BoothItemExtractor(BoothExtractor):
    method items (line 51) | def items(self):
    method _extract_files (line 94) | def _extract_files(self, item, page):
  class BoothShopExtractor (line 110) | class BoothShopExtractor(BoothExtractor):
    method __init__ (line 115) | def __init__(self, match):
    method items (line 119) | def items(self):
  class BoothCategoryExtractor (line 125) | class BoothCategoryExtractor(BoothExtractor):
    method items (line 130) | def items(self):
  function _fallback (line 136) | def _fallback(url):

FILE: gallery_dl/extractor/bunkr.py
  class BunkrAlbumExtractor (line 59) | class BunkrAlbumExtractor(LolisafeAlbumExtractor):
    method __init__ (line 69) | def __init__(self, match):
    method _init (line 75) | def _init(self):
    method skip_files (line 87) | def skip_files(self, num):
    method request (line 91) | def request(self, url, **kwargs):
    method fetch_album (line 135) | def fetch_album(self, album_id):
    method _extract_files (line 153) | def _extract_files(self, items):
    method _extract_file (line 184) | def _extract_file(self, data_id):
    method _validate (line 203) | def _validate(self, response):
    method _split (line 210) | def _split(self, url):
  class BunkrMediaExtractor (line 215) | class BunkrMediaExtractor(BunkrAlbumExtractor):
    method fetch_album (line 222) | def fetch_album(self, album_id):
    method _album_info (line 244) | def _album_info(self, album_id):

FILE: gallery_dl/extractor/catbox.py
  class CatboxAlbumExtractor (line 15) | class CatboxAlbumExtractor(GalleryExtractor):
    method metadata (line 26) | def metadata(self, page):
    method images (line 36) | def images(self, page):
  class CatboxFileExtractor (line 44) | class CatboxFileExtractor(Extractor):
    method items (line 52) | def items(self):

FILE: gallery_dl/extractor/cfake.py
  class CfakeExtractor (line 15) | class CfakeExtractor(Extractor):
    method items (line 23) | def items(self):
    method _extract_images (line 58) | def _extract_images(self, page):
    method _check_pagination (line 92) | def _check_pagination(self, page):
  class CfakeCelebrityExtractor (line 120) | class CfakeCelebrityExtractor(CfakeExtractor):
  class CfakeCategoryExtractor (line 128) | class CfakeCategoryExtractor(CfakeExtractor):
  class CfakeCreatedExtractor (line 136) | class CfakeCreatedExtractor(CfakeExtractor):
  class CfakeCountryExtractor (line 144) | class CfakeCountryExtractor(CfakeExtractor):

FILE: gallery_dl/extractor/chevereto.py
  class CheveretoExtractor (line 15) | class CheveretoExtractor(BaseExtractor):
    method _init (line 22) | def _init(self):
    method _pagination (line 25) | def _pagination(self, url, callback=None):
    method _password_submit (line 49) | def _password_submit(self, url, form):
  class CheveretoFileExtractor (line 97) | class CheveretoFileExtractor(CheveretoExtractor):
    method items (line 103) | def items(self):
  class CheveretoAlbumExtractor (line 175) | class CheveretoAlbumExtractor(CheveretoExtractor):
    method items (line 181) | def items(self):
    method _extract_metadata_album (line 195) | def _extract_metadata_album(self, page):
  class CheveretoCategoryExtractor (line 209) | class CheveretoCategoryExtractor(CheveretoExtractor):
    method items (line 215) | def items(self):
  class CheveretoUserExtractor (line 221) | class CheveretoUserExtractor(CheveretoExtractor):
    method items (line 227) | def items(self):

FILE: gallery_dl/extractor/cien.py
  class CienExtractor (line 17) | class CienExtractor(Extractor):
    method __init__ (line 22) | def __init__(self, match):
    method _init (line 26) | def _init(self):
    method _pagination_articles (line 29) | def _pagination_articles(self, url, params):
  class CienArticleExtractor (line 46) | class CienArticleExtractor(CienExtractor):
    method items (line 54) | def items(self):
    method _extract_files (line 80) | def _extract_files(self, page):
    method _extract_files_image (line 104) | def _extract_files_image(self, page, files):
    method _extract_files_video (line 117) | def _extract_files_video(self, page, files):
    method _extract_files_download (line 129) | def _extract_files_download(self, page, files):
    method _extract_files_gallery (line 139) | def _extract_files_gallery(self, page, files):
  class CienCreatorExtractor (line 161) | class CienCreatorExtractor(CienExtractor):
    method items (line 166) | def items(self):
  class CienRecentExtractor (line 173) | class CienRecentExtractor(CienExtractor):
    method items (line 178) | def items(self):
  class CienFollowingExtractor (line 184) | class CienFollowingExtractor(CienExtractor):
    method items (line 189) | def items(self):

FILE: gallery_dl/extractor/civitai.py
  class CivitaiExtractor (line 20) | class CivitaiExtractor(Extractor):
    method _init (line 29) | def _init(self):
    method items (line 72) | def items(self):
    method models (line 137) | def models(self):
    method posts (line 140) | def posts(self):
    method images (line 143) | def images(self):
    method _url (line 146) | def _url(self, image):
    method _image_results (line 168) | def _image_results(self, images):
    method _image_reactions (line 189) | def _image_reactions(self):
    method _require_auth (line 199) | def _require_auth(self):
    method _parse_query (line 206) | def _parse_query(self, value):
    method _extract_meta_generation (line 211) | def _extract_meta_generation(self, image):
    method _extract_meta_post (line 217) | def _extract_meta_post(self, image):
    method _extract_meta_tags (line 225) | def _extract_meta_tags(self, image):
    method _extract_meta_version (line 231) | def _extract_meta_version(self, item, is_post=True):
    method _extract_version_id (line 240) | def _extract_version_id(self, item, is_post=True):
  class CivitaiModelExtractor (line 256) | class CivitaiModelExtractor(CivitaiExtractor):
    method items (line 264) | def items(self):
    method _extract_files (line 300) | def _extract_files(self, model, version, user):
    method _extract_files_model (line 319) | def _extract_files_model(self, model, version, user):
    method _extract_files_image (line 343) | def _extract_files_image(self, model, version, user):
    method _extract_files_gallery (line 359) | def _extract_files_gallery(self, model, version, user):
    method _validate_file_model (line 363) | def _validate_file_model(self, response):
  class CivitaiImageExtractor (line 376) | class CivitaiImageExtractor(CivitaiExtractor):
    method images (line 381) | def images(self):
  class CivitaiCollectionExtractor (line 385) | class CivitaiCollectionExtractor(CivitaiExtractor):
    method images (line 392) | def images(self):
  class CivitaiPostExtractor (line 407) | class CivitaiPostExtractor(CivitaiExtractor):
    method posts (line 414) | def posts(self):
  class CivitaiTagExtractor (line 418) | class CivitaiTagExtractor(CivitaiExtractor):
    method models (line 423) | def models(self):
  class CivitaiSearchModelsExtractor (line 428) | class CivitaiSearchModelsExtractor(CivitaiExtractor):
    method models (line 433) | def models(self):
  class CivitaiSearchImagesExtractor (line 439) | class CivitaiSearchImagesExtractor(CivitaiExtractor):
    method images (line 444) | def images(self):
  class CivitaiModelsExtractor (line 450) | class CivitaiModelsExtractor(CivitaiExtractor):
    method models (line 455) | def models(self):
  class CivitaiImagesExtractor (line 460) | class CivitaiImagesExtractor(CivitaiExtractor):
    method images (line 465) | def images(self):
  class CivitaiVideosExtractor (line 471) | class CivitaiVideosExtractor(CivitaiExtractor):
    method images (line 476) | def images(self):
  class CivitaiPostsExtractor (line 482) | class CivitaiPostsExtractor(CivitaiExtractor):
    method posts (line 487) | def posts(self):
  class CivitaiUserExtractor (line 492) | class CivitaiUserExtractor(Dispatch, CivitaiExtractor):
    method items (line 496) | def items(self):
  class CivitaiUserModelsExtractor (line 507) | class CivitaiUserModelsExtractor(CivitaiExtractor):
    method models (line 512) | def models(self):
  class CivitaiUserPostsExtractor (line 519) | class CivitaiUserPostsExtractor(CivitaiExtractor):
    method posts (line 526) | def posts(self):
  class CivitaiUserImagesExtractor (line 533) | class CivitaiUserImagesExtractor(CivitaiExtractor):
    method __init__ (line 538) | def __init__(self, match):
    method images (line 549) | def images(self):
  class CivitaiUserVideosExtractor (line 553) | class CivitaiUserVideosExtractor(CivitaiExtractor):
    method __init__ (line 559) | def __init__(self, match):
  class CivitaiUserCollectionsExtractor (line 573) | class CivitaiUserCollectionsExtractor(CivitaiExtractor):
    method items (line 578) | def items(self):
  class CivitaiGeneratedExtractor (line 589) | class CivitaiGeneratedExtractor(CivitaiExtractor):
    method items (line 597) | def items(self):
  class CivitaiRestAPI (line 610) | class CivitaiRestAPI():
    method __init__ (line 616) | def __init__(self, extractor):
    method image (line 632) | def image(self, image_id):
    method images (line 637) | def images(self, params):
    method images_gallery (line 643) | def images_gallery(self, model, version, user):
    method model (line 649) | def model(self, model_id):
    method model_version (line 653) | def model_version(self, model_version_id):
    method models (line 657) | def models(self, params):
    method models_tag (line 660) | def models_tag(self, tag):
    method _call (line 663) | def _call(self, endpoint, params=None):
    method _pagination (line 673) | def _pagination(self, endpoint, params):
  class CivitaiTrpcAPI (line 685) | class CivitaiTrpcAPI():
    method __init__ (line 688) | def __init__(self, extractor):
    method image (line 709) | def image(self, image_id):
    method image_generationdata (line 714) | def image_generationdata(self, image_id):
    method images (line 719) | def images(self, params, defaults=True):
    method images_gallery (line 736) | def images_gallery(self, model, version, user):
    method images_post (line 751) | def images_post(self, post_id):
    method model (line 758) | def model(self, model_id):
    method model_version (line 763) | def model_version(self, model_version_id):
    method models (line 768) | def models(self, params, defaults=True):
    method models_tag (line 787) | def models_tag(self, tag):
    method post (line 790) | def post(self, post_id):
    method posts (line 795) | def posts(self, params, defaults=True):
    method collection (line 813) | def collection(self, collection_id):
    method collections (line 818) | def collections(self, params, defaults=True):
    method tag_getvotabletags (line 830) | def tag_getvotabletags(self, image_id):
    method user (line 835) | def user(self, username):
    method orchestrator_queryGeneratedImages (line 840) | def orchestrator_queryGeneratedImages(self):
    method _call (line 849) | def _call(self, endpoint, params, meta=None):
    method _pagination (line 863) | def _pagination(self, endpoint, params, meta=None, user=False):
    method _merge_params (line 886) | def _merge_params(self, params_user, params_default):
    method _type_params (line 891) | def _type_params(self, params):
    method _param_period (line 916) | def _param_period(self):
    method _param_sort (line 921) | def _param_sort(self):
  function _bool (line 932) | def _bool(value):
  class CivitaiSearchAPI (line 936) | class CivitaiSearchAPI():
    method __init__ (line 938) | def __init__(self, extractor):
    method search (line 961) | def search(self, query, type, facets, nsfw=31):
    method search_models (line 978) | def search_models(self, query, type=None, nsfw=31):
    method search_images (line 991) | def search_images(self, query, type=None, nsfw=31):
    method _call (line 1004) | def _call(self, endpoint, query):
    method _pagination (line 1013) | def _pagination(self, endpoint, query):
    method _generate_filter (line 1027) | def _generate_filter(self, level):

FILE: gallery_dl/extractor/comedywildlifephoto.py
  class ComedywildlifephotoGalleryExtractor (line 15) | class ComedywildlifephotoGalleryExtractor(GalleryExtractor):
    method metadata (line 26) | def metadata(self, page):
    method images (line 36) | def images(self, page):

FILE: gallery_dl/extractor/comick.py
  class ComickBase (line 17) | class ComickBase():
    method _manga_info (line 22) | def _manga_info(self, slug):
    method _chapter_info (line 76) | def _chapter_info(self, manga, chstr):
  class ComickCoversExtractor (line 84) | class ComickCoversExtractor(ComickBase, GalleryExtractor):
    method metadata (line 93) | def metadata(self, page):
    method images (line 98) | def images(self, page):
  class ComickChapterExtractor (line 120) | class ComickChapterExtractor(ComickBase, ChapterExtractor):
    method metadata (line 127) | def metadata(self, page):
    method images (line 182) | def images(self, page):
  class ComickMangaExtractor (line 201) | class ComickMangaExtractor(ComickBase, MangaExtractor):
    method items (line 206) | def items(self):
    method chapters (line 235) | def chapters(self, manga):

FILE: gallery_dl/extractor/comicvine.py
  class ComicvineTagExtractor (line 16) | class ComicvineTagExtractor(BooruExtractor):
    method __init__ (line 30) | def __init__(self, match):
    method metadata (line 34) | def metadata(self):
    method posts (line 37) | def posts(self):
    method skip_files (line 56) | def skip_files(self, num):
    method _prepare (line 62) | def _prepare(self, post):

FILE: gallery_dl/extractor/common.py
  class Extractor (line 30) | class Extractor():
    method __init__ (line 60) | def __init__(self, match):
    method __str__ (line 81) | def __str__(self):
    method from_url (line 85) | def from_url(cls, url):
    method __iter__ (line 91) | def __iter__(self):
    method initialize (line 95) | def initialize(self):
    method items (line 109) | def items(self):
    method config (line 113) | def config(self, key, default=None):
    method config2 (line 116) | def config2(self, key, key2, default=None, sentinel=util.SENTINEL):
    method config_accumulate (line 122) | def config_accumulate(self, key):
    method config_instance (line 125) | def config_instance(self, key, default=None):
    method _config_shared (line 128) | def _config_shared(self, key, default=None):
    method _config_shared_accumulate (line 132) | def _config_shared_accumulate(self, key):
    method request (line 146) | def request(self, url, method="GET", session=None, fatal=True,
    method request_location (line 266) | def request_location(self, url, **kwargs):
    method request_json (line 272) | def request_json(self, url, **kwargs):
    method request_xml (line 287) | def request_xml(self, url, xmlns=True, **kwargs):
    method wait (line 311) | def wait(self, seconds=None, until=None, adjust=1.0,
    method sleep (line 345) | def sleep(self, seconds, reason):
    method utils (line 350) | def utils(self, module="", name=None):
    method cache (line 361) | def cache(self, func, *args, _key=0, _exp=0, _mem=True):
    method cache_update (line 403) | def cache_update(self, func, key=None, value=None, _exp=0, _mem=False):
    method input (line 428) | def input(self, prompt, echo=True):
    method _check_input_allowed (line 439) | def _check_input_allowed(self, prompt=""):
    method _get_auth_info (line 447) | def _get_auth_info(self, password=None):
    method _init (line 468) | def _init(self):
    method _init_options (line 471) | def _init_options(self):
    method _init_session (line 511) | def _init_session(self):
    method _init_cookies (line 655) | def _init_cookies(self):
    method cookies_load (line 666) | def cookies_load(self, cookies_source):
    method cookies_store (line 716) | def cookies_store(self):
    method cookies_update (line 738) | def cookies_update(self, cookies, domain=""):
    method cookies_update_dict (line 752) | def cookies_update_dict(self, cookiedict, domain):
    method cookies_check (line 758) | def cookies_check(self, cookies_names, domain=None, subdomains=False):
    method _extract_jsonld (line 799) | def _extract_jsonld(self, page):
    method _extract_nextdata (line 806) | def _extract_nextdata(self, page):
    method _get_date_min_max (line 813) | def _get_date_min_max(self, dmin=None, dmax=None):
    method _dump_response (line 831) | def _dump_response(self, response, history=True):
  class GalleryExtractor (line 870) | class GalleryExtractor(Extractor):
    method __init__ (line 878) | def __init__(self, match, url=None):
    method items (line 886) | def items(self):
    method login (line 939) | def login(self):
    method metadata (line 942) | def metadata(self, page):
    method images (line 945) | def images(self, page):
    method assets (line 948) | def assets(self, page):
  class ChapterExtractor (line 955) | class ChapterExtractor(GalleryExtractor):
  class MangaExtractor (line 968) | class MangaExtractor(Extractor):
    method __init__ (line 975) | def __init__(self, match, url=None):
    method items (line 986) | def items(self):
    method login (line 1002) | def login(self):
    method chapters (line 1005) | def chapters(self, page):
  class Dispatch (line 1009) | class Dispatch():
    method __iter__ (line 1015) | def __iter__(self):
    method initialize (line 1018) | def initialize(self):
    method _dispatch_extractors (line 1021) | def _dispatch_extractors(self, extractor_data, default=(), alt=None):
  class AsynchronousMixin (line 1049) | class AsynchronousMixin():
    method __iter__ (line 1052) | def __iter__(self):
    method async_items (line 1074) | def async_items(self, messages):
  class BaseExtractor (line 1083) | class BaseExtractor(Extractor):
    method __init__ (line 1086) | def __init__(self, match):
    method _init_category (line 1091) | def _init_category(self, match):
    method update (line 1105) | def update(cls, instances):
  class RequestsAdapter (line 1127) | class RequestsAdapter(HTTPAdapter):
    method __init__ (line 1129) | def __init__(self, ssl_context=None, source_address=None):
    method init_poolmanager (line 1134) | def init_poolmanager(self, *args, **kwargs):
    method proxy_manager_for (line 1139) | def proxy_manager_for(self, *args, **kwargs):
  function _build_requests_adapter (line 1145) | def _build_requests_adapter(
  function _browser_useragent (line 1178) | def _browser_useragent(browser):

FILE: gallery_dl/extractor/cyberdrop.py
  class CyberdropAlbumExtractor (line 16) | class CyberdropAlbumExtractor(lolisafe.LolisafeAlbumExtractor):
    method items (line 24) | def items(self):
    method fetch_album (line 34) | def fetch_album(self, album_id):
    method _extract_files (line 60) | def _extract_files(self, file_ids):
  class CyberdropMediaExtractor (line 75) | class CyberdropMediaExtractor(CyberdropAlbumExtractor):
    method fetch_album (line 82) | def fetch_album(self, album_id):

FILE: gallery_dl/extractor/cyberfile.py
  class CyberfileExtractor (line 17) | class CyberfileExtractor(Extractor):
    method request_api (line 22) | def request_api(self, endpoint, data):
  class CyberfileFolderExtractor (line 49) | class CyberfileFolderExtractor(CyberfileExtractor):
    method items (line 54) | def items(self):
  class CyberfileSharedExtractor (line 98) | class CyberfileSharedExtractor(CyberfileExtractor):
    method items (line 103) | def items(self):
  class CyberfileFileExtractor (line 129) | class CyberfileFileExtractor(CyberfileExtractor):
    method items (line 135) | def items(self):

FILE: gallery_dl/extractor/danbooru.py
  class DanbooruExtractor (line 15) | class DanbooruExtractor(BaseExtractor):
    method _init (line 25) | def _init(self):
    method skip_files (line 41) | def skip_files(self, num):
    method items (line 48) | def items(self):
    method items_artists (line 112) | def items_artists(self):
    method metadata (line 118) | def metadata(self):
    method posts (line 121) | def posts(self):
    method _pagination (line 124) | def _pagination(self, endpoint, params, prefix=None):
    method _ugoira_frames (line 165) | def _ugoira_frames(self, post):
    method _collection_posts (line 181) | def _collection_posts(self, cid, ctype):
    method _collection_metadata (line 204) | def _collection_metadata(self, cid, ctype, cname=None):
    method _collection_enumerate (line 211) | def _collection_enumerate(self, posts):
    method _collection_enumerate_reverse (line 217) | def _collection_enumerate_reverse(self, posts):
  class DanbooruTagExtractor (line 248) | class DanbooruTagExtractor(DanbooruExtractor):
    method metadata (line 256) | def metadata(self):
    method posts (line 260) | def posts(self):
  class DanbooruRandomExtractor (line 278) | class DanbooruRandomExtractor(DanbooruTagExtractor):
    method metadata (line 284) | def metadata(self):
    method posts (line 289) | def posts(self):
  class DanbooruPoolExtractor (line 295) | class DanbooruPoolExtractor(DanbooruExtractor):
    method metadata (line 304) | def metadata(self):
    method posts (line 308) | def posts(self):
  class DanbooruFavgroupExtractor (line 312) | class DanbooruFavgroupExtractor(DanbooruExtractor):
    method metadata (line 322) | def metadata(self):
    method posts (line 326) | def posts(self):
  class DanbooruPostExtractor (line 330) | class DanbooruPostExtractor(DanbooruExtractor):
    method posts (line 337) | def posts(self):
  class DanbooruMediaassetExtractor (line 346) | class DanbooruMediaassetExtractor(DanbooruExtractor):
    method posts (line 354) | def posts(self):
  class DanbooruPopularExtractor (line 372) | class DanbooruPopularExtractor(DanbooruExtractor):
    method metadata (line 380) | def metadata(self):
    method posts (line 393) | def posts(self):
  class DanbooruArtistExtractor (line 397) | class DanbooruArtistExtractor(DanbooruExtractor):
    method artists (line 405) | def artists(self):
  class DanbooruArtistSearchExtractor (line 410) | class DanbooruArtistSearchExtractor(DanbooruExtractor):
    method artists (line 418) | def artists(self):

FILE: gallery_dl/extractor/dandadan.py
  class DandadanBase (line 17) | class DandadanBase():
  class DandadanChapterExtractor (line 23) | class DandadanChapterExtractor(DandadanBase, ChapterExtractor):
    method metadata (line 28) | def metadata(self, page):
    method images (line 38) | def images(self, page):
  class DandadanMangaExtractor (line 54) | class DandadanMangaExtractor(DandadanBase, MangaExtractor):
    method chapters (line 60) | def chapters(self, page):

FILE: gallery_dl/extractor/dankefuerslesen.py
  class DankefuerslesenBase (line 18) | class DankefuerslesenBase():
    method _manga_info (line 23) | def _manga_info(self, slug):
  class DankefuerslesenChapterExtractor (line 28) | class DankefuerslesenChapterExtractor(DankefuerslesenBase, ChapterExtrac...
    method _init (line 33) | def _init(self):
    method metadata (line 39) | def metadata(self, page):
    method images (line 75) | def images(self, page):
    method assets (line 82) | def assets(self, page):
  class DankefuerslesenMangaExtractor (line 93) | class DankefuerslesenMangaExtractor(DankefuerslesenBase, MangaExtractor):
    method chapters (line 100) | def chapters(self, page):

FILE: gallery_dl/extractor/desktopography.py
  class DesktopographyExtractor (line 15) | class DesktopographyExtractor(Extractor):
  class DesktopographySiteExtractor (line 22) | class DesktopographySiteExtractor(DesktopographyExtractor):
    method items (line 28) | def items(self):
  class DesktopographyExhibitionExtractor (line 41) | class DesktopographyExhibitionExtractor(DesktopographyExtractor):
    method __init__ (line 47) | def __init__(self, match):
    method items (line 51) | def items(self):
  class DesktopographyEntryExtractor (line 70) | class DesktopographyEntryExtractor(DesktopographyExtractor):
    method __init__ (line 76) | def __init__(self, match):
    method items (line 80) | def items(self):

FILE: gallery_dl/extractor/deviantart.py
  class DeviantartExtractor (line 26) | class DeviantartExtractor(Extractor):
    method __init__ (line 36) | def __init__(self, match):
    method _init (line 41) | def _init(self):
    method request (line 95) | def request(self, url, **kwargs):
    method skip_files (line 105) | def skip_files(self, num):
    method login (line 109) | def login(self):
    method _login_impl (line 120) | def _login_impl(self, username, password):
    method items (line 151) | def items(self):
    method deviations (line 264) | def deviations(self):
    method prepare (line 267) | def prepare(self, deviation):
    method commit (line 313) | def commit(self, deviation, target):
    method _commit_journal_html (line 324) | def _commit_journal_html(self, deviation, journal):
    method _commit_journal_text (line 372) | def _commit_journal_text(self, deviation, journal):
    method _extract_journal (line 393) | def _extract_journal(self, deviation):
    method _textcontent_to_html (line 431) | def _textcontent_to_html(self, deviation, content):
    method _extract_content (line 449) | def _extract_content(self, deviation):
    method _find_folder (line 476) | def _find_folder(self, folders, name, uuid):
    method _folder_urls (line 497) | def _folder_urls(self, folders, category, extractor):
    method _update_content_default (line 504) | def _update_content_default(self, deviation, content):
    method _update_content_image (line 516) | def _update_content_image(self, deviation, content):
    method _update_token (line 524) | def _update_token(self, deviation, content):
    method _extract_comments (line 551) | def _extract_comments(self, target_id, target_type="deviation"):
    method _limited_request (line 573) | def _limited_request(self, url, **kwargs):
    method _fetch_premium (line 582) | def _fetch_premium(self, deviation):
    method _unwatch_premium (line 627) | def _unwatch_premium(self, _=None):
    method _eclipse_to_oauth (line 632) | def _eclipse_to_oauth(self, eclipse_api, deviations):
    method _unescape_json (line 642) | def _unescape_json(self, json):
    method _user_details (line 647) | def _user_details(self, name):
  class DeviantartUserExtractor (line 654) | class DeviantartUserExtractor(Dispatch, DeviantartExtractor):
    method items (line 659) | def items(self):
  class DeviantartGalleryExtractor (line 675) | class DeviantartGalleryExtractor(DeviantartExtractor):
    method deviations (line 684) | def deviations(self):
  class DeviantartAvatarExtractor (line 691) | class DeviantartAvatarExtractor(DeviantartExtractor):
    method deviations (line 698) | def deviations(self):
    method _make_deviation (line 731) | def _make_deviation(self, url, user, index, fmt):
  class DeviantartBackgroundExtractor (line 745) | class DeviantartBackgroundExtractor(DeviantartExtractor):
    method deviations (line 752) | def deviations(self):
  class DeviantartFolderExtractor (line 760) | class DeviantartFolderExtractor(DeviantartExtractor):
    method __init__ (line 768) | def __init__(self, match):
    method deviations (line 774) | def deviations(self):
    method prepare (line 808) | def prepare(self, deviation):
  class DeviantartStashExtractor (line 813) | class DeviantartStashExtractor(DeviantartExtractor):
    method __init__ (line 822) | def __init__(self, match):
    method deviations (line 826) | def deviations(self, stash_id=None, stash_data=None):
  class DeviantartFavoriteExtractor (line 877) | class DeviantartFavoriteExtractor(DeviantartExtractor):
    method deviations (line 885) | def deviations(self):
  class DeviantartCollectionExtractor (line 893) | class DeviantartCollectionExtractor(DeviantartExtractor):
    method __init__ (line 902) | def __init__(self, match):
    method deviations (line 908) | def deviations(self):
    method prepare (line 920) | def prepare(self, deviation):
  class DeviantartJournalExtractor (line 925) | class DeviantartJournalExtractor(DeviantartExtractor):
    method deviations (line 933) | def deviations(self):
  class DeviantartStatusExtractor (line 937) | class DeviantartStatusExtractor(DeviantartExtractor):
    method deviations (line 946) | def deviations(self):
    method process_status (line 950) | def process_status(self, status):
    method prepare (line 964) | def prepare(self, deviation):
  class DeviantartTagExtractor (line 998) | class DeviantartTagExtractor(DeviantartExtractor):
    method __init__ (line 1006) | def __init__(self, match):
    method deviations (line 1011) | def deviations(self):
    method prepare (line 1014) | def prepare(self, deviation):
  class DeviantartWatchExtractor (line 1019) | class DeviantartWatchExtractor(DeviantartExtractor):
    method deviations (line 1026) | def deviations(self):
  class DeviantartWatchPostsExtractor (line 1030) | class DeviantartWatchPostsExtractor(DeviantartExtractor):
    method deviations (line 1036) | def deviations(self):
  class DeviantartDeviationExtractor (line 1043) | class DeviantartDeviationExtractor(DeviantartExtractor):
    method __init__ (line 1055) | def __init__(self, match):
    method deviations (line 1061) | def deviations(self):
  class DeviantartScrapsExtractor (line 1103) | class DeviantartScrapsExtractor(DeviantartExtractor):
    method deviations (line 1111) | def deviations(self):
  class DeviantartSearchExtractor (line 1119) | class DeviantartSearchExtractor(DeviantartExtractor):
    method __init__ (line 1129) | def __init__(self, match):
    method deviations (line 1135) | def deviations(self):
    method prepare (line 1143) | def prepare(self, deviation):
    method _search_html (line 1147) | def _search_html(self, params):
  class DeviantartGallerySearchExtractor (line 1171) | class DeviantartGallerySearchExtractor(DeviantartExtractor):
    method __init__ (line 1178) | def __init__(self, match):
    method deviations (line 1182) | def deviations(self):
    method prepare (line 1197) | def prepare(self, deviation):
  class DeviantartFollowingExtractor (line 1202) | class DeviantartFollowingExtractor(DeviantartExtractor):
    method items (line 1208) | def items(self):
  class DeviantartOAuthAPI (line 1220) | class DeviantartOAuthAPI():
    method __init__ (line 1228) | def __init__(self, extractor):
    method browse_deviantsyouwatch (line 1302) | def browse_deviantsyouwatch(self, offset=0):
    method browse_posts_deviantsyouwatch (line 1309) | def browse_posts_deviantsyouwatch(self, offset=0):
    method browse_tags (line 1316) | def browse_tags(self, tag, offset=0):
    method browse_user_journals (line 1327) | def browse_user_journals(self, username, offset=0):
    method collections (line 1335) | def collections(self, username, folder_id, offset=0):
    method collections_all (line 1342) | def collections_all(self, username, offset=0):
    method collections_folders (line 1349) | def collections_folders(self, username, offset=0):
    method comments (line 1356) | def comments(self, target_id, target_type="deviation",
    method deviation (line 1369) | def deviation(self, deviation_id, public=None):
    method deviation_content (line 1384) | def deviation_content(self, deviation_id, public=None):
    method deviation_download (line 1397) | def deviation_download(self, deviation_id, public=None):
    method deviation_metadata (line 1410) | def deviation_metadata(self, deviations):
    method gallery (line 1422) | def gallery(self, username, folder_id, offset=0, extend=True, public=N...
    method gallery_all (line 1429) | def gallery_all(self, username, offset=0):
    method gallery_folders (line 1436) | def gallery_folders(self, username, offset=0):
    method user_friends (line 1443) | def user_friends(self, username, offset=0):
    method user_friends_watch (line 1449) | def user_friends_watch(self, username):
    method user_friends_unwatch (line 1467) | def user_friends_unwatch(self, username):
    method user_profile (line 1474) | def user_profile(self, username):
    method user_profile_posts (line 1479) | def user_profile_posts(self, username):
    method user_statuses (line 1485) | def user_statuses(self, username, offset=0):
    method authenticate (line 1494) | def authenticate(self, refresh_token_key):
    method _authenticate_impl (line 1499) | def _authenticate_impl(self, refresh_token_key):
    method _call (line 1526) | def _call(self, endpoint, fatal=True, log=True, public=None, **kwargs):
    method _should_switch_tokens (line 1583) | def _should_switch_tokens(self, results, params):
    method _pagination (line 1594) | def _pagination(self, endpoint, params,
    method _pagination_list (line 1661) | def _pagination_list(self, endpoint, params, key="results"):
    method _shared_content (line 1664) | def _shared_content(self, results):
    method _metadata (line 1671) | def _metadata(self, deviations):
    method _metadata_batch (line 1680) | def _metadata_batch(self, deviations):
    method _folders (line 1687) | def _folders(self, deviations):
    method _folders_map (line 1694) | def _folders_map(self, username):
  class DeviantartEclipseAPI (line 1734) | class DeviantartEclipseAPI():
    method __init__ (line 1737) | def __init__(self, extractor):
    method deviation_extended_fetch (line 1743) | def deviation_extended_fetch(self, deviation_id, user, kind=None):
    method gallery_scraps (line 1755) | def gallery_scraps(self, user, offset=0):
    method galleries_search (line 1766) | def galleries_search(self, user, query, offset=0, order="most-recent"):
    method search_deviations (line 1778) | def search_deviations(self, params):
    method user_info (line 1782) | def user_info(self, user, expand=False):
    method user_watching (line 1787) | def user_watching(self, user, offset=0):
    method _call (line 1801) | def _call(self, endpoint, params):
    method _pagination (line 1812) | def _pagination(self, endpoint, params, key="results"):
    method _ids_watching (line 1844) | def _ids_watching(self, user):
    method _fetch_csrf_token (line 1858) | def _fetch_csrf_token(self, page=None):
  function id_from_base36 (line 1869) | def id_from_base36(base36):
  function base36_from_id (line 1873) | def base36_from_id(deviation_id):
  function eclipse_media (line 1877) | def eclipse_media(media, format="preview"):
  function _refresh_token_cache (line 1897) | def _refresh_token_cache(token):

FILE: gallery_dl/extractor/directlink.py
  class DirectlinkExtractor (line 15) | class DirectlinkExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 31) | def items(self):

FILE: gallery_dl/extractor/discord.py
  class DiscordExtractor (line 15) | class DiscordExtractor(Extractor):
    method _init (line 27) | def _init(self):
    method extract_message_text (line 34) | def extract_message_text(self, message):
    method extract_message (line 62) | def extract_message(self, message):
    method extract_search (line 130) | def extract_search(self, server_id, params):
    method extract_channel_text (line 138) | def extract_channel_text(self, channel_id):
    method extract_channel_threads (line 142) | def extract_channel_threads(self, channel_id):
    method extract_channel (line 147) | def extract_channel(self, channel_id, safe=False):
    method parse_channel (line 178) | def parse_channel(self, channel):
    method parse_server (line 212) | def parse_server(self, server):
    method collect_server_assets (line 222) | def collect_server_assets(self, server, asset_type=None):
    method build_server_and_channels (line 255) | def build_server_and_channels(self, server_id):
  class DiscordChannelExtractor (line 265) | class DiscordChannelExtractor(DiscordExtractor):
    method items (line 270) | def items(self):
  class DiscordMessageExtractor (line 278) | class DiscordMessageExtractor(DiscordExtractor):
    method items (line 283) | def items(self):
  class DiscordServerAssetsExtractor (line 295) | class DiscordServerAssetsExtractor(DiscordExtractor):
    method items (line 304) | def items(self):
  class DiscordServerSearchExtractor (line 324) | class DiscordServerSearchExtractor(DiscordExtractor):
    method items (line 329) | def items(self):
    method skip_date (line 349) | def skip_date(self, date):
  class DiscordServerExtractor (line 354) | class DiscordServerExtractor(DiscordExtractor):
    method items (line 359) | def items(self):
  class DiscordDirectMessagesExtractor (line 370) | class DiscordDirectMessagesExtractor(DiscordExtractor):
    method items (line 377) | def items(self):
  class DiscordDirectMessageExtractor (line 381) | class DiscordDirectMessageExtractor(DiscordExtractor):
    method items (line 388) | def items(self):
  class DiscordAPI (line 397) | class DiscordAPI():
    method __init__ (line 403) | def __init__(self, extractor):
    method get_server (line 408) | def get_server(self, server_id):
    method get_server_channels (line 412) | def get_server_channels(self, server_id):
    method get_channel (line 416) | def get_channel(self, channel_id):
    method get_channel_threads (line 420) | def get_channel_threads(self, channel_id):
    method get_channel_messages (line 434) | def get_channel_messages(self, channel_id):
    method get_search_messages (line 452) | def get_search_messages(self, server_id, params):
    method get_message (line 472) | def get_message(self, channel_id, message_id):
    method _call (line 479) | def _call(self, endpoint, params=None):
    method _pagination (line 490) | def _pagination(self, method, batch):
    method _raise_invalid_token (line 499) | def _raise_invalid_token(self):

FILE: gallery_dl/extractor/dynastyscans.py
  class DynastyscansBase (line 17) | class DynastyscansBase():
    method _parse_image_page (line 22) | def _parse_image_page(self, image_id):
  class DynastyscansChapterExtractor (line 42) | class DynastyscansChapterExtractor(DynastyscansBase, ChapterExtractor):
    method metadata (line 47) | def metadata(self, page):
    method images (line 73) | def images(self, page):
  class DynastyscansMangaExtractor (line 81) | class DynastyscansMangaExtractor(DynastyscansBase, MangaExtractor):
    method chapters (line 87) | def chapters(self, page):
  class DynastyscansSearchExtractor (line 94) | class DynastyscansSearchExtractor(DynastyscansBase, Extractor):
    method __init__ (line 103) | def __init__(self, match):
    method items (line 107) | def items(self):
    method images (line 114) | def images(self):
  class DynastyscansImageExtractor (line 126) | class DynastyscansImageExtractor(DynastyscansSearchExtractor):
    method images (line 132) | def images(self):
  class DynastyscansAnthologyExtractor (line 136) | class DynastyscansAnthologyExtractor(DynastyscansSearchExtractor):
    method items (line 142) | def items(self):

FILE: gallery_dl/extractor/e621.py
  class E621Extractor (line 16) | class E621Extractor(danbooru.DanbooruExtractor):
    method items (line 25) | def items(self):
    method items_artists (line 66) | def items_artists(self):
    method _get_notes (line 72) | def _get_notes(self, id):
    method _get_pools (line 76) | def _get_pools(self, ids):
  class E621TagExtractor (line 100) | class E621TagExtractor(E621Extractor, danbooru.DanbooruTagExtractor):
  class E621PoolExtractor (line 106) | class E621PoolExtractor(E621Extractor, danbooru.DanbooruPoolExtractor):
    method posts (line 111) | def posts(self):
  class E621PostExtractor (line 131) | class E621PostExtractor(E621Extractor, danbooru.DanbooruPostExtractor):
    method posts (line 136) | def posts(self):
  class E621PopularExtractor (line 142) | class E621PopularExtractor(E621Extractor, danbooru.DanbooruPopularExtrac...
    method posts (line 147) | def posts(self):
  class E621ArtistExtractor (line 151) | class E621ArtistExtractor(E621Extractor, danbooru.DanbooruArtistExtractor):
  class E621ArtistSearchExtractor (line 160) | class E621ArtistSearchExtractor(E621Extractor,
  class E621FavoriteExtractor (line 170) | class E621FavoriteExtractor(E621Extractor):
    method metadata (line 178) | def metadata(self):
    method posts (line 182) | def posts(self):
  class E621FrontendExtractor (line 186) | class E621FrontendExtractor(Extractor):
    method initialize (line 194) | def initialize(self):
    method items (line 197) | def items(self):

FILE: gallery_dl/extractor/eporner.py
  class EpornerGalleryExtractor (line 13) | class EpornerGalleryExtractor(GalleryExtractor):
    method __init__ (line 21) | def __init__(self, match):
    method metadata (line 25) | def metadata(self, page):
    method images (line 43) | def images(self, page):

FILE: gallery_dl/extractor/erome.py
  class EromeExtractor (line 18) | class EromeExtractor(Extractor):
    method items (line 27) | def items(self):
    method albums (line 33) | def albums(self):
    method request (line 36) | def request(self, url, **kwargs):
    method _pagination (line 51) | def _pagination(self, url, params):
  class EromeAlbumExtractor (line 65) | class EromeAlbumExtractor(EromeExtractor):
    method items (line 71) | def items(self):
  class EromeUserExtractor (line 123) | class EromeUserExtractor(EromeExtractor):
    method albums (line 128) | def albums(self):
  class EromeSearchExtractor (line 139) | class EromeSearchExtractor(EromeExtractor):
    method albums (line 144) | def albums(self):
  function _cookie_cache (line 150) | def _cookie_cache():

FILE: gallery_dl/extractor/everia.py
  class EveriaExtractor (line 15) | class EveriaExtractor(Extractor):
    method items (line 19) | def items(self):
    method posts (line 24) | def posts(self):
    method _pagination (line 27) | def _pagination(self, path, params=None, pnum=1):
  class EveriaPostExtractor (line 44) | class EveriaPostExtractor(EveriaExtractor):
    method items (line 51) | def items(self):
  class EveriaTagExtractor (line 73) | class EveriaTagExtractor(EveriaExtractor):
  class EveriaCategoryExtractor (line 79) | class EveriaCategoryExtractor(EveriaExtractor):
  class EveriaDateExtractor (line 85) | class EveriaDateExtractor(EveriaExtractor):
  class EveriaSearchExtractor (line 92) | class EveriaSearchExtractor(EveriaExtractor):
    method posts (line 97) | def posts(self):

FILE: gallery_dl/extractor/exhentai.py
  class ExhentaiExtractor (line 20) | class ExhentaiExtractor(Extractor):
    method __init__ (line 34) | def __init__(self, match):
    method initialize (line 38) | def initialize(self):
    method request (line 51) | def request(self, url, **kwargs):
    method login (line 58) | def login(self):
    method _login_impl (line 80) | def _login_impl(self, username, password):
  class ExhentaiGalleryExtractor (line 115) | class ExhentaiGalleryExtractor(ExhentaiExtractor):
    method __init__ (line 123) | def __init__(self, match):
    method _init (line 136) | def _init(self):
    method finalize (line 153) | def finalize(self, status):
    method favorite (line 167) | def favorite(self, slot="0"):
    method items (line 181) | def items(self):
    method _items_hitomi (line 229) | def _items_hitomi(self):
    method _items_metadata (line 241) | def _items_metadata(self):
    method get_metadata (line 244) | def get_metadata(self, page):
    method metadata_from_page (line 259) | def metadata_from_page(self, page):
    method metadata_from_api (line 307) | def metadata_from_api(self):
    method image_from_page (line 320) | def image_from_page(self, page):
    method images_from_api (line 353) | def images_from_api(self):
    method images_from_mpv (line 405) | def images_from_mpv(self):
    method _validate_response (line 462) | def _validate_response(self, response):
    method _validate_signature (line 488) | def _validate_signature(self, signature):
    method _request_home (line 502) | def _request_home(self, **kwargs):
    method _check_509 (line 519) | def _check_509(self, url):
    method _limits_exceeded (line 528) | def _limits_exceeded(self):
    method _limits_check (line 545) | def _limits_check(self, data):
    method _limits_reset (line 552) | def _limits_reset(self):
    method _gallery_page (line 561) | def _gallery_page(self):
    method _image_page (line 577) | def _image_page(self):
    method _fallback_original (line 586) | def _fallback_original(self, nl, fullimg):
    method _fallback_mpv_original (line 591) | def _fallback_mpv_original(self, info):
    method _fallback_1280 (line 596) | def _fallback_1280(self, nl, num, token=None):
    method _fallback_mpv_1280 (line 611) | def _fallback_mpv_1280(self, info, request):
    method _parse_image_info (line 617) | def _parse_image_info(self, url):
    method _parse_original_info (line 634) | def _parse_original_info(self, info):
    method _parse_mpv_info (line 646) | def _parse_mpv_info(self, info):
  class ExhentaiSearchExtractor (line 659) | class ExhentaiSearchExtractor(ExhentaiExtractor):
    method __init__ (line 665) | def __init__(self, match):
    method _init (line 681) | def _init(self):
    method items (line 684) | def items(self):
  class ExhentaiFavoriteExtractor (line 716) | class ExhentaiFavoriteExtractor(ExhentaiSearchExtractor):
    method _init (line 722) | def _init(self):

FILE: gallery_dl/extractor/facebook.py
  class FacebookExtractor (line 18) | class FacebookExtractor(Extractor):
    method _init (line 26) | def _init(self):
    method decode_all (line 40) | def decode_all(self, txt):
    method parse_set_page (line 46) | def parse_set_page(self, set_page):
    method parse_photo_page (line 88) | def parse_photo_page(self, photo_page):
    method parse_post_page (line 149) | def parse_post_page(self, post_page):
    method parse_video_page (line 163) | def parse_video_page(self, video_page):
    method photo_page_request_wrapper (line 228) | def photo_page_request_wrapper(self, url, **kwargs):
    method extract_set (line 250) | def extract_set(self, set_data):
    method _extract_profile (line 317) | def _extract_profile(self, profile, set_id=False):
    method _extract_profile_page (line 324) | def _extract_profile_page(self, url):
    method _extract_profile_set_id (line 345) | def _extract_profile_set_id(self, profile_photos_page):
    method _extract_profile_user (line 358) | def _extract_profile_user(self, page):
  class FacebookPhotoExtractor (line 391) | class FacebookPhotoExtractor(FacebookExtractor):
    method items (line 399) | def items(self):
  class FacebookSetExtractor (line 434) | class FacebookSetExtractor(FacebookExtractor):
    method items (line 446) | def items(self):
  class FacebookVideoExtractor (line 462) | class FacebookVideoExtractor(FacebookExtractor):
    method items (line 469) | def items(self):
  class FacebookInfoExtractor (line 489) | class FacebookInfoExtractor(FacebookExtractor):
    method items (line 496) | def items(self):
  class FacebookAlbumsExtractor (line 501) | class FacebookAlbumsExtractor(FacebookExtractor):
    method items (line 507) | def items(self):
  class FacebookPhotosExtractor (line 534) | class FacebookPhotosExtractor(FacebookExtractor):
    method items (line 540) | def items(self):
  class FacebookAvatarExtractor (line 552) | class FacebookAvatarExtractor(FacebookExtractor):
    method items (line 558) | def items(self):
  class FacebookUserExtractor (line 575) | class FacebookUserExtractor(Dispatch, FacebookExtractor):
    method items (line 580) | def items(self):

FILE: gallery_dl/extractor/fanbox.py
  class FanboxExtractor (line 20) | class FanboxExtractor(Extractor):
    method _init (line 30) | def _init(self):
    method items (line 61) | def items(self):
    method posts (line 81) | def posts(self):
    method _pagination (line 84) | def _pagination(self, url):
    method _extract_post (line 93) | def _extract_post(self, post):
    method _sort_map (line 159) | def _sort_map(self, body, key, ids):
    method _get_user_data (line 172) | def _get_user_data(self, creator_id):
    method _get_plan_data (line 182) | def _get_plan_data(self, creator_id):
    method _get_comment_data (line 203) | def _get_comment_data(self, post_id):
    method _get_urls_from_post (line 219) | def _get_urls_from_post(self, content_body, post):
    method _process_embed (line 307) | def _process_embed(self, post, embed):
  class FanboxCreatorExtractor (line 355) | class FanboxCreatorExtractor(FanboxExtractor):
    method posts (line 361) | def posts(self):
    method _pagination_creator (line 366) | def _pagination_creator(self, url):
  class FanboxTagExtractor (line 384) | class FanboxTagExtractor(FanboxExtractor):
    method posts (line 390) | def posts(self):
  class FanboxPostExtractor (line 398) | class FanboxPostExtractor(FanboxExtractor):
    method posts (line 404) | def posts(self):
  class FanboxHomeExtractor (line 408) | class FanboxHomeExtractor(FanboxExtractor):
    method posts (line 414) | def posts(self):
  class FanboxSupportingExtractor (line 419) | class FanboxSupportingExtractor(FanboxExtractor):
    method posts (line 425) | def posts(self):
  class FanboxRedirectExtractor (line 430) | class FanboxRedirectExtractor(Extractor):
    method items (line 438) | def items(self):

FILE: gallery_dl/extractor/fansly.py
  class FanslyExtractor (line 18) | class FanslyExtractor(Extractor):
    method _init (line 26) | def _init(self):
    method items (line 35) | def items(self):
    method posts (line 47) | def posts(self):
    method _extract_files (line 64) | def _extract_files(self, post):
    method _extract_attachment (line 92) | def _extract_attachment(self, files, post, attachment, preview=False):
  class FanslyPostExtractor (line 164) | class FanslyPostExtractor(FanslyExtractor):
    method posts (line 169) | def posts(self):
  class FanslyHomeExtractor (line 173) | class FanslyHomeExtractor(FanslyExtractor):
    method posts (line 178) | def posts(self):
  class FanslyListExtractor (line 189) | class FanslyListExtractor(FanslyExtractor):
    method items (line 194) | def items(self):
  class FanslyListsExtractor (line 202) | class FanslyListsExtractor(FanslyExtractor):
    method items (line 207) | def items(self):
  class FanslyCreatorPostsExtractor (line 215) | class FanslyCreatorPostsExtractor(FanslyExtractor):
    method posts_wall (line 220) | def posts_wall(self, account, wall):
  class FanslyCreatorMediaExtractor (line 224) | class FanslyCreatorMediaExtractor(FanslyExtractor):
    method posts_wall (line 229) | def posts_wall(self, account, wall):
  class FanslyAPI (line 233) | class FanslyAPI():
    method __init__ (line 236) | def __init__(self, extractor):
    method account (line 250) | def account(self, creator):
    method account_by_username (line 255) | def account_by_username(self, username):
    method account_by_id (line 260) | def account_by_id(self, account_id):
    method accounts_by_id (line 265) | def accounts_by_id(self, account_ids):
    method account_media (line 270) | def account_media(self, media_ids):
    method lists_account (line 275) | def lists_account(self):
    method lists_itemsnew (line 280) | def lists_itemsnew(self, list_id, sort="3"):
    method mediaoffers_location (line 290) | def mediaoffers_location(self, account_id, wall_id):
    method post (line 304) | def post(self, post_id):
    method timeline_home (line 309) | def timeline_home(self, mode="0", list_id=None):
    method timeline_new (line 318) | def timeline_new(self, account_id, wall_id):
    method _update_posts (line 328) | def _update_posts(self, response):
    method _update_media (line 379) | def _update_media(self, items, response):
    method _update_items (line 392) | def _update_items(self, items):
    method _call (line 400) | def _call(self, endpoint, params):
    method _pagination (line 410) | def _pagination(self, endpoint, params):
    method _pagination_list (line 420) | def _pagination_list(self, endpoint, params):
    method _pagination_media (line 429) | def _pagination_media(self, endpoint, params):

FILE: gallery_dl/extractor/fantia.py
  class FantiaExtractor (line 13) | class FantiaExtractor(Extractor):
    method _init (line 22) | def _init(self):
    method items (line 40) | def items(self):
    method posts (line 68) | def posts(self):
    method _pagination (line 71) | def _pagination(self, url, params, needle=""):
    method _csrf_token (line 86) | def _csrf_token(self, page=None):
    method _get_post_data (line 92) | def _get_post_data(self, post_id):
    method _get_post_contents (line 114) | def _get_post_contents(self, post):
    method _process_content (line 133) | def _process_content(self, post, content):
  class FantiaCreatorExtractor (line 175) | class FantiaCreatorExtractor(FantiaExtractor):
    method posts (line 181) | def posts(self):
  class FantiaPostExtractor (line 186) | class FantiaPostExtractor(FantiaExtractor):
    method posts (line 192) | def posts(self):
  class FantiaSupportingExtractor (line 197) | class FantiaSupportingExtractor(FantiaExtractor):
    method items (line 204) | def items(self):

FILE: gallery_dl/extractor/fapachi.py
  class FapachiPostExtractor (line 13) | class FapachiPostExtractor(Extractor):
    method __init__ (line 25) | def __init__(self, match):
    method items (line 29) | def items(self):
  class FapachiUserExtractor (line 41) | class FapachiUserExtractor(Extractor):
    method __init__ (line 50) | def __init__(self, match):
    method items (line 55) | def items(self):

FILE: gallery_dl/extractor/fapello.py
  class FapelloPostExtractor (line 16) | class FapelloPostExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 31) | def items(self):
  class FapelloModelExtractor (line 51) | class FapelloModelExtractor(Extractor):
    method __init__ (line 60) | def __init__(self, match):
    method items (line 65) | def items(self):
  class FapelloPathExtractor (line 84) | class FapelloPathExtractor(Extractor):
    method __init__ (line 93) | def __init__(self, match):
    method items (line 98) | def items(self):

FILE: gallery_dl/extractor/fikfap.py
  class FikfapExtractor (line 17) | class FikfapExtractor(Extractor):
    method items (line 26) | def items(self):
    method request_api (line 55) | def request_api(self, url, params):
  class FikfapPostExtractor (line 68) | class FikfapPostExtractor(FikfapExtractor):
    method posts (line 73) | def posts(self):
  class FikfapUserExtractor (line 84) | class FikfapUserExtractor(FikfapExtractor):
    method posts (line 89) | def posts(self):
  class FikfapHashtagExtractor (line 105) | class FikfapHashtagExtractor(FikfapExtractor):
    method posts (line 111) | def posts(self):

FILE: gallery_dl/extractor/filester.py
  class FilesterExtractor (line 18) | class FilesterExtractor(Extractor):
    method _download_url (line 24) | def _download_url(self, slug):
  class FilesterFileExtractor (line 31) | class FilesterFileExtractor(FilesterExtractor):
    method items (line 37) | def items(self):
  class FilesterFolderExtractor (line 60) | class FilesterFolderExtractor(FilesterExtractor):
    method items (line 67) | def items(self):

FILE: gallery_dl/extractor/fitnakedgirls.py
  class FitnakedgirlsExtractor (line 15) | class FitnakedgirlsExtractor(Extractor):
    method items (line 20) | def items(self):
    method _pagination (line 25) | def _pagination(self, base):
    method _extract_title (line 41) | def _extract_title(self, extr, sep=" - "):
  class FitnakedgirlsGalleryExtractor (line 48) | class FitnakedgirlsGalleryExtractor(GalleryExtractor, FitnakedgirlsExtra...
    method __init__ (line 56) | def __init__(self, match):
    method metadata (line 60) | def metadata(self, page):
    method images (line 79) | def images(self, page):
  class FitnakedgirlsCategoryExtractor (line 110) | class FitnakedgirlsCategoryExtractor(FitnakedgirlsExtractor):
    method galleries (line 116) | def galleries(self):
  class FitnakedgirlsTagExtractor (line 121) | class FitnakedgirlsTagExtractor(FitnakedgirlsExtractor):
    method galleries (line 127) | def galleries(self):
  class FitnakedgirlsVideoExtractor (line 132) | class FitnakedgirlsVideoExtractor(FitnakedgirlsExtractor):
    method items (line 141) | def items(self):
  class FitnakedgirlsBlogExtractor (line 165) | class FitnakedgirlsBlogExtractor(FitnakedgirlsExtractor):
    method items (line 174) | def items(self):

FILE: gallery_dl/extractor/flickr.py
  class FlickrExtractor (line 17) | class FlickrExtractor(Extractor):
    method _init (line 27) | def _init(self):
    method items (line 31) | def items(self):
    method metadata (line 50) | def metadata(self):
    method photos (line 57) | def photos(self):
    method _file_url (line 60) | def _file_url(self, photo):
  class FlickrImageExtractor (line 70) | class FlickrImageExtractor(FlickrExtractor):
    method items (line 79) | def items(self):
  class FlickrAlbumExtractor (line 120) | class FlickrAlbumExtractor(FlickrExtractor):
    method items (line 129) | def items(self):
    method _album_items (line 135) | def _album_items(self):
    method metadata (line 147) | def metadata(self):
    method photos (line 158) | def photos(self):
  class FlickrGalleryExtractor (line 162) | class FlickrGalleryExtractor(FlickrExtractor):
    method metadata (line 171) | def metadata(self):
    method photos (line 177) | def photos(self):
  class FlickrGroupExtractor (line 181) | class FlickrGroupExtractor(FlickrExtractor):
    method metadata (line 189) | def metadata(self):
    method photos (line 193) | def photos(self):
  class FlickrUserExtractor (line 197) | class FlickrUserExtractor(FlickrExtractor):
    method photos (line 204) | def photos(self):
  class FlickrFavoriteExtractor (line 208) | class FlickrFavoriteExtractor(FlickrExtractor):
    method photos (line 216) | def photos(self):
  class FlickrSearchExtractor (line 220) | class FlickrSearchExtractor(FlickrExtractor):
    method metadata (line 228) | def metadata(self):
    method photos (line 234) | def photos(self):
  class FlickrAPI (line 238) | class FlickrAPI(oauth.OAuth1API):
    method API_KEY (line 292) | def API_KEY(self):
    method __init__ (line 295) | def __init__(self, extractor):
    method favorites_getList (line 320) | def favorites_getList(self, user_id):
    method galleries_getInfo (line 325) | def galleries_getInfo(self, gallery_id):
    method galleries_getPhotos (line 331) | def galleries_getPhotos(self, gallery_id):
    method groups_pools_getPhotos (line 336) | def groups_pools_getPhotos(self, group_id):
    method people_getInfo (line 341) | def people_getInfo(self, user_id):
    method people_getPhotos (line 361) | def people_getPhotos(self, user_id):
    method photos_getAllContexts (line 366) | def photos_getAllContexts(self, photo_id):
    method photos_getExif (line 373) | def photos_getExif(self, photo_id):
    method photos_getInfo (line 378) | def photos_getInfo(self, photo_id):
    method photos_getSizes (line 383) | def photos_getSizes(self, photo_id):
    method photos_search (line 395) | def photos_search(self, params):
    method photosets_getInfo (line 399) | def photosets_getInfo(self, photoset_id, user_id):
    method photosets_getList (line 405) | def photosets_getList(self, user_id):
    method photosets_getPhotos (line 410) | def photosets_getPhotos(self, photoset_id):
    method urls_lookupGroup (line 415) | def urls_lookupGroup(self, groupname):
    method urls_lookupUser (line 423) | def urls_lookupUser(self, username):
    method video_getStreamInfo (line 433) | def video_getStreamInfo(self, video_id, secret=None):
    method _call (line 442) | def _call(self, method, params):
    method _pagination (line 467) | def _pagination(self, method, params, key="photos"):
    method _pagination_sets (line 489) | def _pagination_sets(self, method, params):
    method _extract_apikey (line 499) | def _extract_apikey(self):
    method _extract_format (line 505) | def _extract_format(self, photo):
    method _extract_photo (line 553) | def _extract_photo(self, photo):
    method _extract_video (line 561) | def _extract_video(self, photo):
    method _extract_metadata (line 568) | def _extract_metadata(self, photo, info=True):
    method _clean_info (line 603) | def _clean_info(self, info):

FILE: gallery_dl/extractor/foolfuuka.py
  class FoolfuukaExtractor (line 16) | class FoolfuukaExtractor(BaseExtractor):
    method __init__ (line 23) | def __init__(self, match):
    method items (line 33) | def items(self):
    method metadata (line 53) | def metadata(self):
    method posts (line 56) | def posts(self):
    method remote (line 59) | def remote(self, board, media):
    method _remote_direct (line 102) | def _remote_direct(self, board, media):
  class FoolfuukaThreadExtractor (line 146) | class FoolfuukaThreadExtractor(FoolfuukaExtractor):
    method __init__ (line 154) | def __init__(self, match):
    method metadata (line 160) | def metadata(self):
    method posts (line 166) | def posts(self):
  class FoolfuukaBoardExtractor (line 175) | class FoolfuukaBoardExtractor(FoolfuukaExtractor):
    method __init__ (line 181) | def __init__(self, match):
    method items (line 186) | def items(self):
  class FoolfuukaSearchExtractor (line 210) | class FoolfuukaSearchExtractor(FoolfuukaExtractor):
    method __init__ (line 218) | def __init__(self, match):
    method metadata (line 234) | def metadata(self):
    method posts (line 237) | def posts(self):
  class FoolfuukaGalleryExtractor (line 265) | class FoolfuukaGalleryExtractor(FoolfuukaExtractor):
    method metadata (line 272) | def metadata(self):
    method posts (line 276) | def posts(self):

FILE: gallery_dl/extractor/foolslide.py
  class FoolslideExtractor (line 15) | class FoolslideExtractor(BaseExtractor):
    method __init__ (line 19) | def __init__(self, match):
    method request (line 23) | def request(self, url):
    method parse_chapter_url (line 27) | def parse_chapter_url(self, url, data):
  class FoolslideChapterExtractor (line 43) | class FoolslideChapterExtractor(FoolslideExtractor):
    method items (line 53) | def items(self):
    method metadata (line 78) | def metadata(self, page):
    method images (line 86) | def images(self, page):
  class FoolslideMangaExtractor (line 90) | class FoolslideMangaExtractor(FoolslideExtractor):
    method items (line 97) | def items(self):
    method chapters (line 108) | def chapters(self, page):

FILE: gallery_dl/extractor/foriio.py
  class ForiioExtractor (line 17) | class ForiioExtractor(Extractor):
  class ForiioWorkExtractor (line 24) | class ForiioWorkExtractor(ForiioExtractor):
    method items (line 33) | def items(self):
  class ForiioUserExtractor (line 126) | class ForiioUserExtractor(ForiioExtractor):
    method items (line 131) | def items(self):
  function _orig (line 170) | def _orig(name):

FILE: gallery_dl/extractor/furaffinity.py
  class FuraffinityExtractor (line 17) | class FuraffinityExtractor(Extractor):
    method __init__ (line 29) | def __init__(self, match):
    method _init (line 34) | def _init(self):
    method items (line 51) | def items(self):
    method metadata (line 65) | def metadata(self):
    method skip_files (line 68) | def skip_files(self, num):
    method _parse_post (line 72) | def _parse_post(self, post_id):
    method _process_description (line 152) | def _process_description(self, description):
    method _pagination (line 155) | def _pagination(self, path, folder=None):
    method _pagination_favorites (line 171) | def _pagination_favorites(self, start=None):
    method _pagination_search (line 192) | def _pagination_search(self, query):
  class FuraffinityGalleryExtractor (line 233) | class FuraffinityGalleryExtractor(FuraffinityExtractor):
    method posts (line 239) | def posts(self):
  class FuraffinityFolderExtractor (line 243) | class FuraffinityFolderExtractor(FuraffinityExtractor):
    method metadata (line 251) | def metadata(self):
    method posts (line 257) | def posts(self):
  class FuraffinityScrapsExtractor (line 261) | class FuraffinityScrapsExtractor(FuraffinityExtractor):
    method posts (line 268) | def posts(self):
  class FuraffinityFavoriteExtractor (line 272) | class FuraffinityFavoriteExtractor(FuraffinityExtractor):
    method posts (line 279) | def posts(self):
    method _parse_post (line 282) | def _parse_post(self, post_id):
  class FuraffinitySearchExtractor (line 288) | class FuraffinitySearchExtractor(FuraffinityExtractor):
    method __init__ (line 295) | def __init__(self, match):
    method metadata (line 301) | def metadata(self):
    method posts (line 304) | def posts(self):
  class FuraffinityPostExtractor (line 308) | class FuraffinityPostExtractor(FuraffinityExtractor):
    method posts (line 314) | def posts(self):
  class FuraffinityUserExtractor (line 320) | class FuraffinityUserExtractor(Dispatch, FuraffinityExtractor):
    method items (line 325) | def items(self):
  class FuraffinityFollowingExtractor (line 335) | class FuraffinityFollowingExtractor(FuraffinityExtractor):
    method items (line 341) | def items(self):
  class FuraffinitySubmissionsExtractor (line 357) | class FuraffinitySubmissionsExtractor(FuraffinityExtractor):
    method posts (line 363) | def posts(self):
    method _pagination_submissions (line 368) | def _pagination_submissions(self, url):

FILE: gallery_dl/extractor/furry34.py
  class Furry34Extractor (line 18) | class Furry34Extractor(BooruExtractor):
    method _file_url (line 39) | def _file_url(self, post):
    method _prepare (line 56) | def _prepare(self, post):
    method _tags (line 63) | def _tags(self, post, _):
    method _fetch_post (line 74) | def _fetch_post(self, post_id):
    method _pagination (line 78) | def _pagination(self, endpoint, params=None):
  class Furry34PostExtractor (line 97) | class Furry34PostExtractor(Furry34Extractor):
    method posts (line 103) | def posts(self):
  class Furry34PlaylistExtractor (line 107) | class Furry34PlaylistExtractor(Furry34Extractor):
    method metadata (line 114) | def metadata(self):
    method posts (line 117) | def posts(self):
  class Furry34TagExtractor (line 122) | class Furry34TagExtractor(Furry34Extractor):
    method _init (line 129) | def _init(self):
    method metadata (line 147) | def metadata(self):
    method posts (line 150) | def posts(self):

FILE: gallery_dl/extractor/fuskator.py
  class FuskatorGalleryExtractor (line 16) | class FuskatorGalleryExtractor(GalleryExtractor):
    method __init__ (line 23) | def __init__(self, match):
    method metadata (line 28) | def metadata(self, page):
    method images (line 57) | def images(self, page):
  class FuskatorSearchExtractor (line 64) | class FuskatorSearchExtractor(Extractor):
    method __init__ (line 72) | def __init__(self, match):
    method items (line 76) | def items(self):

FILE: gallery_dl/extractor/gelbooru.py
  class GelbooruBase (line 19) | class GelbooruBase():
    method _api_request (line 26) | def _api_request(self, params, key="post", log=False):
    method _pagination (line 57) | def _pagination(self, params):
    method _pagination_html (line 100) | def _pagination_html(self, params):
    method _file_url (line 117) | def _file_url(self, post):
    method _notes (line 127) | def _notes(self, post, page):
    method _skip_offset (line 143) | def _skip_offset(self, num):
  class GelbooruTagExtractor (line 148) | class GelbooruTagExtractor(GelbooruBase,
  class GelbooruPoolExtractor (line 155) | class GelbooruPoolExtractor(GelbooruBase,
    method metadata (line 163) | def metadata(self):
    method posts (line 181) | def posts(self):
  class GelbooruFavoriteExtractor (line 185) | class GelbooruFavoriteExtractor(GelbooruBase,
    method posts (line 193) | def posts(self):
    method _pagination (line 226) | def _pagination(self, params, count):
    method _pagination_reverse (line 252) | def _pagination_reverse(self, params, count):
  class GelbooruPostExtractor (line 282) | class GelbooruPostExtractor(GelbooruBase,
  class GelbooruRedirectExtractor (line 292) | class GelbooruRedirectExtractor(GelbooruBase, Extractor):
    method __init__ (line 298) | def __init__(self, match):
    method items (line 302) | def items(self):

FILE: gallery_dl/extractor/gelbooru_v01.py
  class GelbooruV01Extractor (line 15) | class GelbooruV01Extractor(booru.BooruExtractor):
    method _parse_post (line 19) | def _parse_post(self, post_id):
    method skip_files (line 42) | def skip_files(self, num):
    method _pagination (line 46) | def _pagination(self, url, begin, end):
  class GelbooruV01TagExtractor (line 86) | class GelbooruV01TagExtractor(GelbooruV01Extractor):
    method metadata (line 93) | def metadata(self):
    method posts (line 97) | def posts(self):
  class GelbooruV01FavoriteExtractor (line 102) | class GelbooruV01FavoriteExtractor(GelbooruV01Extractor):
    method metadata (line 110) | def metadata(self):
    method posts (line 114) | def posts(self):
  class GelbooruV01PostExtractor (line 120) | class GelbooruV01PostExtractor(GelbooruV01Extractor):
    method posts (line 126) | def posts(self):

FILE: gallery_dl/extractor/gelbooru_v02.py
  class GelbooruV02Extractor (line 16) | class GelbooruV02Extractor(booru.BooruExtractor):
    method __init__ (line 19) | def __init__(self, match):
    method _init (line 24) | def _init(self):
    method _api_request (line 31) | def _api_request(self, params):
    method _pagination (line 47) | def _pagination(self, params):
    method _pagination_html (line 94) | def _pagination_html(self, params):
    method _file_url_rule34 (line 113) | def _file_url_rule34(self, post):
    method _prepare (line 123) | def _prepare(self, post):
    method _html (line 128) | def _html(self, post):
    method _tags (line 132) | def _tags(self, post, page):
    method _notes (line 145) | def _notes(self, post, page):
  class GelbooruV02TagExtractor (line 189) | class GelbooruV02TagExtractor(GelbooruV02Extractor):
    method posts (line 196) | def posts(self):
  class GelbooruV02PoolExtractor (line 205) | class GelbooruV02PoolExtractor(GelbooruV02Extractor):
    method __init__ (line 212) | def __init__(self, match):
    method skip_files (line 222) | def skip_files(self, num):
    method metadata (line 226) | def metadata(self):
    method posts (line 241) | def posts(self):
    method _posts_pages (line 247) | def _posts_pages(self):
  class GelbooruV02FavoriteExtractor (line 255) | class GelbooruV02FavoriteExtractor(GelbooruV02Extractor):
    method metadata (line 263) | def metadata(self):
    method posts (line 267) | def posts(self):
  class GelbooruV02PostExtractor (line 275) | class GelbooruV02PostExtractor(GelbooruV02Extractor):
    method posts (line 281) | def posts(self):

FILE: gallery_dl/extractor/generic.py
  class GenericExtractor (line 14) | class GenericExtractor(Extractor):
    method __init__ (line 38) | def __init__(self, match):
    method items (line 62) | def items(self):
    method metadata (line 89) | def metadata(self, page):
    method images (line 121) | def images(self, page):

FILE: gallery_dl/extractor/girlsreleased.py
  class GirlsreleasedExtractor (line 16) | class GirlsreleasedExtractor(Extractor):
    method items (line 23) | def items(self):
    method _pagination (line 29) | def _pagination(self):
  class GirlsreleasedSetExtractor (line 41) | class GirlsreleasedSetExtractor(GirlsreleasedExtractor):
    method items (line 47) | def items(self):
  class GirlsreleasedModelExtractor (line 65) | class GirlsreleasedModelExtractor(GirlsreleasedExtractor):
  class GirlsreleasedSiteExtractor (line 72) | class GirlsreleasedSiteExtractor(GirlsreleasedExtractor):

FILE: gallery_dl/extractor/girlswithmuscle.py
  class GirlswithmuscleExtractor (line 13) | class GirlswithmuscleExtractor(Extractor):
    method login (line 21) | def login(self):
    method _login_impl (line 28) | def _login_impl(self, username, password):
  class GirlswithmusclePostExtractor (line 60) | class GirlswithmusclePostExtractor(GirlswithmuscleExtractor):
    method items (line 66) | def items(self):
    method metadata (line 86) | def metadata(self, page):
    method _extract_model (line 113) | def _extract_model(self, page):
    method _parse_model_list (line 117) | def _parse_model_list(self, model):
    method _parse_is_favorite (line 123) | def _parse_is_favorite(self, page):
    method _extract_comments (line 137) | def _extract_comments(self, page):
  class GirlswithmuscleSearchExtractor (line 143) | class GirlswithmuscleSearchExtractor(GirlswithmuscleExtractor):
    method pages (line 149) | def pages(self):
    method items (line 167) | def items(self):

FILE: gallery_dl/extractor/gofile.py
  class GofileFolderExtractor (line 14) | class GofileFolderExtractor(Extractor):
    method items (line 23) | def items(self):
    method request_api (line 63) | def request_api(self, endpoint, params=None, headers=None, method="GET"):
    method _create_account (line 83) | def _create_account(self):
    method _generate_website_token (line 87) | def _generate_website_token(self, lang="en-US"):
    method _get_content (line 96) | def _get_content(self, content_id, password=None):

FILE: gallery_dl/extractor/hatenablog.py
  class HatenablogExtractor (line 21) | class HatenablogExtractor(Extractor):
    method __init__ (line 28) | def __init__(self, match):
    method _init (line 32) | def _init(self):
    method _handle_article (line 35) | def _handle_article(self, article: str):
  class HatenablogEntriesExtractor (line 64) | class HatenablogEntriesExtractor(HatenablogExtractor):
    method __init__ (line 68) | def __init__(self, match):
    method _init (line 74) | def _init(self):
    method items (line 79) | def items(self):
    method _handle_partial_articles (line 97) | def _handle_partial_articles(self, extr):
    method _handle_full_articles (line 108) | def _handle_full_articles(self, extr):
    method _acceptable_query (line 119) | def _acceptable_query(self, key):
  class HatenablogEntryExtractor (line 123) | class HatenablogEntryExtractor(HatenablogExtractor):
    method __init__ (line 129) | def __init__(self, match):
    method items (line 133) | def items(self):
  class HatenablogHomeExtractor (line 146) | class HatenablogHomeExtractor(HatenablogEntriesExtractor):
  class HatenablogArchiveExtractor (line 153) | class HatenablogArchiveExtractor(HatenablogEntriesExtractor):
  class HatenablogSearchExtractor (line 161) | class HatenablogSearchExtractor(HatenablogEntriesExtractor):

FILE: gallery_dl/extractor/hdoujin.py
  class HdoujinBase (line 16) | class HdoujinBase():
  class HdoujinGalleryExtractor (line 24) | class HdoujinGalleryExtractor(
  class HdoujinSearchExtractor (line 30) | class HdoujinSearchExtractor(
  class HdoujinFavoriteExtractor (line 36) | class HdoujinFavoriteExtractor(

FILE: gallery_dl/extractor/hentai2read.py
  class Hentai2readBase (line 15) | class Hentai2readBase():
  class Hentai2readChapterExtractor (line 21) | class Hentai2readChapterExtractor(Hentai2readBase, ChapterExtractor):
    method metadata (line 27) | def metadata(self, page):
    method images (line 56) | def images(self, page):
  class Hentai2readMangaExtractor (line 64) | class Hentai2readMangaExtractor(Hentai2readBase, MangaExtractor):
    method chapters (line 70) | def chapters(self, page):

FILE: gallery_dl/extractor/hentaicosplays.py
  class HentaicosplaysExtractor (line 14) | class HentaicosplaysExtractor(BaseExtractor):
  class HentaicosplaysGalleryExtractor (line 34) | class HentaicosplaysGalleryExtractor(
    method __init__ (line 44) | def __init__(self, match):
    method _init (line 49) | def _init(self):
    method metadata (line 52) | def metadata(self, page):
    method images (line 60) | def images(self, page):

FILE: gallery_dl/extractor/hentaifoundry.py
  class HentaifoundryExtractor (line 17) | class HentaifoundryExtractor(Extractor):
    method __init__ (line 27) | def __init__(self, match):
    method _init (line 35) | def _init(self):
    method items (line 39) | def items(self):
    method skip_files (line 49) | def skip_files(self, num):
    method metadata (line 55) | def metadata(self):
    method posts (line 58) | def posts(self):
    method _pagination (line 61) | def _pagination(self, url, begin='thumbTitle"><a href="', end='"'):
    method _parse_post (line 72) | def _parse_post(self, path):
    method _process_description (line 114) | def _process_description(self, description):
    method _process_description_html (line 117) | def _process_description_html(self, description):
    method _parse_story (line 122) | def _parse_story(self, html):
    method _extract_categories (line 151) | def _extract_categories(self, extr):
    method _request_check (line 156) | def _request_check(self, url, **kwargs):
    method _init_site_filters (line 169) | def _init_site_filters(self, check_cookies=True):
  class HentaifoundryUserExtractor (line 215) | class HentaifoundryUserExtractor(Dispatch, HentaifoundryExtractor):
    method items (line 220) | def items(self):
  class HentaifoundryPicturesExtractor (line 231) | class HentaifoundryPicturesExtractor(HentaifoundryExtractor):
    method __init__ (line 237) | def __init__(self, match):
  class HentaifoundryScrapsExtractor (line 242) | class HentaifoundryScrapsExtractor(HentaifoundryExtractor):
    method __init__ (line 249) | def __init__(self, match):
  class HentaifoundryFavoriteExtractor (line 254) | class HentaifoundryFavoriteExtractor(HentaifoundryExtractor):
    method __init__ (line 262) | def __init__(self, match):
  class HentaifoundryTagExtractor (line 267) | class HentaifoundryTagExtractor(HentaifoundryExtractor):
    method __init__ (line 275) | def __init__(self, match):
    method metadata (line 279) | def metadata(self):
  class HentaifoundryRecentExtractor (line 283) | class HentaifoundryRecentExtractor(HentaifoundryExtractor):
    method __init__ (line 291) | def __init__(self, match):
    method metadata (line 295) | def metadata(self):
  class HentaifoundryPopularExtractor (line 299) | class HentaifoundryPopularExtractor(HentaifoundryExtractor):
    method __init__ (line 307) | def __init__(self, match):
  class HentaifoundryImageExtractor (line 312) | class HentaifoundryImageExtractor(HentaifoundryExtractor):
    method __init__ (line 320) | def __init__(self, match):
    method items (line 324) | def items(self):
  class HentaifoundryStoriesExtractor (line 333) | class HentaifoundryStoriesExtractor(HentaifoundryExtractor):
    method items (line 340) | def items(self):
    method stories (line 347) | def stories(self):
  class HentaifoundryStoryExtractor (line 352) | class HentaifoundryStoryExtractor(HentaifoundryExtractor):
    method __init__ (line 360) | def __init__(self, match):
    method items (line 364) | def items(self):

FILE: gallery_dl/extractor/hentaihand.py
  class HentaihandGalleryExtractor (line 15) | class HentaihandGalleryExtractor(GalleryExtractor):
    method __init__ (line 22) | def __init__(self, match):
    method metadata (line 27) | def metadata(self, page):
    method images (line 45) | def images(self, _):
  class HentaihandTagExtractor (line 50) | class HentaihandTagExtractor(Extractor):
    method __init__ (line 60) | def __init__(self, match):
    method items (line 64) | def items(self):

FILE: gallery_dl/extractor/hentaihere.py
  class HentaihereBase (line 15) | class HentaihereBase():
  class HentaihereChapterExtractor (line 21) | class HentaihereChapterExtractor(HentaihereBase, ChapterExtractor):
    method __init__ (line 27) | def __init__(self, match):
    method metadata (line 32) | def metadata(self, page):
    method images (line 52) | def images(self, page):
  class HentaihereMangaExtractor (line 60) | class HentaihereMangaExtractor(HentaihereBase, MangaExtractor):
    method chapters (line 66) | def chapters(self, page):

FILE: gallery_dl/extractor/hentainexus.py
  class HentainexusGalleryExtractor (line 16) | class HentainexusGalleryExtractor(GalleryExtractor):
    method __init__ (line 24) | def __init__(self, match):
    method metadata (line 29) | def metadata(self, page):
    method images (line 61) | def images(self, _):
    method _decode (line 81) | def _decode(self, data):
    method _join_title (line 120) | def _join_title(self, data):
  class HentainexusSearchExtractor (line 153) | class HentainexusSearchExtractor(Extractor):
    method items (line 162) | def items(self):

FILE: gallery_dl/extractor/hiperdex.py
  class HiperdexBase (line 18) | class HiperdexBase():
    method manga_data (line 23) | def manga_data(self, manga, page=None):
    method chapter_data (line 54) | def chapter_data(self, chapter):
  class HiperdexChapterExtractor (line 65) | class HiperdexChapterExtractor(HiperdexBase, ChapterExtractor):
    method __init__ (line 70) | def __init__(self, match):
    method metadata (line 75) | def metadata(self, _):
    method images (line 78) | def images(self, page):
  class HiperdexMangaExtractor (line 86) | class HiperdexMangaExtractor(HiperdexBase, MangaExtractor):
    method __init__ (line 92) | def __init__(self, match):
    method chapters (line 97) | def chapters(self, page):
  class HiperdexArtistExtractor (line 119) | class HiperdexArtistExtractor(HiperdexBase, MangaExtractor):
    method __init__ (line 128) | def __init__(self, match):
    method chapters (line 132) | def chapters(self, page):

FILE: gallery_dl/extractor/hitomi.py
  class HitomiExtractor (line 17) | class HitomiExtractor(Extractor):
    method load_nozomi (line 23) | def load_nozomi(self, query, language="all", headers=None):
  class HitomiGalleryExtractor (line 45) | class HitomiGalleryExtractor(HitomiExtractor, GalleryExtractor):
    method __init__ (line 52) | def __init__(self, match):
    method _init (line 57) | def _init(self):
    method metadata (line 60) | def metadata(self, page):
    method images (line 94) | def images(self, _):
  class HitomiTagExtractor (line 119) | class HitomiTagExtractor(HitomiExtractor):
    method __init__ (line 127) | def __init__(self, match):
    method items (line 135) | def items(self):
  class HitomiIndexExtractor (line 166) | class HitomiIndexExtractor(HitomiTagExtractor):
    method __init__ (line 172) | def __init__(self, match):
    method items (line 176) | def items(self):
  class HitomiSearchExtractor (line 205) | class HitomiSearchExtractor(HitomiExtractor):
    method items (line 211) | def items(self):
    method gallery_ids (line 223) | def gallery_ids(self, tags):
  function _parse_gg (line 250) | def _parse_gg(extr):

FILE: gallery_dl/extractor/hotleak.py
  class HotleakExtractor (line 16) | class HotleakExtractor(Extractor):
    method items (line 24) | def items(self):
    method posts (line 36) | def posts(self):
    method _pagination (line 40) | def _pagination(self, url, params):
  function decode_video_url (line 56) | def decode_video_url(url):
  class HotleakPostExtractor (line 61) | class HotleakPostExtractor(HotleakExtractor):
    method __init__ (line 68) | def __init__(self, match):
    method posts (line 72) | def posts(self):
  class HotleakCreatorExtractor (line 96) | class HotleakCreatorExtractor(HotleakExtractor):
    method __init__ (line 103) | def __init__(self, match):
    method posts (line 107) | def posts(self):
    method _pagination (line 111) | def _pagination(self, url):
  class HotleakCategoryExtractor (line 150) | class HotleakCategoryExtractor(HotleakExtractor):
    method __init__ (line 156) | def __init__(self, match):
    method items (line 160) | def items(self):
  class HotleakSearchExtractor (line 172) | class HotleakSearchExtractor(HotleakExtractor):
    method __init__ (line 178) | def __init__(self, match):
    method items (line 182) | def items(self):

FILE: gallery_dl/extractor/idolcomplex.py
  class IdolcomplexBase (line 18) | class IdolcomplexBase():
    method _init (line 24) | def _init(self):
  class IdolcomplexTagExtractor (line 30) | class IdolcomplexTagExtractor(IdolcomplexBase, sankaku.SankakuTagExtract...
  class IdolcomplexPoolExtractor (line 36) | class IdolcomplexPoolExtractor(IdolcomplexBase, sankaku.SankakuPoolExtra...
  class IdolcomplexPostExtractor (line 42) | class IdolcomplexPostExtractor(IdolcomplexBase, sankaku.SankakuPostExtra...

FILE: gallery_dl/extractor/imagebam.py
  class ImagebamExtractor (line 15) | class ImagebamExtractor(Extractor):
    method __init__ (line 20) | def __init__(self, match):
    method _init (line 24) | def _init(self):
    method _parse_image_page (line 28) | def _parse_image_page(self, path):
  class ImagebamGalleryExtractor (line 41) | class ImagebamGalleryExtractor(ImagebamExtractor):
    method items (line 51) | def items(self):
    method metadata (line 67) | def metadata(self, page):
    method images (line 71) | def images(self, page):
  class ImagebamImageExtractor (line 85) | class ImagebamImageExtractor(ImagebamExtractor):
    method items (line 93) | def items(self):

FILE: gallery_dl/extractor/imagechest.py
  class ImagechestGalleryExtractor (line 18) | class ImagechestGalleryExtractor(GalleryExtractor):
    method __init__ (line 25) | def __init__(self, match):
    method _init (line 30) | def _init(self):
    method metadata (line 36) | def metadata(self, page):
    method _metadata_api (line 53) | def _metadata_api(self, page):
    method images (line 66) | def images(self, page):
  class ImagechestUserExtractor (line 76) | class ImagechestUserExtractor(Extractor):
    method items (line 84) | def items(self):
  class ImagechestAPI (line 111) | class ImagechestAPI():
    method __init__ (line 118) | def __init__(self, extractor, access_token):
    method file (line 122) | def file(self, file_id):
    method post (line 126) | def post(self, post_id):
    method user (line 130) | def user(self, username):
    method _call (line 134) | def _call(self, endpoint):

FILE: gallery_dl/extractor/imagefap.py
  class ImagefapExtractor (line 17) | class ImagefapExtractor(Extractor):
    method request (line 27) | def request(self, url, **kwargs):
  class ImagefapGalleryExtractor (line 39) | class ImagefapGalleryExtractor(ImagefapExtractor):
    method items (line 45) | def items(self):
    method get_job_metadata (line 55) | def get_job_metadata(self, page):
    method get_images (line 77) | def get_images(self):
  class ImagefapImageExtractor (line 106) | class ImagefapImageExtractor(ImagefapExtractor):
    method items (line 112) | def items(self):
    method get_image (line 117) | def get_image(self):
  class ImagefapFolderExtractor (line 140) | class ImagefapFolderExtractor(ImagefapExtractor):
    method items (line 148) | def items(self):
    method galleries (line 159) | def galleries(self):
  class ImagefapUserExtractor (line 196) | class ImagefapUserExtractor(ImagefapExtractor):
    method items (line 205) | def items(self):
    method folders (line 216) | def folders(self):

FILE: gallery_dl/extractor/imagehosts.py
  class ImagehostImageExtractor (line 15) | class ImagehostImageExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 44) | def items(self):
    method get_info (line 79) | def get_info(self, page):
    method metadata (line 82) | def metadata(self, page):
    method not_found (line 86) | def not_found(self, resource=None):
  class ImxtoImageExtractor (line 90) | class ImxtoImageExtractor(ImagehostImageExtractor):
    method __init__ (line 99) | def __init__(self, match):
    method get_info (line 104) | def get_info(self, page):
    method metadata (line 112) | def metadata(self, page):
  class ImxtoGalleryExtractor (line 124) | class ImxtoGalleryExtractor(ImagehostImageExtractor):
    method items (line 131) | def items(self):
  class AcidimgImageExtractor (line 153) | class AcidimgImageExtractor(ImagehostImageExtractor):
    method get_info (line 161) | def get_info(self, page):
  class ImagevenueImageExtractor (line 175) | class ImagevenueImageExtractor(ImagehostImageExtractor):
    method _cookies (line 182) | def _cookies(self):
    method get_info (line 185) | def get_info(self, page):
    method _validate (line 197) | def _validate(self, response):
  class ImagetwistImageExtractor (line 206) | class ImagetwistImageExtractor(ImagehostImageExtractor):
    method _cookies (line 213) | def _cookies(self):
    method get_info (line 216) | def get_info(self, page):
  class ImagetwistGalleryExtractor (line 224) | class ImagetwistGalleryExtractor(ImagehostImageExtractor):
    method items (line 233) | def items(self):
  class ImgadultImageExtractor (line 259) | class ImgadultImageExtractor(ImagehostImageExtractor):
    method get_info (line 266) | def get_info(self, page):
  class ImgspiceImageExtractor (line 279) | class ImgspiceImageExtractor(ImagehostImageExtractor):
    method get_info (line 285) | def get_info(self, page):
  class PixhostImageExtractor (line 294) | class PixhostImageExtractor(ImagehostImageExtractor):
    method get_info (line 303) | def get_info(self, page):
  class PixhostGalleryExtractor (line 310) | class PixhostGalleryExtractor(ImagehostImageExtractor):
    method items (line 319) | def items(self):
  class PostimgImageExtractor (line 327) | class PostimgImageExtractor(ImagehostImageExtractor):
    method get_info (line 335) | def get_info(self, page):
  class PostimgGalleryExtractor (line 342) | class PostimgGalleryExtractor(ImagehostImageExtractor):
    method items (line 351) | def items(self):
  class TurboimagehostImageExtractor (line 384) | class TurboimagehostImageExtractor(ImagehostImageExtractor):
    method get_info (line 391) | def get_info(self, page):
  class TurboimagehostGalleryExtractor (line 396) | class TurboimagehostGalleryExtractor(ImagehostImageExtractor):
    method items (line 404) | def items(self):
  class ViprImageExtractor (line 424) | class ViprImageExtractor(ImagehostImageExtractor):
    method get_info (line 430) | def get_info(self, page):
  class ImgclickImageExtractor (line 438) | class ImgclickImageExtractor(ImagehostImageExtractor):
    method get_info (line 445) | def get_info(self, page):
  class FappicImageExtractor (line 451) | class FappicImageExtractor(ImagehostImageExtractor):
    method __init__ (line 458) | def __init__(self, match):
    method get_info (line 468) | def get_info(self, page):
  class PicstateImageExtractor (line 474) | class PicstateImageExtractor(ImagehostImageExtractor):
    method get_info (line 480) | def get_info(self, page):
  class ImgdriveImageExtractor (line 487) | class ImgdriveImageExtractor(ImagehostImageExtractor):
    method __init__ (line 494) | def __init__(self, match):
    method get_info (line 500) | def get_info(self, page):
  class SilverpicImageExtractor (line 508) | class SilverpicImageExtractor(ImagehostImageExtractor):
    method get_info (line 517) | def get_info(self, page):
    method metadata (line 522) | def metadata(self, page):
  class ImgpvImageExtractor (line 533) | class ImgpvImageExtractor(ImagehostImageExtractor):
    method get_info (line 541) | def get_info(self, page):
    method metadata (line 546) | def metadata(self, page):

FILE: gallery_dl/extractor/imagepond.py
  class ImagepondExtractor (line 17) | class ImagepondExtractor(Extractor):
    method _pagination (line 26) | def _pagination(self, url, callback=None, pattern=None):
  class ImagepondFileExtractor (line 52) | class ImagepondFileExtractor(ImagepondExtractor):
    method items (line 57) | def items(self):
  class ImagepondAlbumExtractor (line 109) | class ImagepondAlbumExtractor(ImagepondExtractor):
    method items (line 114) | def items(self):
    method _extract_metadata_album (line 122) | def _extract_metadata_album(self, page):
  class ImagepondUserExtractor (line 131) | class ImagepondUserExtractor(ImagepondExtractor):
    method items (line 136) | def items(self):

FILE: gallery_dl/extractor/imgbb.py
  class ImgbbExtractor (line 15) | class ImgbbExtractor(Extractor):
    method items (line 26) | def items(self):
    method login (line 35) | def login(self):
    method _login_impl (line 45) | def _login_impl(self, username, password):
    method _pagination (line 66) | def _pagination(self, page, url, params):
  class ImgbbAlbumExtractor (line 113) | class ImgbbAlbumExtractor(ImgbbExtractor):
    method posts (line 119) | def posts(self):
  class ImgbbImageExtractor (line 144) | class ImgbbImageExtractor(ImgbbExtractor):
    method posts (line 149) | def posts(self):
  class ImgbbUserExtractor (line 178) | class ImgbbUserExtractor(ImgbbExtractor):
    method posts (line 185) | def posts(self):

FILE: gallery_dl/extractor/imgbox.py
  class ImgboxExtractor (line 15) | class ImgboxExtractor(Extractor):
    method items (line 20) | def items(self):
    method get_job_metadata (line 33) | def get_job_metadata(self):
    method get_image_keys (line 37) | def get_image_keys(self):
    method get_image_metadata (line 41) | def get_image_metadata(self, page):
    method get_image_url (line 49) | def get_image_url(self, page):
  class ImgboxGalleryExtractor (line 54) | class ImgboxGalleryExtractor(AsynchronousMixin, ImgboxExtractor):
    method __init__ (line 63) | def __init__(self, match):
    method get_job_metadata (line 68) | def get_job_metadata(self):
    method get_image_keys (line 83) | def get_image_keys(self):
  class ImgboxImageExtractor (line 87) | class ImgboxImageExtractor(ImgboxExtractor):
    method __init__ (line 97) | def __init__(self, match):
    method get_image_keys (line 101) | def get_image_keys(self):
    method get_image_metadata (line 104) | def get_image_metadata(self, page):

FILE: gallery_dl/extractor/imgpile.py
  class ImgpileExtractor (line 17) | class ImgpileExtractor(Extractor):
  class ImgpilePostExtractor (line 26) | class ImgpilePostExtractor(ImgpileExtractor):
    method items (line 31) | def items(self):
    method _extract_files (line 60) | def _extract_files(self, extr):
  class ImgpileUserExtractor (line 76) | class ImgpileUserExtractor(ImgpileExtractor):
    method items (line 81) | def items(self):

FILE: gallery_dl/extractor/imgth.py
  class ImgthGalleryExtractor (line 15) | class ImgthGalleryExtractor(GalleryExtractor):
    method __init__ (line 22) | def __init__(self, match):
    method metadata (line 27) | def metadata(self, page):
    method images (line 41) | def images(self, page):

FILE: gallery_dl/extractor/imgur.py
  class ImgurExtractor (line 17) | class ImgurExtractor(Extractor):
    method __init__ (line 22) | def __init__(self, match):
    method _init (line 26) | def _init(self):
    method _prepare (line 30) | def _prepare(self, image):
    method _validate (line 47) | def _validate(self, response):
    method _items_queue (line 51) | def _items_queue(self, items):
  class ImgurImageExtractor (line 65) | class ImgurImageExtractor(ImgurExtractor):
    method items (line 74) | def items(self):
  class ImgurAlbumExtractor (line 90) | class ImgurAlbumExtractor(ImgurExtractor):
    method items (line 99) | def items(self):
  class ImgurGalleryExtractor (line 126) | class ImgurGalleryExtractor(ImgurExtractor):
    method items (line 132) | def items(self):
  class ImgurUserExtractor (line 142) | class ImgurUserExtractor(ImgurExtractor):
    method items (line 149) | def items(self):
  class ImgurFavoriteExtractor (line 153) | class ImgurFavoriteExtractor(ImgurExtractor):
    method items (line 159) | def items(self):
  class ImgurFavoriteFolderExtractor (line 163) | class ImgurFavoriteFolderExtractor(ImgurExtractor):
    method __init__ (line 169) | def __init__(self, match):
    method items (line 173) | def items(self):
  class ImgurMeExtractor (line 178) | class ImgurMeExtractor(ImgurExtractor):
    method items (line 184) | def items(self):
  class ImgurSubredditExtractor (line 195) | class ImgurSubredditExtractor(ImgurExtractor):
    method items (line 201) | def items(self):
  class ImgurTagExtractor (line 205) | class ImgurTagExtractor(ImgurExtractor):
    method items (line 211) | def items(self):
  class ImgurSearchExtractor (line 215) | class ImgurSearchExtractor(ImgurExtractor):
    method items (line 221) | def items(self):
  class ImgurAPI (line 226) | class ImgurAPI():
    method __init__ (line 231) | def __init__(self, extractor):
    method account_submissions (line 236) | def account_submissions(self, account):
    method account_favorites (line 240) | def account_favorites(self, account):
    method account_favorites_folder (line 244) | def account_favorites_folder(self, account, folder_id):
    method accounts_me_allposts (line 248) | def accounts_me_allposts(self):
    method accounts_me_hiddenalbums (line 257) | def accounts_me_hiddenalbums(self):
    method gallery_search (line 266) | def gallery_search(self, query):
    method gallery_subreddit (line 271) | def gallery_subreddit(self, subreddit):
    method gallery_tag (line 275) | def gallery_tag(self, tag):
    method image (line 279) | def image(self, image_hash):
    method album (line 284) | def album(self, album_hash):
    method gallery (line 289) | def gallery(self, gallery_hash):
    method _call (line 293) | def _call(self, endpoint, params=None, headers=None):
    method _pagination (line 305) | def _pagination(self, endpoint, params=None, key=None):
    method _pagination_v2 (line 317) | def _pagination_v2(self, endpoint, params=None, key=None):

FILE: gallery_dl/extractor/imhentai.py
  class ImhentaiExtractor (line 15) | class ImhentaiExtractor(BaseExtractor):
    method _pagination (line 18) | def _pagination(self, url):
  class ImhentaiGalleryExtractor (line 80) | class ImhentaiGalleryExtractor(ImhentaiExtractor, GalleryExtractor):
    method __init__ (line 85) | def __init__(self, match):
    method metadata (line 90) | def metadata(self, page):
    method _split (line 114) | def _split(self, html):
    method images (line 125) | def images(self, page):
  class ImhentaiTagExtractor (line 156) | class ImhentaiTagExtractor(ImhentaiExtractor):
    method items (line 164) | def items(self):
  class ImhentaiSearchExtractor (line 169) | class ImhentaiSearchExtractor(ImhentaiExtractor):
    method items (line 175) | def items(self):

FILE: gallery_dl/extractor/inkbunny.py
  class InkbunnyExtractor (line 18) | class InkbunnyExtractor(Extractor):
    method _init (line 26) | def _init(self):
    method items (line 29) | def items(self):
    method posts (line 63) | def posts(self):
    method metadata (line 66) | def metadata(self):
  class InkbunnyUserExtractor (line 70) | class InkbunnyUserExtractor(InkbunnyExtractor):
    method __init__ (line 76) | def __init__(self, match):
    method posts (line 88) | def posts(self):
  class InkbunnyPoolExtractor (line 100) | class InkbunnyPoolExtractor(InkbunnyExtractor):
    method __init__ (line 109) | def __init__(self, match):
    method metadata (line 119) | def metadata(self):
    method posts (line 122) | def posts(self):
  class InkbunnyFavoriteExtractor (line 130) | class InkbunnyFavoriteExtractor(InkbunnyExtractor):
    method __init__ (line 141) | def __init__(self, match):
    method metadata (line 151) | def metadata(self):
    method posts (line 164) | def posts(self):
  class InkbunnyUnreadExtractor (line 174) | class InkbunnyUnreadExtractor(InkbunnyExtractor):
    method __init__ (line 182) | def __init__(self, match):
    method posts (line 186) | def posts(self):
  class InkbunnySearchExtractor (line 194) | class InkbunnySearchExtractor(InkbunnyExtractor):
    method __init__ (line 202) | def __init__(self, match):
    method metadata (line 206) | def metadata(self):
    method posts (line 209) | def posts(self):
  class InkbunnyFollowingExtractor (line 228) | class InkbunnyFollowingExtractor(InkbunnyExtractor):
    method __init__ (line 238) | def __init__(self, match):
    method items (line 243) | def items(self):
  class InkbunnyPostExtractor (line 267) | class InkbunnyPostExtractor(InkbunnyExtractor):
    method __init__ (line 273) | def __init__(self, match):
    method posts (line 277) | def posts(self):
  class InkbunnyAPI (line 284) | class InkbunnyAPI():
    method __init__ (line 290) | def __init__(self, extractor):
    method detail (line 294) | def detail(self, submissions):
    method search (line 311) | def search(self, params):
    method set_allowed_ratings (line 315) | def set_allowed_ratings(self, nudity=True, sexual=True,
    method authenticate (line 326) | def authenticate(self, invalidate=False):
    method _authenticate_impl (line 341) | def _authenticate_impl(self, username, password):
    method _call (line 352) | def _call(self, endpoint, params):
    method _pagination_search (line 368) | def _pagination_search(self, params):

FILE: gallery_dl/extractor/instagram.py
  class InstagramExtractor (line 21) | class InstagramExtractor(Extractor):
    method __init__ (line 33) | def __init__(self, match):
    method _init (line 37) | def _init(self):
    method items (line 62) | def items(self):
    method metadata (line 121) | def metadata(self):
    method posts (line 124) | def posts(self):
    method finalize (line 127) | def finalize(self, status):
    method request (line 132) | def request(self, url, **kwargs):
    method login (line 160) | def login(self):
    method _login_impl (line 172) | def _login_impl(self, username, password):
    method _parse_post_rest (line 177) | def _parse_post_rest(self, post):
    method _parse_post_graphql (line 339) | def _parse_post_graphql(self, post):
    method _extract_tagged_users (line 426) | def _extract_tagged_users(self, src, dest):
    method _extract_pinned (line 459) | def _extract_pinned(self, post):
    method _init_cursor (line 463) | def _init_cursor(self):
    method _update_cursor (line 471) | def _update_cursor(self, cursor):
    method _assign_user (line 477) | def _assign_user(self, user):
  class InstagramPostExtractor (line 494) | class InstagramPostExtractor(InstagramExtractor):
    method __init__ (line 503) | def __init__(self, match):
    method posts (line 508) | def posts(self):
  class InstagramUserExtractor (line 522) | class InstagramUserExtractor(Dispatch, InstagramExtractor):
    method items (line 527) | def items(self):
  class InstagramPostsExtractor (line 541) | class InstagramPostsExtractor(InstagramExtractor):
    method posts (line 547) | def posts(self):
    method _extract_pinned (line 551) | def _extract_pinned(self, post):
  class InstagramReelsExtractor (line 558) | class InstagramReelsExtractor(InstagramExtractor):
    method posts (line 564) | def posts(self):
    method _extract_pinned (line 568) | def _extract_pinned(self, post):
  class InstagramTaggedExtractor (line 575) | class InstagramTaggedExtractor(InstagramExtractor):
    method metadata (line 581) | def metadata(self):
    method posts (line 597) | def posts(self):
  class InstagramGuideExtractor (line 601) | class InstagramGuideExtractor(InstagramExtractor):
    method __init__ (line 607) | def __init__(self, match):
    method metadata (line 611) | def metadata(self):
    method posts (line 614) | def posts(self):
  class InstagramSavedExtractor (line 618) | class InstagramSavedExtractor(InstagramExtractor):
    method posts (line 624) | def posts(self):
  class InstagramCollectionExtractor (line 628) | class InstagramCollectionExtractor(InstagramExtractor):
    method __init__ (line 634) | def __init__(self, match):
    method metadata (line 638) | def metadata(self):
    method posts (line 644) | def posts(self):
  class InstagramStoriesTrayExtractor (line 648) | class InstagramStoriesTrayExtractor(InstagramExtractor):
    method items (line 654) | def items(self):
  class InstagramStoriesExtractor (line 662) | class InstagramStoriesExtractor(InstagramExtractor):
    method __init__ (line 670) | def __init__(self, match):
    method posts (line 683) | def posts(self):
  class InstagramHighlightsExtractor (line 712) | class InstagramHighlightsExtractor(InstagramExtractor):
    method posts (line 718) | def posts(self):
  class InstagramFollowersExtractor (line 723) | class InstagramFollowersExtractor(InstagramExtractor):
    method items (line 729) | def items(self):
  class InstagramFollowingExtractor (line 737) | class InstagramFollowingExtractor(InstagramExtractor):
    method items (line 743) | def items(self):
  class InstagramTagExtractor (line 751) | class InstagramTagExtractor(InstagramExtractor):
    method metadata (line 758) | def metadata(self):
    method posts (line 761) | def posts(self):
  class InstagramInfoExtractor (line 765) | class InstagramInfoExtractor(InstagramExtractor):
    method items (line 771) | def items(self):
  class InstagramAvatarExtractor (line 781) | class InstagramAvatarExtractor(InstagramExtractor):
    method posts (line 787) | def posts(self):
  class InstagramRestAPI (line 819) | class InstagramRestAPI():
    method __init__ (line 821) | def __init__(self, extractor):
    method guide (line 835) | def guide(self, guide_id):
    method guide_media (line 840) | def guide_media(self, guide_id):
    method highlights_media (line 844) | def highlights_media(self, user_id, chunk_size=5):
    method highlights_tray (line 861) | def highlights_tray(self, user_id):
    method media (line 865) | def media(self, shortcode):
    method reels_media (line 871) | def reels_media(self, reel_ids):
    method reels_tray (line 879) | def reels_tray(self):
    method tags_media (line 883) | def tags_media(self, tag):
    method tags_sections (line 888) | def tags_sections(self, tag):
    method user_by_id (line 899) | def user_by_id(self, user_id):
    method _user_by_id_impl (line 903) | def _user_by_id_impl(self, user_id):
    method user_by_name (line 910) | def user_by_name(self, username):
    method _user_by_name_impl (line 914) | def _user_by_name_impl(self, username):
    method user_by_search (line 923) | def user_by_search(self, username):
    method _user_by_search_impl (line 927) | def _user_by_search_impl(self, username):
    method user_by_web (line 941) | def user_by_web(self, username):
    method _user_by_web_impl (line 945) | def _user_by_web_impl(self, username):
    method user_by_screen_name (line 968) | def user_by_screen_name(self, screen_name):
    method user_id (line 983) | def user_id(self, screen_name, check_private=True):
    method user_clips (line 999) | def user_clips(self, user_id):
    method user_collection (line 1009) | def user_collection(self, collection_id):
    method user_feed (line 1014) | def user_feed(self, user_id):
    method user_followers (line 1019) | def user_followers(self, user_id):
    method user_following (line 1024) | def user_following(self, user_id):
    method user_saved (line 1029) | def user_saved(self):
    method user_tagged (line 1034) | def user_tagged(self, user_id):
    method _call (line 1039) | def _call(self, endpoint, **kwargs):
    method _pagination (line 1061) | def _pagination(self, endpoint, params=None, media=False):
    method _pagination_post (line 1080) | def _pagination_post(self, endpoint, params):
    method _pagination_sections (line 1095) | def _pagination_sections(self, endpoint, params):
    method _pagination_guides (line 1109) | def _pagination_guides(self, endpoint):
    method _pagination_following (line 1124) | def _pagination_following(self, endpoint, params):
  class InstagramGraphqlAPI (line 1139) | class InstagramGraphqlAPI():
    method __init__ (line 1141) | def __init__(self, extractor):
    method _unsupported (line 1153) | def _unsupported(self, _=None):
    method highlights_tray (line 1157) | def highlights_tray(self, user_id):
    method media (line 1172) | def media(self, shortcode):
    method tags_media (line 1184) | def tags_media(self, tag):
    method user_clips (line 1190) | def user_clips(self, user_id):
    method user_feed (line 1195) | def user_feed(self, user_id):
    method user_tagged (line 1200) | def user_tagged(self, user_id):
    method _call (line 1205) | def _call(self, query_hash, variables):
    method _pagination (line 1225) | def _pagination(self, query_hash, variables,
  function id_from_shortcode (line 1249) | def id_from_shortcode(shortcode):
  function shortcode_from_id (line 1253) | def shortcode_from_id(post_id):

FILE: gallery_dl/extractor/issuu.py
  class IssuuBase (line 15) | class IssuuBase():
  class IssuuPublicationExtractor (line 21) | class IssuuPublicationExtractor(IssuuBase, GalleryExtractor):
    method metadata (line 31) | def metadata(self, page):
    method images (line 48) | def images(self, page):
  class IssuuUserExtractor (line 53) | class IssuuUserExtractor(IssuuBase, Extractor):
    method items (line 59) | def items(self):

FILE: gallery_dl/extractor/itaku.py
  class ItakuExtractor (line 18) | class ItakuExtractor(Extractor):
    method _init (line 27) | def _init(self):
    method items (line 31) | def items(self):
  class ItakuGalleryExtractor (line 85) | class ItakuGalleryExtractor(ItakuExtractor):
    method images (line 91) | def images(self):
  class ItakuPostsExtractor (line 99) | class ItakuPostsExtractor(ItakuExtractor):
    method posts (line 109) | def posts(self):
  class ItakuStarsExtractor (line 117) | class ItakuStarsExtractor(ItakuExtractor):
    method images (line 123) | def images(self):
  class ItakuFollowingExtractor (line 132) | class ItakuFollowingExtractor(ItakuExtractor):
    method users (line 137) | def users(self):
  class ItakuFollowersExtractor (line 143) | class ItakuFollowersExtractor(ItakuExtractor):
    method users (line 148) | def users(self):
  class ItakuBookmarksExtractor (line 154) | class ItakuBookmarksExtractor(ItakuExtractor):
    method _init (line 160) | def _init(self):
    method images (line 165) | def images(self):
    method users (line 170) | def users(self):
  class ItakuUserExtractor (line 176) | class ItakuUserExtractor(Dispatch, ItakuExtractor):
    method items (line 181) | def items(self):
  class ItakuImageExtractor (line 192) | class ItakuImageExtractor(ItakuExtractor):
    method images (line 197) | def images(self):
  class ItakuPostExtractor (line 201) | class ItakuPostExtractor(ItakuExtractor):
    method posts (line 210) | def posts(self):
  class ItakuSearchExtractor (line 214) | class ItakuSearchExtractor(ItakuExtractor):
    method images (line 219) | def images(self):
  class ItakuAPI (line 244) | class ItakuAPI():
    method __init__ (line 246) | def __init__(self, extractor):
    method galleries_images (line 253) | def galleries_images(self, params, path=""):
    method posts (line 267) | def posts(self, params):
    method user_profiles (line 280) | def user_profiles(self, params):
    method image (line 292) | def image(self, image_id):
    method post (line 296) | def post(self, post_id):
    method user (line 300) | def user(self, username):
    method user_id (line 303) | def user_id(self, username):
    method _call (line 308) | def _call(self, endpoint, params=None):
    method _pagination (line 314) | def _pagination(self, endpoint, params, extend=None):
    method _order (line 330) | def _order(self):

FILE: gallery_dl/extractor/itchio.py
  class ItchioGameExtractor (line 15) | class ItchioGameExtractor(Extractor):
    method __init__ (line 26) | def __init__(self, match):
    method items (line 30) | def items(self):

FILE: gallery_dl/extractor/iwara.py
  class IwaraExtractor (line 17) | class IwaraExtractor(Extractor):
    method _init (line 25) | def _init(self):
    method items_image (line 37) | def items_image(self, images, user=None):
    method items_video (line 66) | def items_video(self, videos, user=None):
    method items_user (line 93) | def items_user(self, users, key=None):
    method items_by_type (line 104) | def items_by_type(self, type, results):
    method extract_media_info (line 114) | def extract_media_info(self, item, key, include_file_info=True):
    method extract_user_info (line 147) | def extract_user_info(self, profile):
    method extract_video_source (line 160) | def extract_video_source(self, sources):
    method extract_video_source_custom (line 164) | def extract_video_source_custom(self, sources):
    method _user_params (line 176) | def _user_params(self):
    method _sort_formats (line 183) | def _sort_formats(self, fmt):
  class IwaraUserExtractor (line 189) | class IwaraUserExtractor(Dispatch, IwaraExtractor):
    method items (line 194) | def items(self):
  class IwaraUserImagesExtractor (line 204) | class IwaraUserImagesExtractor(IwaraExtractor):
    method items (line 209) | def items(self):
  class IwaraUserVideosExtractor (line 214) | class IwaraUserVideosExtractor(IwaraExtractor):
    method items (line 219) | def items(self):
  class IwaraUserPlaylistsExtractor (line 224) | class IwaraUserPlaylistsExtractor(IwaraExtractor):
    method items (line 229) | def items(self):
  class IwaraFollowingExtractor (line 239) | class IwaraFollowingExtractor(IwaraExtractor):
    method items (line 244) | def items(self):
  class IwaraFollowersExtractor (line 249) | class IwaraFollowersExtractor(IwaraExtractor):
    method items (line 254) | def items(self):
  class IwaraImageExtractor (line 259) | class IwaraImageExtractor(IwaraExtractor):
    method items (line 265) | def items(self):
  class IwaraVideoExtractor (line 269) | class IwaraVideoExtractor(IwaraExtractor):
    method items (line 275) | def items(self):
  class IwaraPlaylistExtractor (line 279) | class IwaraPlaylistExtractor(IwaraExtractor):
    method items (line 285) | def items(self):
  class IwaraFavoriteExtractor (line 289) | class IwaraFavoriteExtractor(IwaraExtractor):
    method items (line 294) | def items(self):
  class IwaraSearchExtractor (line 299) | class IwaraSearchExtractor(IwaraExtractor):
    method items (line 305) | def items(self):
  class IwaraTagExtractor (line 314) | class IwaraTagExtractor(IwaraExtractor):
    method items (line 320) | def items(self):
  class IwaraAPI (line 327) | class IwaraAPI():
    method __init__ (line 331) | def __init__(self, extractor):
    method image (line 345) | def image(self, image_id):
    method video (line 349) | def video(self, video_id):
    method playlist (line 353) | def playlist(self, playlist_id):
    method detail (line 357) | def detail(self, media):
    method images (line 361) | def images(self, params):
    method videos (line 366) | def videos(self, params):
    method playlists (line 371) | def playlists(self, params):
    method media (line 375) | def media(self, type, params):
    method favorites (line 380) | def favorites(self, type):
    method search (line 387) | def search(self, type, query):
    method profile (line 392) | def profile(self, username):
    method user_following (line 396) | def user_following(self, user_id):
    method user_followers (line 400) | def user_followers(self, user_id):
    method source (line 404) | def source(self, file_url):
    method authenticate (line 415) | def authenticate(self):
    method _authenticate_impl (line 419) | def _authenticate_impl(self, username):
    method _call (line 452) | def _call(self, endpoint, params=None, headers=None):
    method _pagination (line 460) | def _pagination(self, endpoint, params=None):
  function _refresh_token_cache (line 478) | def _refresh_token_cache(username):

FILE: gallery_dl/extractor/joyreactor.py
  class JoyreactorExtractor (line 18) | class JoyreactorExtractor(Extractor):
    method __init__ (line 28) | def __init__(self, match):
    method _init (line 32) | def _init(self):
    method items (line 41) | def items(self):
    method _extract_files (line 85) | def _extract_files(self, html):
    method _request_graphql (line 123) | def _request_graphql(self, opname, variables):
    method _pagination (line 137) | def _pagination(self, url, opname, variables):
  class JoyreactorPostExtractor (line 167) | class JoyreactorPostExtractor(JoyreactorExtractor):
    method posts (line 173) | def posts(self):
  class JoyreactorTagExtractor (line 191) | class JoyreactorTagExtractor(JoyreactorExtractor):
    method posts (line 199) | def posts(self):
  class JoyreactorUserExtractor (line 214) | class JoyreactorUserExtractor(JoyreactorExtractor):
    method posts (line 221) | def posts(self):
  class JoyreactorSearchExtractor (line 235) | class JoyreactorSearchExtractor(JoyreactorExtractor):
    method posts (line 243) | def posts(self):

FILE: gallery_dl/extractor/jschan.py
  class JschanExtractor (line 14) | class JschanExtractor(BaseExtractor):
  class JschanThreadExtractor (line 26) | class JschanThreadExtractor(JschanExtractor):
    method items (line 36) | def items(self):
  class JschanBoardExtractor (line 56) | class JschanBoardExtractor(JschanExtractor):
    method items (line 63) | def items(self):

FILE: gallery_dl/extractor/kabeuchi.py
  class KabeuchiUserExtractor (line 15) | class KabeuchiUserExtractor(Extractor):
    method items (line 26) | def items(self):
    method posts (line 46) | def posts(self, uid):
    method _pagination (line 54) | def _pagination(self, target_id):

FILE: gallery_dl/extractor/kaliscan.py
  class KaliscanBase (line 15) | class KaliscanBase():
    method manga_data (line 20) | def manga_data(self, manga_slug, page=None):
  class KaliscanChapterExtractor (line 59) | class KaliscanChapterExtractor(KaliscanBase, ChapterExtractor):
    method metadata (line 64) | def metadata(self, page):
    method images (line 85) | def images(self, page):
  class KaliscanMangaExtractor (line 96) | class KaliscanMangaExtractor(KaliscanBase, MangaExtractor):
    method chapters (line 102) | def chapters(self, page):

FILE: gallery_dl/extractor/keenspot.py
  class KeenspotComicExtractor (line 15) | class KeenspotComicExtractor(Extractor):
    method __init__ (line 25) | def __init__(self, match):
    method items (line 35) | def items(self):
    method _first (line 72) | def _first(self, page):
    method _next_needle (line 119) | def _next_needle(self, page):
    method _next_link (line 123) | def _next_link(self, page):
    method _next_id (line 126) | def _next_id(self, page):
    method _next_lastblood (line 130) | def _next_lastblood(self, page):
    method _next_brawl (line 134) | def _next_brawl(self, page):

FILE: gallery_dl/extractor/kemono.py
  class KemonoExtractor (line 22) | class KemonoExtractor(Extractor):
    method __init__ (line 31) | def __init__(self, match):
    method _init (line 38) | def _init(self):
    method items (line 53) | def items(self):
    method login (line 198) | def login(self):
    method _login_impl (line 205) | def _login_impl(self, username, password):
    method _file (line 222) | def _file(self, post):
    method _attachments (line 229) | def _attachments(self, post):
    method _inline (line 234) | def _inline(self, post):
    method _build_file_generators (line 238) | def _build_file_generators(self, filetypes):
    method _parse_datetime (line 252) | def _parse_datetime(self, date_string):
    method _revisions (line 257) | def _revisions(self, posts):
    method _revisions_get (line 261) | def _revisions_get(self, post):
    method _revisions_post (line 271) | def _revisions_post(self, post):
    method _revisions_all (line 308) | def _revisions_all(self, post):
    method _revision_hash (line 323) | def _revision_hash(self, revision):
    method _discord_server_info (line 341) | def _discord_server_info(self, server_id):
  function _validate (line 349) | def _validate(response):
  class KemonoUserExtractor (line 354) | class KemonoUserExtractor(KemonoExtractor):
    method __init__ (line 360) | def __init__(self, match):
    method posts (line 364) | def posts(self):
  class KemonoPostsExtractor (line 377) | class KemonoPostsExtractor(KemonoExtractor):
    method posts (line 383) | def posts(self):
  class KemonoPostExtractor (line 389) | class KemonoPostExtractor(KemonoExtractor):
    method __init__ (line 395) | def __init__(self, match):
    method posts (line 399) | def posts(self):
  class KemonoDiscordExtractor (line 418) | class KemonoDiscordExtractor(KemonoExtractor):
    method items (line 428) | def items(self):
  class KemonoDiscordServerExtractor (line 525) | class KemonoDiscordServerExtractor(KemonoExtractor):
    method items (line 530) | def items(self):
  class KemonoFavoriteExtractor (line 543) | class KemonoFavoriteExtractor(KemonoExtractor):
    method items (line 549) | def items(self):
  class KemonoArtistsExtractor (line 591) | class KemonoArtistsExtractor(KemonoExtractor):
    method items (line 597) | def items(self):
  class KemonoAPI (line 627) | class KemonoAPI():
    method __init__ (line 633) | def __init__(self, extractor):
    method posts (line 638) | def posts(self, offset=0, query=None, tags=None):
    method file (line 643) | def file(self, file_hash):
    method creators (line 647) | def creators(self):
    method creator_posts (line 651) | def creator_posts(self, service, creator_id,
    method creator_posts_expand (line 657) | def creator_posts_expand(self, service, creator_id,
    method creator_announcements (line 664) | def creator_announcements(self, service, creator_id):
    method creator_dms (line 668) | def creator_dms(self, service, creator_id):
    method creator_fancards (line 672) | def creator_fancards(self, service, creator_id):
    method creator_post (line 676) | def creator_post(self, service, creator_id, post_id):
    method creator_post_comments (line 680) | def creator_post_comments(self, service, creator_id, post_id):
    method creator_post_revisions (line 684) | def creator_post_revisions(self, service, creator_id, post_id):
    method creator_profile (line 688) | def creator_profile(self, service, creator_id):
    method creator_links (line 692) | def creator_links(self, service, creator_id):
    method creator_tags (line 696) | def creator_tags(self, service, creator_id):
    method discord_channel (line 700) | def discord_channel(self, channel_id, post_count=None):
    method discord_channel_lookup (line 707) | def discord_channel_lookup(self, server_id):
    method discord_server (line 711) | def discord_server(self, server_id):
    method account_favorites (line 715) | def account_favorites(self, type):
    method _call (line 720) | def _call(self, endpoint, params=None, headers=None, fatal=True):
    method _pagination (line 730) | def _pagination(self, endpoint, params, batch=50, key=None):
    method _pagination_reverse (line 747) | def _pagination_reverse(self, endpoint, params, batch, count):

FILE: gallery_dl/extractor/khinsider.py
  class KhinsiderSoundtrackExtractor (line 15) | class KhinsiderSoundtrackExtractor(AsynchronousMixin, Extractor):
    method __init__ (line 27) | def __init__(self, match):
    method items (line 31) | def items(self):
    method metadata (line 52) | def metadata(self, page):
    method _extract_tracks (line 69) | def _extract_tracks(self, page):
    method _extract_covers (line 94) | def _extract_covers(self, page):

FILE: gallery_dl/extractor/komikcast.py
  class KomikcastBase (line 18) | class KomikcastBase():
    method parse_chapter_string (line 23) | def parse_chapter_string(self, chapter_string, data=None):
  class KomikcastChapterExtractor (line 45) | class KomikcastChapterExtractor(KomikcastBase, ChapterExtractor):
    method metadata (line 50) | def metadata(self, page):
    method images (line 54) | def images(self, page):
  class KomikcastMangaExtractor (line 64) | class KomikcastMangaExtractor(KomikcastBase, MangaExtractor):
    method chapters (line 70) | def chapters(self, page):
    method metadata (line 83) | def metadata(self, page):

FILE: gallery_dl/extractor/koofr.py
  class KoofrSharedExtractor (line 15) | class KoofrSharedExtractor(Extractor):
    method items (line 28) | def items(self):
    method _extract_files (line 98) | def _extract_files(self, dir, url, params, headers):

FILE: gallery_dl/extractor/leakgallery.py
  class LeakgalleryExtractor (line 15) | class LeakgalleryExtractor(Extractor):
    method _yield_media_items (line 21) | def _yield_media_items(self, medias, creator=None):
    method _pagination (line 43) | def _pagination(self, type, base, params=None, creator=None, pnum=1):
  class LeakgalleryUserExtractor (line 63) | class LeakgalleryUserExtractor(LeakgalleryExtractor):
    method items (line 74) | def items(self):
  class LeakgalleryTrendingExtractor (line 81) | class LeakgalleryTrendingExtractor(LeakgalleryExtractor):
    method items (line 87) | def items(self):
  class LeakgalleryMostlikedExtractor (line 93) | class LeakgalleryMostlikedExtractor(LeakgalleryExtractor):
    method items (line 99) | def items(self):
  class LeakgalleryPostExtractor (line 104) | class LeakgalleryPostExtractor(LeakgalleryExtractor):
    method items (line 110) | def items(self):

FILE: gallery_dl/extractor/lensdump.py
  class LensdumpBase (line 15) | class LensdumpBase():
    method _pagination (line 20) | def _pagination(self, page, begin, end):
  class LensdumpAlbumExtractor (line 32) | class LensdumpAlbumExtractor(LensdumpBase, GalleryExtractor):
    method __init__ (line 37) | def __init__(self, match):
    method metadata (line 45) | def metadata(self, page):
    method images (line 52) | def images(self, page):
  class LensdumpAlbumsExtractor (line 76) | class LensdumpAlbumsExtractor(LensdumpBase, Extractor):
    method items (line 82) | def items(self):
  class LensdumpImageExtractor (line 97) | class LensdumpImageExtractor(LensdumpBase, Extractor):
    method items (line 107) | def items(self):

FILE: gallery_dl/extractor/lexica.py
  class LexicaSearchExtractor (line 15) | class LexicaSearchExtractor(Extractor):
    method __init__ (line 25) | def __init__(self, match):
    method items (line 30) | def items(self):
    method posts (line 42) | def posts(self):

FILE: gallery_dl/extractor/lightroom.py
  class LightroomGalleryExtractor (line 13) | class LightroomGalleryExtractor(Extractor):
    method __init__ (line 23) | def __init__(self, match):
    method items (line 27) | def items(self):
    method metadata (line 41) | def metadata(self, album):
    method images (line 50) | def images(self, album):

FILE: gallery_dl/extractor/listal.py
  class ListalExtractor (line 15) | class ListalExtractor(Extractor):
    method items (line 23) | def items(self):
    method _pagination (line 31) | def _pagination(self, base_url, pnum=None):
    method _extract_image (line 48) | def _extract_image(self, image_id):
  class ListalImageExtractor (line 66) | class ListalImageExtractor(ListalExtractor):
    method image_ids (line 72) | def image_ids(self):
  class ListalPeopleExtractor (line 76) | class ListalPeopleExtractor(ListalExtractor):
    method image_ids (line 82) | def image_ids(self):

FILE: gallery_dl/extractor/livedoor.py
  class LivedoorExtractor (line 15) | class LivedoorExtractor(Extractor):
    method __init__ (line 23) | def __init__(self, match):
    method items (line 27) | def items(self):
    method posts (line 34) | def posts(self):
    method _load (line 37) | def _load(self, data, body):
    method _images (line 54) | def _images(self, post):
  class LivedoorBlogExtractor (line 82) | class LivedoorBlogExtractor(LivedoorExtractor):
    method posts (line 88) | def posts(self):
  class LivedoorPostExtractor (line 102) | class LivedoorPostExtractor(LivedoorExtractor):
    method __init__ (line 108) | def __init__(self, match):
    method posts (line 112) | def posts(self):

FILE: gallery_dl/extractor/lofter.py
  class LofterExtractor (line 13) | class LofterExtractor(Extractor):
    method _init (line 21) | def _init(self):
    method items (line 24) | def items(self):
    method posts (line 70) | def posts(self):
  class LofterPostExtractor (line 74) | class LofterPostExtractor(LofterExtractor):
    method posts (line 80) | def posts(self):
  class LofterBlogPostsExtractor (line 86) | class LofterBlogPostsExtractor(LofterExtractor):
    method posts (line 97) | def posts(self):
  class LofterAPI (line 102) | class LofterAPI():
    method __init__ (line 104) | def __init__(self, extractor):
    method blog_posts (line 107) | def blog_posts(self, blog_name):
    method post (line 117) | def post(self, blog_id, post_id):
    method _call (line 125) | def _call(self, endpoint, data):
    method _pagination (line 143) | def _pagination(self, endpoint, params):

FILE: gallery_dl/extractor/lolisafe.py
  class LolisafeExtractor (line 15) | class LolisafeExtractor(BaseExtractor):
  class LolisafeAlbumExtractor (line 26) | class LolisafeAlbumExtractor(LolisafeExtractor):
    method __init__ (line 31) | def __init__(self, match):
    method _init (line 35) | def _init(self):
    method items (line 42) | def items(self):
    method fetch_album (line 74) | def fetch_album(self, album_id):

FILE: gallery_dl/extractor/luscious.py
  class LusciousExtractor (line 15) | class LusciousExtractor(Extractor):
    method _request_graphql (line 21) | def _request_graphql(self, opname, variables):
  class LusciousAlbumExtractor (line 42) | class LusciousAlbumExtractor(LusciousExtractor):
    method _init (line 52) | def _init(self):
    method items (line 56) | def items(self):
    method metadata (line 79) | def metadata(self):
    method images (line 102) | def images(self):
  class LusciousSearchExtractor (line 123) | class LusciousSearchExtractor(LusciousExtractor):
    method items (line 130) | def items(self):

FILE: gallery_dl/extractor/lynxchan.py
  class LynxchanExtractor (line 14) | class LynxchanExtractor(BaseExtractor):
  class LynxchanThreadExtractor (line 35) | class LynxchanThreadExtractor(LynxchanExtractor):
    method items (line 45) | def items(self):
  class LynxchanBoardExtractor (line 63) | class LynxchanBoardExtractor(LynxchanExtractor):
    method items (line 69) | def items(self):

FILE: gallery_dl/extractor/madokami.py
  class MadokamiExtractor (line 17) | class MadokamiExtractor(Extractor):
  class MadokamiMangaExtractor (line 23) | class MadokamiMangaExtractor(MadokamiExtractor):
    method items (line 31) | def items(self):

FILE: gallery_dl/extractor/mangadex.py
  class MangadexExtractor (line 18) | class MangadexExtractor(Extractor):
    method _init (line 31) | def _init(self):
    method _items_chapters (line 35) | def _items_chapters(self):
    method _items_manga (line 43) | def _items_manga(self):
    method _transform (line 51) | def _transform(self, chapter):
    method _manga_info (line 80) | def _manga_info(self, uuid):
  class MangadexCoversExtractor (line 109) | class MangadexCoversExtractor(MangadexExtractor):
    method items (line 120) | def items(self):
    method _transform_cover (line 130) | def _transform_cover(self, cover):
  class MangadexChapterExtractor (line 146) | class MangadexChapterExtractor(MangadexExtractor):
    method items (line 153) | def items(self):
  class MangadexMangaExtractor (line 185) | class MangadexMangaExtractor(MangadexExtractor):
    method items (line 192) | def items(self):
    method chapters (line 201) | def chapters(self):
  class MangadexFeedExtractor (line 205) | class MangadexFeedExtractor(MangadexExtractor):
    method chapters (line 211) | def chapters(self):
  class MangadexFollowingExtractor (line 215) | class MangadexFollowingExtractor(MangadexExtractor):
    method manga (line 223) | def manga(self):
  class MangadexListExtractor (line 227) | class MangadexListExtractor(MangadexExtractor):
    method __init__ (line 235) | def __init__(self, match):
    method chapters (line 242) | def chapters(self):
    method manga (line 245) | def manga(self):
  class MangadexAuthorExtractor (line 253) | class MangadexAuthorExtractor(MangadexExtractor):
    method items (line 260) | def items(self):
  class MangadexAPI (line 267) | class MangadexAPI():
    method __init__ (line 273) | def __init__(self, extr):
    method athome_server (line 293) | def athome_server(self, uuid):
    method author (line 296) | def author(self, uuid, manga=False):
    method chapter (line 300) | def chapter(self, uuid):
    method covers_manga (line 304) | def covers_manga(self, uuid):
    method list (line 308) | def list(self, uuid):
    method list_feed (line 311) | def list_feed(self, uuid):
    method manga (line 314) | def manga(self, uuid):
    method manga_author (line 318) | def manga_author(self, uuid_author):
    method manga_feed (line 322) | def manga_feed(self, uuid):
    method user_follows_manga (line 330) | def user_follows_manga(self):
    method user_follows_manga_feed (line 335) | def user_follows_manga_feed(self):
    method authenticate (line 340) | def authenticate(self):
    method _authenticate_impl_client (line 345) | def _authenticate_impl_client(self, username, password):
    method _authenticate_impl_legacy (line 384) | def _authenticate_impl_legacy(self, username, password):
    method _call (line 408) | def _call(self, endpoint, params=None, auth=False):
    method _pagination_chapters (line 430) | def _pagination_chapters(self, endpoint, params=None, auth=False):
    method _pagination_manga (line 442) | def _pagination_manga(self, endpoint, params=None, auth=False):
    method _pagination_covers (line 448) | def _pagination_covers(self, endpoint, params=None, auth=False):
    method _pagination (line 462) | def _pagination(self, endpoint, params, auth=False):
  function _refresh_token_cache (line 489) | def _refresh_token_cache(username):

FILE: gallery_dl/extractor/mangafire.py
  class MangafireBase (line 17) | class MangafireBase():
    method _manga_info (line 22) | def _manga_info(self, manga_path, page=None):
    method _manga_chapters (line 62) | def _manga_chapters(self, manga_info):
    method _chapter_info (line 76) | def _chapter_info(self, info):
  class MangafireChapterExtractor (line 108) | class MangafireChapterExtractor(MangafireBase, ChapterExtractor):
    method metadata (line 122) | def metadata(self, _):
    method images (line 138) | def images(self, page):
  class MangafireMangaExtractor (line 151) | class MangafireMangaExtractor(MangafireBase, MangaExtractor):
    method chapters (line 157) | def chapters(self, page):

FILE: gallery_dl/extractor/mangafox.py
  class MangafoxChapterExtractor (line 17) | class MangafoxChapterExtractor(ChapterExtractor):
    method __init__ (line 25) | def __init__(self, match):
    method metadata (line 30) | def metadata(self, page):
    method images (line 48) | def images(self, page):
  class MangafoxMangaExtractor (line 60) | class MangafoxMangaExtractor(MangaExtractor):
    method chapters (line 68) | def chapters(self, page):

FILE: gallery_dl/extractor/mangafreak.py
  class MangafreakBase (line 15) | class MangafreakBase():
  class MangafreakChapterExtractor (line 21) | class MangafreakChapterExtractor(MangafreakBase, ChapterExtractor):
    method metadata (line 26) | def metadata(self, page):
    method images (line 42) | def images(self, page):
  class MangafreakMangaExtractor (line 50) | class MangafreakMangaExtractor(MangafreakBase, MangaExtractor):
    method chapters (line 56) | def chapters(self, page):

FILE: gallery_dl/extractor/mangahere.py
  class MangahereBase (line 15) | class MangahereBase():
  class MangahereChapterExtractor (line 22) | class MangahereChapterExtractor(MangahereBase, ChapterExtractor):
    method __init__ (line 28) | def __init__(self, match):
    method _init (line 33) | def _init(self):
    method metadata (line 36) | def metadata(self, page):
    method images (line 57) | def images(self, page):
    method _get_title (line 68) | def _get_title(self):
  class MangahereMangaExtractor (line 80) | class MangahereMangaExtractor(MangahereBase, MangaExtractor):
    method _init (line 87) | def _init(self):
    method chapters (line 90) | def chapters(self, page):

FILE: gallery_dl/extractor/manganelo.py
  class ManganeloExtractor (line 16) | class ManganeloExtractor(BaseExtractor):
  class ManganeloChapterExtractor (line 40) | class ManganeloChapterExtractor(ManganeloExtractor, ChapterExtractor):
    method __init__ (line 45) | def __init__(self, match):
    method metadata (line 49) | def metadata(self, page):
    method images (line 72) | def images(self, page):
  class ManganeloMangaExtractor (line 86) | class ManganeloMangaExtractor(ManganeloExtractor, MangaExtractor):
    method __init__ (line 92) | def __init__(self, match):
    method chapters (line 96) | def chapters(self, page):
  class ManganeloBookmarkExtractor (line 133) | class ManganeloBookmarkExtractor(ManganeloExtractor):
    method items (line 139) | def items(self):

FILE: gallery_dl/extractor/mangapark.py
  class MangaparkBase (line 20) | class MangaparkBase():
    method _parse_chapter_title (line 24) | def _parse_chapter_title(self, title):
    method _extract_manga (line 33) | def _extract_manga(self, manga_id):
    method _extract_chapter (line 39) | def _extract_chapter(self, chapter_id):
    method _extract_chapters_all (line 45) | def _extract_chapters_all(self, manga_id):
    method _extract_chapters_source (line 51) | def _extract_chapters_source(self, source_id):
    method _request_graphql (line 58) | def _request_graphql(self, opname, variables):
  class MangaparkChapterExtractor (line 69) | class MangaparkChapterExtractor(MangaparkBase, ChapterExtractor):
    method __init__ (line 75) | def __init__(self, match):
    method metadata (line 79) | def metadata(self, _):
    method images (line 105) | def images(self, _):
  class MangaparkMangaExtractor (line 109) | class MangaparkMangaExtractor(MangaparkBase, Extractor):
    method __init__ (line 115) | def __init__(self, match):
    method items (line 120) | def items(self):
    method chapters (line 145) | def chapters(self):
    method _select_source (line 157) | def _select_source(self, source):

FILE: gallery_dl/extractor/mangaread.py
  class MangareadBase (line 13) | class MangareadBase():
    method parse_chapter_string (line 18) | def parse_chapter_string(self, chapter_string, data):
  class MangareadChapterExtractor (line 32) | class MangareadChapterExtractor(MangareadBase, ChapterExtractor):
    method metadata (line 38) | def metadata(self, page):
    method images (line 47) | def images(self, page):
  class MangareadMangaExtractor (line 56) | class MangareadMangaExtractor(MangareadBase, MangaExtractor):
    method chapters (line 62) | def chapters(self, page):
    method metadata (line 75) | def metadata(self, page):

FILE: gallery_dl/extractor/mangareader.py
  class MangareaderBase (line 17) | class MangareaderBase():
    method _manga_info (line 22) | def _manga_info(self, manga_path):
  class MangareaderChapterExtractor (line 100) | class MangareaderChapterExtractor(MangareaderBase, ChapterExtractor):
    method metadata (line 114) | def metadata(self, _):
    method images (line 135) | def images(self, page):
  class MangareaderMangaExtractor (line 157) | class MangareaderMangaExtractor(MangareaderBase, MangaExtractor):
    method chapters (line 163) | def chapters(self, page):

FILE: gallery_dl/extractor/mangataro.py
  class MangataroBase (line 19) | class MangataroBase():
    method _manga_info (line 24) | def _manga_info(self, slug):
  class MangataroChapterExtractor (line 47) | class MangataroChapterExtractor(MangataroBase, ChapterExtractor):
    method metadata (line 52) | def metadata(self, page):
    method images (line 70) | def images(self, page):
  class MangataroMangaExtractor (line 76) | class MangataroMangaExtractor(MangataroBase, MangaExtractor):
    method chapters (line 82) | def chapters(self, _):
    method _update_params (line 119) | def _update_params(self, params):

FILE: gallery_dl/extractor/mangatown.py
  class MangatownBase (line 15) | class MangatownBase():
  class MangatownChapterExtractor (line 21) | class MangatownChapterExtractor(MangatownBase, ChapterExtractor):
    method __init__ (line 26) | def __init__(self, match):
    method metadata (line 31) | def metadata(self, page):
    method images (line 52) | def images(self, page):
  class MangatownMangaExtractor (line 65) | class MangatownMangaExtractor(MangatownBase, MangaExtractor):
    method chapters (line 71) | def chapters(self, page):

FILE: gallery_dl/extractor/mangoxo.py
  class MangoxoExtractor (line 17) | class MangoxoExtractor(Extractor):
    method login (line 25) | def login(self):
    method _login_impl (line 35) | def _login_impl(self, username, password):
    method _sign_by_md5 (line 55) | def _sign_by_md5(self, username, password, token):
    method _total_pages (line 69) | def _total_pages(self, page):
  class MangoxoAlbumExtractor (line 73) | class MangoxoAlbumExtractor(MangoxoExtractor):
    method __init__ (line 82) | def __init__(self, match):
    method items (line 86) | def items(self):
    method metadata (line 101) | def metadata(self, page):
    method images (line 127) | def images(self, url, page):
  class MangoxoChannelExtractor (line 141) | class MangoxoChannelExtractor(MangoxoExtractor):
    method __init__ (line 147) | def __init__(self, match):
    method items (line 151) | def items(self):

FILE: gallery_dl/extractor/mastodon.py
  class MastodonExtractor (line 15) | class MastodonExtractor(BaseExtractor):
    method __init__ (line 22) | def __init__(self, match):
    method _init (line 26) | def _init(self):
    method items (line 32) | def items(self):
    method statuses (line 74) | def statuses(self):
    method _check_moved (line 78) | def _check_moved(self, account):
  class MastodonUserExtractor (line 117) | class MastodonUserExtractor(MastodonExtractor):
    method statuses (line 123) | def statuses(self):
  class MastodonBookmarkExtractor (line 137) | class MastodonBookmarkExtractor(MastodonExtractor):
    method statuses (line 143) | def statuses(self):
  class MastodonFavoriteExtractor (line 147) | class MastodonFavoriteExtractor(MastodonExtractor):
    method statuses (line 153) | def statuses(self):
  class MastodonListExtractor (line 157) | class MastodonListExtractor(MastodonExtractor):
    method statuses (line 163) | def statuses(self):
  class MastodonHashtagExtractor (line 167) | class MastodonHashtagExtractor(MastodonExtractor):
    method statuses (line 173) | def statuses(self):
  class MastodonFollowingExtractor (line 177) | class MastodonFollowingExtractor(MastodonExtractor):
    method items (line 183) | def items(self):
  class MastodonStatusExtractor (line 192) | class MastodonStatusExtractor(MastodonExtractor):
    method statuses (line 199) | def statuses(self):
  class MastodonAPI (line 207) | class MastodonAPI():
    method __init__ (line 214) | def __init__(self, extractor):
    method account_id_by_username (line 231) | def account_id_by_username(self, username):
    method account_bookmarks (line 252) | def account_bookmarks(self):
    method account_favorites (line 257) | def account_favorites(self):
    method account_following (line 262) | def account_following(self, account_id):
    method account_lookup (line 267) | def account_lookup(self, username):
    method account_search (line 273) | def account_search(self, query, limit=40):
    method account_statuses (line 279) | def account_statuses(self, account_id, only_media=True,
    method status (line 287) | def status(self, status_id):
    method timelines_list (line 292) | def timelines_list(self, list_id):
    method timelines_tag (line 297) | def timelines_tag(self, hashtag):
    method _call (line 302) | def _call(self, endpoint, params=None):
    method _pagination (line 327) | def _pagination(self, endpoint, params):
  function _access_token_cache (line 340) | def _access_token_cache(instance):

FILE: gallery_dl/extractor/message.py
  class Message (line 10) | class Message():

FILE: gallery_dl/extractor/misskey.py
  class MisskeyExtractor (line 13) | class MisskeyExtractor(BaseExtractor):
    method _init (line 20) | def _init(self):
    method items (line 26) | def items(self):
    method notes (line 55) | def notes(self):
    method _make_note (line 59) | def _make_note(self, type, user, url):
  class MisskeyUserExtractor (line 101) | class MisskeyUserExtractor(Dispatch, MisskeyExtractor):
    method items (line 107) | def items(self):
  class MisskeyNotesExtractor (line 117) | class MisskeyNotesExtractor(MisskeyExtractor):
    method notes (line 123) | def notes(self):
  class MisskeyInfoExtractor (line 128) | class MisskeyInfoExtractor(MisskeyExtractor):
    method items (line 134) | def items(self):
  class MisskeyAvatarExtractor (line 139) | class MisskeyAvatarExtractor(MisskeyExtractor):
    method notes (line 145) | def notes(self):
  class MisskeyBackgroundExtractor (line 151) | class MisskeyBackgroundExtractor(MisskeyExtractor):
    method notes (line 157) | def notes(self):
  class MisskeyFollowingExtractor (line 163) | class MisskeyFollowingExtractor(MisskeyExtractor):
    method items (line 169) | def items(self):
  class MisskeyNoteExtractor (line 180) | class MisskeyNoteExtractor(MisskeyExtractor):
    method notes (line 186) | def notes(self):
  class MisskeyFavoriteExtractor (line 190) | class MisskeyFavoriteExtractor(MisskeyExtractor):
    method notes (line 196) | def notes(self):
  class MisskeyAPI (line 200) | class MisskeyAPI():
    method __init__ (line 208) | def __init__(self, extractor):
    method user_id_by_username (line 213) | def user_id_by_username(self, username):
    method users_following (line 216) | def users_following(self, user_id):
    method users_notes (line 221) | def users_notes(self, user_id):
    method users_show (line 226) | def users_show(self, username):
    method _users_show_impl (line 229) | def _users_show_impl(self, username):
    method notes_show (line 235) | def notes_show(self, note_id):
    method i_favorites (line 240) | def i_favorites(self):
    method _call (line 247) | def _call(self, endpoint, data):
    method _pagination (line 251) | def _pagination(self, endpoint, data):

FILE: gallery_dl/extractor/mixdrop.py
  class MixdropFileExtractor (line 15) | class MixdropFileExtractor(Extractor):
    method items (line 25) | def items(self):

FILE: gallery_dl/extractor/moebooru.py
  class MoebooruExtractor (line 16) | class MoebooruExtractor(BooruExtractor):
    method _prepare (line 22) | def _prepare(self, post):
    method _html (line 25) | def _html(self, post):
    method _tags (line 29) | def _tags(self, post, page):
    method _notes (line 41) | def _notes(self, post, page):
    method _pagination (line 58) | def _pagination(self, url, params):
  class MoebooruTagExtractor (line 91) | class MoebooruTagExtractor(MoebooruExtractor):
    method __init__ (line 98) | def __init__(self, match):
    method metadata (line 102) | def metadata(self):
    method posts (line 105) | def posts(self):
  class MoebooruPoolExtractor (line 110) | class MoebooruPoolExtractor(Moeb
Condensed preview — 760 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,683K chars).
[
  {
    "path": ".editorconfig",
    "chars": 208,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[**.py]\ni"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 65,
    "preview": "ko_fi: mikefaehrmann\ncustom: https://www.paypal.me/mikefaehrmann\n"
  },
  {
    "path": ".github/workflows/docker.yml",
    "chars": 1595,
    "preview": "name: Docker Images\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n    - master\n    tags:\n    - v[0-9]+.[0-9]+.[0-9]+\n\n"
  },
  {
    "path": ".github/workflows/executables.yml",
    "chars": 2968,
    "preview": "name: Executables\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n    - master\n    tags-ignore:\n    - \"*\"\n\nenv:\n  DATE_F"
  },
  {
    "path": ".github/workflows/pages.yml",
    "chars": 1225,
    "preview": "name: GitHub Pages\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n    - master\n    paths:\n    - docs/**\n\npermissions:\n "
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 1449,
    "preview": "name: Tests\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n    - master\n  pull_request:\n    branches:\n    - master\n\njob"
  },
  {
    "path": ".gitignore",
    "chars": 826,
    "preview": "archive/\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n\n# C extensions\n*.so\n\n# Distribution / packagin"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 415577,
    "preview": "# Changelog\n\n## 1.31.5 - 2026-01-31\n### Extractors\n#### Additions\n- [discord] add `server-search` extractor\n- [listal] a"
  },
  {
    "path": "Dockerfile",
    "chars": 930,
    "preview": "FROM python:3.14-alpine\nENV LANG=C.UTF-8\n\nRUN : \\\n    && apk --no-interactive update \\\n    && apk --no-interactive --no-"
  },
  {
    "path": "LICENSE",
    "chars": 18092,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
  },
  {
    "path": "MANIFEST.in",
    "chars": 91,
    "preview": "include README.rst CHANGELOG.md LICENSE scripts/run_tests.py\nrecursive-include docs *.conf\n"
  },
  {
    "path": "Makefile",
    "chars": 1479,
    "preview": "\nPREFIX ?= /usr/local\nBINDIR ?= $(PREFIX)/bin\nMANDIR ?= $(PREFIX)/man\nSHAREDIR ?= $(PREFIX)/share\nPYTHON ?= /usr/bin/env"
  },
  {
    "path": "README.rst",
    "chars": 14159,
    "preview": "==========\ngallery-dl\n==========\n\n*gallery-dl* is a command-line program\nto download image galleries and collections\nfro"
  },
  {
    "path": "bin/gallery-dl",
    "chars": 105,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\nimport sys\nimport gallery_dl\nsys.exit(gallery_dl.main())\n"
  },
  {
    "path": "docs/_layouts/default.html",
    "chars": 497,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\""
  },
  {
    "path": "docs/configuration.rst",
    "chars": 250692,
    "preview": "Configuration\n#############\n\n| Configuration files for *gallery-dl* use a JSON-based file format.\n| For a (more or less)"
  },
  {
    "path": "docs/formatting.md",
    "chars": 17813,
    "preview": "# String Formatting\n\n\n## Table of Contents\n\n* [Basics](#basics)\n* [Field Names](#field-names)\n* [Conversions](#conversio"
  },
  {
    "path": "docs/gallery-dl-example.conf",
    "chars": 14709,
    "preview": "{\n    \"extractor\":\n    {\n        \"base-directory\": \"~/gallery-dl/\",\n\n        \"#\": \"set global archive file for all extra"
  },
  {
    "path": "docs/gallery-dl.conf",
    "chars": 32687,
    "preview": "{\n    \"#\": \"gallery-dl default configuration file\",\n\n    \"#\": \"full documentation at\",\n    \"#\": \"https://gdl-org.github."
  },
  {
    "path": "docs/index.md",
    "chars": 305,
    "preview": "# gallery-dl Documentation\n\n- ## [Supported Sites](supportedsites.md)\n- ## [Command Line Options](options.md)\n- ## [Conf"
  },
  {
    "path": "docs/links.js",
    "chars": 1100,
    "preview": "\"use strict\";\n\n\nfunction add_header_links()\n{\n    let style = document.createElement(\"style\");\n    style.id = \"headerlin"
  },
  {
    "path": "docs/oauth-redirect.html",
    "chars": 244,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>gallery-dl - OAuth Redirect</title>\n    <script>\n   "
  },
  {
    "path": "docs/options.md",
    "chars": 15682,
    "preview": "# Command-Line Options\n\n<!-- auto-generated by scripts/options.py -->\n\n\n## Table of Contents\n\n* [General Options](#gener"
  },
  {
    "path": "docs/supportedsites.md",
    "chars": 67350,
    "preview": "# Supported Sites\n\n<!-- auto-generated by scripts/supportedsites.py -->\nConsider all listed sites to potentially be NSFW"
  },
  {
    "path": "gallery_dl/__init__.py",
    "chars": 23848,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/__main__.py",
    "chars": 558,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n# Copyright 2017-2023 Mike Fährmann\n#\n# This program is free software; y"
  },
  {
    "path": "gallery_dl/actions.py",
    "chars": 8061,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2023-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/aes.py",
    "chars": 21327,
    "preview": "# -*- coding: utf-8 -*-\n\n# This is a slightly modified version of yt-dlp's aes module.\n# https://github.com/yt-dlp/yt-dl"
  },
  {
    "path": "gallery_dl/archive.py",
    "chars": 7939,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/cache.py",
    "chars": 3580,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/config.py",
    "chars": 10109,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/cookies.py",
    "chars": 41093,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/downloader/__init__.py",
    "chars": 1013,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2021 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/downloader/common.py",
    "chars": 3487,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/downloader/http.py",
    "chars": 21769,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/downloader/text.py",
    "chars": 659,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2019 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/downloader/ytdl.py",
    "chars": 14467,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/dt.py",
    "chars": 2967,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/exception.py",
    "chars": 5781,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/2ch.py",
    "chars": 3145,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/2chan.py",
    "chars": 3206,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2017-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/2chen.py",
    "chars": 3214,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/35photo.py",
    "chars": 6762,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/3dbooru.py",
    "chars": 2259,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2023 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/4archive.py",
    "chars": 3767,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/4chan.py",
    "chars": 2872,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/4chanarchives.py",
    "chars": 3984,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2023-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/500px.py",
    "chars": 7003,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/8chan.py",
    "chars": 5228,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/8muses.py",
    "chars": 3647,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/__init__.py",
    "chars": 6308,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/adultempire.py",
    "chars": 1891,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/agnph.py",
    "chars": 3276,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/ahottie.py",
    "chars": 3577,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/allporncomic.py",
    "chars": 5758,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/ao3.py",
    "chars": 11769,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/arcalive.py",
    "chars": 6298,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/architizer.py",
    "chars": 2993,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/arena.py",
    "chars": 3050,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/artstation.py",
    "chars": 17169,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/aryion.py",
    "chars": 11274,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/audiochan.py",
    "chars": 5012,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/bbc.py",
    "chars": 3347,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/behance.py",
    "chars": 10293,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/bellazon.py",
    "chars": 9502,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/bilibili.py",
    "chars": 6219,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/blogger.py",
    "chars": 6719,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/bluesky.py",
    "chars": 20714,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/booru.py",
    "chars": 2851,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2023 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/boosty.py",
    "chars": 15338,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/booth.py",
    "chars": 4674,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/bunkr.py",
    "chars": 8451,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/catbox.py",
    "chars": 1869,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2023 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/cfake.py",
    "chars": 5312,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/chevereto.py",
    "chars": 8429,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2023-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/cien.py",
    "chars": 7082,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/civitai.py",
    "chars": 35209,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/comedywildlifephoto.py",
    "chars": 1774,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/comick.py",
    "chars": 10199,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/comicvine.py",
    "chars": 2046,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/common.py",
    "chars": 46999,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/cyberdrop.py",
    "chars": 3115,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/cyberfile.py",
    "chars": 5815,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/danbooru.py",
    "chars": 15084,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/dandadan.py",
    "chars": 1941,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/dankefuerslesen.py",
    "chars": 3980,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/desktopography.py",
    "chars": 3117,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/deviantart.py",
    "chars": 72171,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/directlink.py",
    "chars": 1608,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2017-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/discord.py",
    "chars": 18953,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/dynastyscans.py",
    "chars": 6117,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/e621.py",
    "chars": 6446,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/eporner.py",
    "chars": 2136,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/erome.py",
    "chars": 4798,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/everia.py",
    "chars": 3109,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/exhentai.py",
    "chars": 25675,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/facebook.py",
    "chars": 21202,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/fanbox.py",
    "chars": 16338,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/fansly.py",
    "chars": 14102,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/fantia.py",
    "chars": 7603,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/fapachi.py",
    "chars": 2279,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/fapello.py",
    "chars": 4013,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/fikfap.py",
    "chars": 3869,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/filester.py",
    "chars": 3881,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/fitnakedgirls.py",
    "chars": 7729,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/flickr.py",
    "chars": 22545,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2017-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/foolfuuka.py",
    "chars": 9376,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/foolslide.py",
    "chars": 4375,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/foriio.py",
    "chars": 6091,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/furaffinity.py",
    "chars": 13841,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/furry34.py",
    "chars": 4569,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/fuskator.py",
    "chars": 2940,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/gelbooru.py",
    "chars": 9658,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/gelbooru_v01.py",
    "chars": 4158,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/gelbooru_v02.py",
    "chars": 9194,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/generic.py",
    "chars": 8333,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/girlsreleased.py",
    "chars": 2615,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/girlswithmuscle.py",
    "chars": 6107,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/gofile.py",
    "chars": 4091,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/hatenablog.py",
    "chars": 5545,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/hdoujin.py",
    "chars": 1285,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/hentai2read.py",
    "chars": 3736,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hentaicosplays.py",
    "chars": 2137,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/hentaifoundry.py",
    "chars": 14375,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hentaihand.py",
    "chars": 3283,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hentaihere.py",
    "chars": 3633,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hentainexus.py",
    "chars": 5725,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hiperdex.py",
    "chars": 5007,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hitomi.py",
    "chars": 9275,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/hotleak.py",
    "chars": 6202,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/idolcomplex.py",
    "chars": 1572,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imagebam.py",
    "chars": 3438,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imagechest.py",
    "chars": 4600,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020 Leonid \"Bepis\" Pavel\n# Copyright 2023-2026 Mike Fährmann\n#\n# This program is f"
  },
  {
    "path": "gallery_dl/extractor/imagefap.py",
    "chars": 8655,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imagehosts.py",
    "chars": 19386,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imagepond.py",
    "chars": 5025,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/imgbb.py",
    "chars": 7308,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imgbox.py",
    "chars": 3664,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imgpile.py",
    "chars": 3716,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/imgth.py",
    "chars": 1908,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imgur.py",
    "chars": 10669,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/imhentai.py",
    "chars": 5817,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/inkbunny.py",
    "chars": 12874,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/instagram.py",
    "chars": 45820,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2020 Leonardo Taccari\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is "
  },
  {
    "path": "gallery_dl/extractor/issuu.py",
    "chars": 2729,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/itaku.py",
    "chars": 10828,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/itchio.py",
    "chars": 2026,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2023 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/iwara.py",
    "chars": 17166,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/joyreactor.py",
    "chars": 9217,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/jschan.py",
    "chars": 2395,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/kabeuchi.py",
    "chars": 2641,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/kaliscan.py",
    "chars": 4075,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/keenspot.py",
    "chars": 4612,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/kemono.py",
    "chars": 27802,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/khinsider.py",
    "chars": 3890,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/komikcast.py",
    "chars": 3387,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/koofr.py",
    "chars": 4024,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/leakgallery.py",
    "chars": 4924,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/lensdump.py",
    "chars": 4456,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/lexica.py",
    "chars": 2257,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2023-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/lightroom.py",
    "chars": 2936,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/listal.py",
    "chars": 2738,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/livedoor.py",
    "chars": 4093,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/lofter.py",
    "chars": 5011,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/lolisafe.py",
    "chars": 2620,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/luscious.py",
    "chars": 5318,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2016-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/lynxchan.py",
    "chars": 2501,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/madokami.py",
    "chars": 3427,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/mangadex.py",
    "chars": 17834,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangafire.py",
    "chars": 6399,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangafox.py",
    "chars": 3910,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2017-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangafreak.py",
    "chars": 3061,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/mangahere.py",
    "chars": 4586,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/manganelo.py",
    "chars": 5425,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020 Jake Mannens\n# Copyright 2021-2026 Mike Fährmann\n#\n# This program is free soft"
  },
  {
    "path": "gallery_dl/extractor/mangapark.py",
    "chars": 6267,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangaread.py",
    "chars": 4085,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/mangareader.py",
    "chars": 6438,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangataro.py",
    "chars": 4686,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mangatown.py",
    "chars": 3525,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/mangoxo.py",
    "chars": 5700,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/mastodon.py",
    "chars": 12215,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/message.py",
    "chars": 1879,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/misskey.py",
    "chars": 9725,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/mixdrop.py",
    "chars": 1512,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/moebooru.py",
    "chars": 5891,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2020-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/motherless.py",
    "chars": 8234,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/myhentaigallery.py",
    "chars": 3030,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/myportfolio.py",
    "chars": 3221,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/naverblog.py",
    "chars": 6210,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/naverchzzk.py",
    "chars": 3055,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  },
  {
    "path": "gallery_dl/extractor/naverwebtoon.py",
    "chars": 3647,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2021 Seonghyeon Cho\n# Copyright 2022-2025 Mike Fährmann\n#\n# This program is free so"
  },
  {
    "path": "gallery_dl/extractor/nekohouse.py",
    "chars": 4042,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/newgrounds.py",
    "chars": 20869,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2018-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/nhentai.py",
    "chars": 4285,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/nijie.py",
    "chars": 10236,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2015-2026 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/nitter.py",
    "chars": 11535,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2022-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/noop.py",
    "chars": 723,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2024 Mike Fährmann\n#\n# This program is free software; you can redistribute it and/o"
  },
  {
    "path": "gallery_dl/extractor/nozomi.py",
    "chars": 6186,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/nsfwalbum.py",
    "chars": 2897,
    "preview": "# -*- coding: utf-8 -*-\n\n# Copyright 2019-2025 Mike Fährmann\n#\n# This program is free software; you can redistribute it "
  },
  {
    "path": "gallery_dl/extractor/nudostar.py",
    "chars": 2143,
    "preview": "# -*- coding: utf-8 -*-\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of "
  }
]

// ... and 560 more files (download for full content)

About this extraction

This page contains the full source code of the mikf/gallery-dl GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 760 files (5.0 MB), approximately 1.4M tokens, and a symbol index with 5840 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!