diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index c50e416d..93eb3e36 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -1121,6 +1121,12 @@ Consider all sites to be NSFW unless otherwise known.
Favorites, Pools, Posts, Tag Searches |
|
+
+ | Xbooru |
+ https://xbooru.com/ |
+ Favorites, Pools, Posts, Tag Searches |
+ |
+
| jschan Imageboards |
diff --git a/gallery_dl/extractor/gelbooru_v02.py b/gallery_dl/extractor/gelbooru_v02.py
index 1ef78efd..28bc799e 100644
--- a/gallery_dl/extractor/gelbooru_v02.py
+++ b/gallery_dl/extractor/gelbooru_v02.py
@@ -183,6 +183,10 @@ INSTANCES = {
"root": "https://hypnohub.net",
"pattern": r"hypnohub\.net",
},
+ "xbooru": {
+ "root": "https://xbooru.com",
+ "pattern": r"xbooru\.com",
+ },
}
BASE_PATTERN = GelbooruV02Extractor.update(INSTANCES)
@@ -213,6 +217,9 @@ class GelbooruV02TagExtractor(GelbooruV02Extractor):
("https://hypnohub.net/index.php?page=post&s=list&tags=gonoike_biwa", {
"url": "fe662b86d38c331fcac9c62af100167d404937dc",
}),
+ ("https://xbooru.com/index.php?page=post&s=list&tags=konoyan", {
+ "count": 11,
+ }),
)
def __init__(self, match):
@@ -246,6 +253,10 @@ class GelbooruV02PoolExtractor(GelbooruV02Extractor):
"url": "d314826280073441a2da609f70ee814d1f4b9407",
"count": 3,
}),
+ ("https://xbooru.com/index.php?page=pool&s=show&id=757", {
+ "url": "ceeac56c179ec72301bd0b6add6355a138fdea01",
+ "count": 5,
+ }),
)
def __init__(self, match):
@@ -314,6 +325,9 @@ class GelbooruV02FavoriteExtractor(GelbooruV02Extractor):
("https://hypnohub.net/index.php?page=favorites&s=view&id=43546", {
"count": 3,
}),
+ ("https://xbooru.com/index.php?page=favorites&s=view&id=45206", {
+ "count": 4,
+ }),
)
def __init__(self, match):
@@ -440,6 +454,11 @@ class GelbooruV02PostExtractor(GelbooruV02Extractor):
"url": "5a6ebe07bfff8e6d27f7c30b5480f27abcb577d2",
"content": "1c3831b6fbaa4686e3c79035b5d98460b1c85c43",
}),
+ ("https://xbooru.com/index.php?page=post&s=view&id=1025649", {
+ "pattern": r"https://img\.xbooru\.com/images/444"
+ r"/f3eda549ad8b9db244ac335c7406c92f\.jpeg",
+ "content": "086668afd445438d491ecc11cee3ac69b4d65530",
+ }),
)
def __init__(self, match):