diff --git a/docs/configuration.rst b/docs/configuration.rst index b80938ae..191e8255 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -587,6 +587,18 @@ Description Extract images from reblogged posts. =========== ===== +extractor.tumblr.sort +--------------------- +=========== ===== +Type ``bool`` +Default ``false`` +Description Sort photos of a Photoset according to their original upload order. + + Otherwise these photos will be returned in the order the blog owner + arranged them in. +=========== ===== + + extractor.tumblr.posts ---------------------- =========== ===== diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index baf40388..d48087cb 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -102,7 +102,8 @@ "external": false, "inline": false, "posts": "photo", - "reblogs": true + "reblogs": true, + "sort": false } }, diff --git a/gallery_dl/extractor/tumblr.py b/gallery_dl/extractor/tumblr.py index 0168c889..f435b738 100644 --- a/gallery_dl/extractor/tumblr.py +++ b/gallery_dl/extractor/tumblr.py @@ -63,6 +63,7 @@ class TumblrExtractor(Extractor): self.inline = self.config("inline", False) self.reblogs = self.config("reblogs", True) self.external = self.config("external", False) + self.sort_photos = self.config("sort", False) if len(self.types) == 1: self.api.posts_type = next(iter(self.types)) @@ -95,6 +96,9 @@ class TumblrExtractor(Extractor): photos = post["photos"] del post["photos"] + if self.sort_photos and len(photos) > 1: + photos.sort(key=self._get_tumblr_offset) + for photo in photos: post["photo"] = photo photo.update(photo["original_size"]) @@ -161,6 +165,15 @@ class TumblrExtractor(Extractor): return Message.Urllist, _original_image(url), post + @staticmethod + def _get_tumblr_offset(photo): + """Return the offset embedded in a photo's URL""" + return util.safe_int( + photo["original_size"]["url"] + .rpartition("_")[0] + .rpartition("o")[2] + ) + class TumblrUserExtractor(TumblrExtractor): """Extractor for all images from a tumblr-user"""