Filter out male performers across Stash matching, AI prompts, candidate buttons and Intellisense
This commit is contained in:
@@ -180,22 +180,26 @@ def parse_stash_scene_data(scene, match_strategy='exact_path'):
|
||||
if not performers:
|
||||
return None
|
||||
|
||||
females = [p['name'] for p in performers if p.get('gender') == 'FEMALE']
|
||||
males = [p['name'] for p in performers if p.get('gender') == 'MALE']
|
||||
others = [p['name'] for p in performers if p.get('gender') not in ('FEMALE', 'MALE')]
|
||||
females = [p for p in performers if p.get('gender') == 'FEMALE']
|
||||
non_males = [p for p in performers if p.get('gender') not in ('FEMALE', 'MALE')]
|
||||
|
||||
# Priority: Females first as primary, then others, then males
|
||||
ordered_names = females + others + males
|
||||
if not ordered_names:
|
||||
ordered_names = [p['name'] for p in performers]
|
||||
# Priority: NEVER include male performers if any female or non-male performers are present
|
||||
eligible_performers = females if females else (non_males if non_males else performers)
|
||||
|
||||
formatted_candidates = []
|
||||
seen = set()
|
||||
for name in ordered_names:
|
||||
for p in eligible_performers:
|
||||
name = p.get('name', '')
|
||||
fmt = format_performer_slug(name)
|
||||
if fmt and fmt not in seen:
|
||||
seen.add(fmt)
|
||||
formatted_candidates.append({'raw': name, 'formatted': fmt})
|
||||
formatted_candidates.append({
|
||||
'raw': name,
|
||||
'formatted': fmt,
|
||||
'id': p.get('id'),
|
||||
'gender': p.get('gender'),
|
||||
'image': p.get('image_path')
|
||||
})
|
||||
|
||||
if not formatted_candidates:
|
||||
return None
|
||||
@@ -217,8 +221,8 @@ def parse_stash_scene_data(scene, match_strategy='exact_path'):
|
||||
'studio': studio_name,
|
||||
'primaryPerformer': primary_formatted,
|
||||
'allPerformers': formatted_candidates,
|
||||
'femalePerformers': [format_performer_slug(n) for n in females],
|
||||
'malePerformers': [format_performer_slug(n) for n in males],
|
||||
'femalePerformers': [p['formatted'] for p in formatted_candidates if p.get('gender') == 'FEMALE'],
|
||||
'malePerformers': [],
|
||||
'confidence': 'verified',
|
||||
'reasoning': reasoning,
|
||||
'matchStrategy': match_strategy
|
||||
@@ -781,11 +785,11 @@ class RobustProxyHandler(http.server.SimpleHTTPRequestHandler):
|
||||
except Exception as e:
|
||||
print(f"Error merging performers from DB: {e}")
|
||||
|
||||
# Also merge performers from Stash database if online
|
||||
# Also merge female performers from Stash database if online
|
||||
try:
|
||||
stash_q = '{ allPerformers { name } }'
|
||||
res = execute_stash_graphql(stash_q, timeout=2)
|
||||
for p in res.get('data', {}).get('allPerformers', []):
|
||||
stash_q = '{ findPerformers(performer_filter: { gender: { value: FEMALE, modifier: EQUALS } }, filter: { per_page: -1 }) { performers { name } } }'
|
||||
res = execute_stash_graphql(stash_q, timeout=3)
|
||||
for p in res.get('data', {}).get('findPerformers', {}).get('performers', []):
|
||||
slug = format_performer_slug(p.get('name'))
|
||||
if slug:
|
||||
performers_set.add(slug)
|
||||
@@ -807,13 +811,22 @@ class RobustProxyHandler(http.server.SimpleHTTPRequestHandler):
|
||||
p_id = params.get('id', [''])[0]
|
||||
stash_url = params.get('url', [''])[0]
|
||||
|
||||
content_type, img_bytes = fetch_performer_image_data(name, p_id, stash_url)
|
||||
self.send_response(200)
|
||||
self.send_header('Content-Type', content_type)
|
||||
self.send_header('Cache-Control', 'public, max-age=86400')
|
||||
self.send_cors_headers()
|
||||
self.end_headers()
|
||||
self.wfile.write(img_bytes)
|
||||
try:
|
||||
content_type, img_bytes = fetch_performer_image_data(name, p_id, stash_url)
|
||||
self.send_response(200)
|
||||
self.send_header('Content-Type', content_type)
|
||||
self.send_header('Cache-Control', 'public, max-age=86400')
|
||||
self.send_cors_headers()
|
||||
self.end_headers()
|
||||
self.wfile.write(img_bytes)
|
||||
except (BrokenPipeError, ConnectionResetError):
|
||||
pass
|
||||
except Exception as e:
|
||||
try:
|
||||
self.send_response(500)
|
||||
self.end_headers()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ==================== Stash Server API Handlers ====================
|
||||
def handle_stash_status(self):
|
||||
|
||||
Reference in New Issue
Block a user