[civitai] add 'quality' option (#3706)

download 'original=true' files by default
This commit is contained in:
Mike Fährmann
2024-09-24 21:19:52 +02:00
parent 92bbb9bf31
commit a2db0d5c0d
3 changed files with 52 additions and 23 deletions

View File

@@ -10,9 +10,7 @@
from .common import Extractor, Message
from .. import text
import functools
import itertools
import re
BASE_PATTERN = r"(?:https?://)?civitai\.com"
USER_PATTERN = BASE_PATTERN + r"/user/([^/?#]+)"
@@ -30,6 +28,14 @@ class CivitaiExtractor(Extractor):
def _init(self):
self.api = CivitaiAPI(self)
quality = self.config("quality")
if quality:
if not isinstance(quality, str):
quality = ",".join(quality)
self._image_quality = quality
else:
self._image_quality = "original=true"
def items(self):
models = self.models()
if models:
@@ -57,9 +63,9 @@ class CivitaiExtractor(Extractor):
return ()
def _orig(self, url):
sub_width = functools.partial(re.compile(r"/width=\d*/").sub, "/w/")
CivitaiExtractor._orig = sub_width
return sub_width(url)
parts = url.rsplit("/", 2)
parts[1] = self._image_quality
return "/".join(parts)
class CivitaiModelExtractor(CivitaiExtractor):
@@ -67,6 +73,7 @@ class CivitaiModelExtractor(CivitaiExtractor):
directory_fmt = ("{category}", "{user[username]}",
"{model[id]}{model[name]:? //}",
"{version[id]}{version[name]:? //}")
filename_fmt = "{filename}.{extension}"
archive_fmt = "{file[hash]}"
pattern = BASE_PATTERN + r"/models/(\d+)(?:/?\?modelVersionId=(\d+))?"
example = "https://civitai.com/models/12345/TITLE"