diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index caf88c5c..47949691 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -1912,25 +1912,25 @@ Consider all listed sites to potentially be NSFW.
| SimpCity Forums |
https://simpcity.cr/ |
- Forums, Media Categories, Media Files, User Media, Posts, Threads |
+ Forums, Albums, Media Categories, Media Files, User Media, Posts, Threads |
Supported |
| NudoStar Forums |
https://nudostar.com/forum/ |
- Forums, Media Categories, Media Files, User Media, Posts, Threads |
+ Forums, Albums, Media Categories, Media Files, User Media, Posts, Threads |
Supported |
| All The Fallen |
https://allthefallen.moe/forum/ |
- Forums, Media Categories, Media Files, User Media, Posts, Threads |
+ Forums, Albums, Media Categories, Media Files, User Media, Posts, Threads |
|
| celebforum |
https://celebforum.to/ |
- Forums, Media Categories, Media Files, User Media, Posts, Threads |
+ Forums, Albums, Media Categories, Media Files, User Media, Posts, Threads |
|
diff --git a/gallery_dl/extractor/xenforo.py b/gallery_dl/extractor/xenforo.py
index 5c31e600..ac852ca5 100644
--- a/gallery_dl/extractor/xenforo.py
+++ b/gallery_dl/extractor/xenforo.py
@@ -476,6 +476,22 @@ class XenforoMediaUserExtractor(XenforoExtractor):
return self.items_media(f"{groups[-4]}media/users/{user}", pnum)
+class XenforoMediaAlbumExtractor(XenforoExtractor):
+ subcategory = "media-album"
+ directory_fmt = ("{category}", "Media", "Albums",
+ "{album_slug} ({album_id})")
+ filename_fmt = "{filename}.{extension}"
+ archive_fmt = "{id}"
+ pattern = (BASE_PATTERN + r"(/(?:index\.php\?)?"
+ r"media/albums/([^/?#]+))(?:/page-(\d+))?")
+ example = "https://simpcity.cr/media/albums/ALBUM.123/"
+
+ def items(self):
+ slug, _, self.kwdict["album_id"] = self.groups[-2].rpartition(".")
+ self.kwdict["album_slug"] = text.unquote(slug)
+ return self.items_media(self.groups[-3], self.groups[-1])
+
+
class XenforoMediaCategoryExtractor(XenforoExtractor):
subcategory = "media-category"
directory_fmt = ("{category}", "Media", "Category", "{mcategory}")
diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py
index d52afb57..29c0e776 100755
--- a/scripts/supportedsites.py
+++ b/scripts/supportedsites.py
@@ -475,6 +475,7 @@ SUBCATEGORY_MAP = {
"media-user": "User Media",
"media-item": "Media Files",
"media-category": "Media Categories",
+ "media-album" : "Albums",
},
}
diff --git a/test/results/atfforum.py b/test/results/atfforum.py
index 45d89576..9c66d34d 100644
--- a/test/results/atfforum.py
+++ b/test/results/atfforum.py
@@ -154,4 +154,10 @@ __tests__ = (
"#class" : xenforo.XenforoMediaCategoryExtractor,
},
+{
+ "#url" : "https://allthefallen.moe/forum/index.php?media/albums/2-%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E3%81%AB%E3%81%82%E3%81%93%E3%81%8C%E3%82%8C%E3%81%A6-mahou-shoujo-ni-akogarete.7385/",
+ "#category": ("xenforo", "atfforum", "media-album"),
+ "#class" : xenforo.XenforoMediaAlbumExtractor,
+},
+
)
diff --git a/test/results/celebforum.py b/test/results/celebforum.py
index f5f0065a..06c85a7a 100644
--- a/test/results/celebforum.py
+++ b/test/results/celebforum.py
@@ -99,4 +99,10 @@ __tests__ = (
"#count" : 50,
},
+{
+ "#url" : "https://celebforum.to/media/albums/5404/",
+ "#category": ("xenforo", "celebforum", "media-album"),
+ "#class" : xenforo.XenforoMediaAlbumExtractor,
+},
+
)