diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..05dc0a91d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +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 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..1fa40a1ab --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +ko_fi: mikefaehrmann +custom: https://www.paypal.me/mikefaehrmann diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..7ce4bf12b --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,69 @@ +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 diff --git a/.github/workflows/executables.yml b/.github/workflows/executables.yml new file mode 100644 index 000000000..e6884f3d9 --- /dev/null +++ b/.github/workflows/executables.yml @@ -0,0 +1,108 @@ +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.13"] + 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 }} diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 000000000..889f860b0 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,58 @@ +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 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 000000000..04d79cdb5 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,70 @@ +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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e068618ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,70 @@ +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 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..27282858e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5210 @@ +# 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/` 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/` 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 `