@@ -114,10 +114,28 @@ def parse_skip_tags(client: StashInterface, skip_tags: str) -> list[str]:
114
114
tag_ids .append (tag_id )
115
115
return tag_ids
116
116
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
117
126
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 :
119
130
image_filter : dict = {}
120
131
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
+
121
139
if exclude_organized :
122
140
image_filter ["organized" ] = False
123
141
@@ -134,12 +152,12 @@ def build_image_filter(skip_tags: list[str], exclude_organized: bool) -> dict:
134
152
135
153
136
154
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
138
156
) -> int :
139
157
"""
140
158
count all images from the stash
141
159
"""
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 )
143
161
144
162
all_results : dict = {
145
163
"page" : 1 ,
@@ -154,12 +172,12 @@ def count_all_images(
154
172
155
173
156
174
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
158
176
) -> Generator [dict , None , None ]:
159
177
"""
160
178
Get all images from the stash
161
179
"""
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 )
163
181
164
182
page_size = 100
165
183
page = 1
@@ -281,12 +299,14 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
281
299
settings : dict [str , any ] = {
282
300
"ScraperID" : "" ,
283
301
"SkipTags" : "" ,
302
+ "PerformerIdsFilter" : "" ,
284
303
"CreateMissingPerformers" : False ,
285
304
"CreateMissingStudios" : False ,
286
305
"CreateMissingTags" : False ,
287
306
"MergeExistingTags" : False ,
288
307
"ExcludeOrganized" : False ,
289
308
"SkipEntriesNum" : 0 ,
309
+
290
310
}
291
311
292
312
if "BulkImageScrape" in config :
@@ -308,14 +328,15 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
308
328
validate_stashapi (StashItem .IMAGE , stash )
309
329
scraper_id : str = validate_scraper (stash , settings ["ScraperID" ])
310
330
parsed_skip_tags : list [str ] = parse_skip_tags (stash , settings ["SkipTags" ])
331
+ parsed_performerids_filter : list [str ] = parse_performerIds_filter (settings ["PerformerIdsFilter" ])
311
332
312
333
#
313
334
# MAIN
314
335
#
315
336
316
337
log .info ("Querying images from stash" )
317
338
total_images : int = count_all_images (
318
- stash , parsed_skip_tags , settings ["ExcludeOrganized" ]
339
+ stash , parsed_skip_tags , parsed_performerids_filter , settings ["ExcludeOrganized" ]
319
340
) - settings ["SkipEntriesNum" ]
320
341
321
342
if total_images == 0 :
@@ -325,7 +346,7 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
325
346
log .info (f"Found { total_images } images" )
326
347
327
348
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" ]
329
350
)
330
351
331
352
for i , image in enumerate (images , start = 1 ):
0 commit comments