diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index f8769494..466ca885 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -670,7 +670,7 @@ Consider all sites to be NSFW unless otherwise known.
| Seiso |
https://seiso.party/ |
- Posts, User Profiles |
+ Favorites, Posts, User Profiles |
|
diff --git a/gallery_dl/extractor/seisoparty.py b/gallery_dl/extractor/seisoparty.py
index 28e049b6..91b43332 100644
--- a/gallery_dl/extractor/seisoparty.py
+++ b/gallery_dl/extractor/seisoparty.py
@@ -136,3 +136,43 @@ class SeisopartyPostExtractor(SeisopartyExtractor):
url = "{}/post/{}/{}/{}".format(
self.root, self.service, self.user_id, self.post_id)
return (self._parse_post(self.request(url).text, self.post_id),)
+
+
+class SeisopartyFavoriteExtractor(SeisopartyExtractor):
+ """Extractor for seiso.party favorites"""
+ subcategory = "favorite"
+ pattern = r"(?:https?://)?seiso\.party/favorites/artists/?(?:\?([^#]+))?"
+ test = (
+ ("https://seiso.party/favorites/artists", {
+ "count": 0,
+ }),
+ ("https://seiso.party/favorites/artists?page=2&sort=id", {
+ "count": 0,
+ }),
+ )
+
+ def __init__(self, match):
+ SeisopartyExtractor.__init__(self, match)
+ self.query = match.group(1)
+
+ def items(self):
+ self._prepare_ddosguard_cookies()
+
+ url = self.root + "/favorites/artists"
+ data = {"_extractor": SeisopartyUserExtractor}
+ params = text.parse_query(self.query)
+ params["page"] = text.parse_int(params.get("page"), 1)
+
+ while True:
+ page = self.request(url, params=params).text
+
+ cnt = 0
+ for card in text.extract_iter(
+ page, '