Skip to content

Commit 2f06948

Browse files
HottestLamiaCyril FREY
andauthored
Plugin : bulkImageScrape : Adds param list of performers id to filter images (#583)
Co-authored-by: Cyril FREY <[email protected]>
1 parent 5541edf commit 2f06948

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

plugins/bulkImageScrape/BulkImageScrape.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Bulk Image Scrape
22
# requires: PythonDepManager
33
description: Apply an image scraper to all images
4-
version: 0.3.2
4+
version: 0.3.3
55
url: https://github.com/stashapp/CommunityScripts/
66
exec:
77
- python
@@ -33,6 +33,9 @@ settings:
3333
SkipEntriesNum:
3434
displayName: number of entries to skip over (mostly for rerunning after an error on large collections)
3535
type: NUMBER
36+
PerformerIdsFilter:
37+
displayName: List of performers IDs (comma separated) to filter images the plugins sees
38+
type: STRING
3639

3740
tasks:
3841
- name: "Bulk Image Scrape"

plugins/bulkImageScrape/bulkImageScrape.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,28 @@ def parse_skip_tags(client: StashInterface, skip_tags: str) -> list[str]:
114114
tag_ids.append(tag_id)
115115
return tag_ids
116116

117+
def parse_performerIds_filter(performerIdsFilter: str) -> list[str]:
118+
"""
119+
Parse a list of performer ids
120+
"""
121+
if performerIdsFilter == "" or performerIdsFilter is None:
122+
return []
123+
124+
performerIdsFilter = performerIdsFilter.split(",")
125+
return performerIdsFilter
117126

118-
def build_image_filter(skip_tags: list[str], exclude_organized: bool) -> dict:
127+
128+
def build_image_filter(skip_tags: list[str], performerIdsFilter: list[str], exclude_organized: bool
129+
) -> dict:
119130
image_filter: dict = {}
120131

132+
if performerIdsFilter is not None and len(performerIdsFilter) > 0:
133+
log.info(f"Images filtered for performer ID : {performerIdsFilter}")
134+
image_filter["performers"] = {
135+
"value": performerIdsFilter,
136+
"modifier": "INCLUDES",
137+
}
138+
121139
if exclude_organized:
122140
image_filter["organized"] = False
123141

@@ -134,12 +152,12 @@ def build_image_filter(skip_tags: list[str], exclude_organized: bool) -> dict:
134152

135153

136154
def count_all_images(
137-
client: StashInterface, skip_tags: list[str], exclude_organized: bool
155+
client: StashInterface, skip_tags: list[str], performerIdsFilter: list[str], exclude_organized: bool
138156
) -> int:
139157
"""
140158
count all images from the stash
141159
"""
142-
image_filter: dict = build_image_filter(skip_tags=skip_tags, exclude_organized=exclude_organized)
160+
image_filter: dict = build_image_filter(skip_tags=skip_tags, performerIdsFilter=performerIdsFilter, exclude_organized=exclude_organized)
143161

144162
all_results: dict = {
145163
"page": 1,
@@ -154,12 +172,12 @@ def count_all_images(
154172

155173

156174
def get_all_images(
157-
client: StashInterface, skip_tags: list[str], exclude_organized: bool, skip_entries: int = 0
175+
client: StashInterface, skip_tags: list[str], performerIdsFilter: list[str], exclude_organized: bool, skip_entries: int = 0
158176
) -> Generator[dict, None, None]:
159177
"""
160178
Get all images from the stash
161179
"""
162-
image_filter: dict = build_image_filter(skip_tags=skip_tags, exclude_organized=exclude_organized)
180+
image_filter: dict = build_image_filter(skip_tags=skip_tags, performerIdsFilter=performerIdsFilter, exclude_organized=exclude_organized)
163181

164182
page_size = 100
165183
page = 1
@@ -281,12 +299,14 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
281299
settings: dict[str, any] = {
282300
"ScraperID": "",
283301
"SkipTags": "",
302+
"PerformerIdsFilter": "",
284303
"CreateMissingPerformers": False,
285304
"CreateMissingStudios": False,
286305
"CreateMissingTags": False,
287306
"MergeExistingTags": False,
288307
"ExcludeOrganized": False,
289308
"SkipEntriesNum": 0,
309+
290310
}
291311

292312
if "BulkImageScrape" in config:
@@ -308,14 +328,15 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
308328
validate_stashapi(StashItem.IMAGE, stash)
309329
scraper_id: str = validate_scraper(stash, settings["ScraperID"])
310330
parsed_skip_tags: list[str] = parse_skip_tags(stash, settings["SkipTags"])
331+
parsed_performerids_filter: list[str] = parse_performerIds_filter(settings["PerformerIdsFilter"])
311332

312333
#
313334
# MAIN
314335
#
315336

316337
log.info("Querying images from stash")
317338
total_images: int = count_all_images(
318-
stash, parsed_skip_tags, settings["ExcludeOrganized"]
339+
stash, parsed_skip_tags, parsed_performerids_filter, settings["ExcludeOrganized"]
319340
) - settings["SkipEntriesNum"]
320341

321342
if total_images == 0:
@@ -325,7 +346,7 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
325346
log.info(f"Found {total_images} images")
326347

327348
images: Generator[dict, None, None] = get_all_images(
328-
stash, parsed_skip_tags, settings["ExcludeOrganized"], settings["SkipEntriesNum"]
349+
stash, parsed_skip_tags, parsed_performerids_filter, settings["ExcludeOrganized"], settings["SkipEntriesNum"]
329350
)
330351

331352
for i, image in enumerate(images, start=1):

0 commit comments

Comments
 (0)