@@ -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
136154def 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
156174def 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:
281299settings : 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
292312if "BulkImageScrape" in config :
@@ -308,14 +328,15 @@ def update_image(client: StashInterface, update: dict) -> dict | None:
308328validate_stashapi (StashItem .IMAGE , stash )
309329scraper_id : str = validate_scraper (stash , settings ["ScraperID" ])
310330parsed_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
316337log .info ("Querying images from stash" )
317338total_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
321342if 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
327348images : 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
331352for i , image in enumerate (images , start = 1 ):
0 commit comments