diff --git a/docs/configuration.rst b/docs/configuration.rst index c6f757de..1d8bd58e 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -555,6 +555,15 @@ Description Download original files if available. =========== ===== +extractor.deviantart.quality +---------------------------- +=========== ===== +Type ``integer`` +Default ``100`` +Description JPEG compression quality for newer images hosted on wixmp servers. +=========== ===== + + extractor.deviantart.refresh-token ---------------------------------- =========== ===== diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index a4a9ee02..c75bfd27 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -30,6 +30,7 @@ "mature": true, "metadata": false, "original": true, + "quality"; 100, "wait-min": 0 }, "exhentai": diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index 63e2913c..eed2f3e4 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -38,11 +38,15 @@ class DeviantartExtractor(Extractor): self.offset = 0 self.flat = self.config("flat", True) self.extra = self.config("extra", False) + self.quality = self.config("quality", "100") self.original = self.config("original", True) self.user = match.group(1) or match.group(2) self.group = False self.api = DeviantartAPI(self) + if self.quality: + self.quality = "q_{}".format(self.quality) + if self.original != "image": self._update_content = self._update_content_default else: @@ -81,12 +85,15 @@ class DeviantartExtractor(Extractor): text.ext_from_url(content["src"]) != "gif": self._update_content(deviation, content) - if deviation["index"] <= 790677560 and \ - content["src"].startswith("https://images-wixmp-"): - # https://github.com/r888888888/danbooru/issues/4069 - content["src"] = re.sub( - r"(/f/[^/]+/[^/]+)/v\d+/.*", - r"/intermediary\1", content["src"]) + if content["src"].startswith("https://images-wixmp-"): + if deviation["index"] <= 790677560: + # https://github.com/r888888888/danbooru/issues/4069 + content["src"] = re.sub( + r"(/f/[^/]+/[^/]+)/v\d+/.*", + r"/intermediary\1", content["src"]) + if self.quality: + content["src"] = re.sub( + r"q_\d+", self.quality, content["src"]) yield self.commit(deviation, content) @@ -385,6 +392,11 @@ class DeviantartDeviationExtractor(DeviantartExtractor): "pattern": (r"https://images-wixmp-\w+\.wixmp\.com" r"/intermediary/f/[^/]+/[^.]+\.jpg$") }), + # wixmp URL rewrite v2 (#369) + (("https://www.deviantart.com/josephbiwald/art/" + "Destiny-2-Warmind-Secondary-Keyart-804940104"), { + "pattern": r"https://images-wixmp-\w+\.wixmp\.com/.*,q_100," + }), # non-download URL for GIFs (#242) (("https://www.deviantart.com/skatergators/art/" "COM-Monique-Model-781571783"), {