[civitai] always provide 'file[…]' metadata (#7548)

wrap most top-level values of (single) image results into a 'file' object
This commit is contained in:
Mike Fährmann
2025-07-07 10:29:51 +02:00
parent 8452a018ac
commit d25b1f22f3
2 changed files with 90 additions and 71 deletions

View File

@@ -22,9 +22,9 @@ class CivitaiExtractor(Extractor):
"""Base class for civitai extractors"""
category = "civitai"
root = "https://civitai.com"
directory_fmt = ("{category}", "{username|user[username]}", "images")
filename_fmt = "{file[id]|id|filename}.{extension}"
archive_fmt = "{file[uuid]|uuid}"
directory_fmt = ("{category}", "{user[username]}", "images")
filename_fmt = "{file[id]}.{extension}"
archive_fmt = "{file[uuid]}"
request_interval = (0.5, 1.5)
def _init(self):
@@ -107,25 +107,32 @@ class CivitaiExtractor(Extractor):
images = self.images()
if images:
for image in images:
for file in images:
data = {
"file": file,
"user": file.pop("user"),
}
if self._meta_generation:
image["generation"] = \
self._extract_meta_generation(image)
data["generation"] = \
self._extract_meta_generation(file)
if self._meta_version:
image["model"], image["version"] = \
self._extract_meta_version(image, False)
image["date"] = text.parse_datetime(
image["createdAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
data["model"], data["version"] = \
self._extract_meta_version(file, False)
if "post" in file:
data["post"] = file.pop("post")
file["date"] = text.parse_datetime(
file["createdAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
url = self._url(image)
text.nameext_from_url(url, image)
if not image["extension"]:
image["extension"] = (
self._video_ext if image.get("type") == "video" else
data["url"] = url = self._url(file)
text.nameext_from_url(url, data)
if not data["extension"]:
data["extension"] = (
self._video_ext if file.get("type") == "video" else
self._image_ext)
yield Message.Directory, image
yield Message.Url, url, image
yield Message.Directory, data
yield Message.Url, url, data
return
def models(self):