import os import sqlite3 import pandas as pd CSV_PATH = 'data/hiffi_multiplatform_500.csv' DB_PATH = 'data/hiffi_catalog.db' HTML_OUT = 'audit_top500_profiles.html' df = pd.read_csv(CSV_PATH) conn = sqlite3.connect(DB_PATH) conn.row_factory = sqlite3.Row cur = conn.cursor() db_meta = { str(r['artist_id']): dict(r) for r in cur.execute('SELECT artist_id, country_origin FROM artists').fetchall() } missing_origin = [] cards_html = [] for idx, row in df.iterrows(): aid = str(row.get('artist_id')) name = row.get('name') or row.get('artist_name') origin = row.get('country_origin') or db_meta.get(aid, {}).get('country_origin') or 'Unknown' if origin == 'Unknown' or pd.isna(origin): missing_origin.append((aid, name)) img = row.get('image_url') img_name = os.path.basename(str(img).strip()) rel_img_path = f'data/artist_avatars/{img_name}' yt = row.get('youtube_url') if pd.notna(row.get('youtube_url')) else '#' sp = row.get('spotify_url') if pd.notna(row.get('spotify_url')) else '#' ig = row.get('instagram_url') if pd.notna(row.get('instagram_url')) else '#' card = f"""
{name}
#{idx+1} {name}
{origin}
🟢 🔴 🟣
""" cards_html.append(card) full_html = f""" HIFFI Top 500 - Visual Portrait & Metadata Audit

HIFFI Top 500 - Visual Portrait & Metadata Audit

Review real human face presence, 1:1 square framing, and canonical platform routing.

{''.join(cards_html)}
""" with open(HTML_OUT, 'w', encoding='utf-8') as f: f.write(full_html) print('=== METADATA COMPLETENESS AUDIT ===') print(f'Total cohort evaluated: {len(df)}') print(f'Missing Country/City Origin: {len(missing_origin)}') if missing_origin: print('Sample missing origins:', missing_origin[:10]) print(f'\nVisual gallery successfully generated at: {HTML_OUT}')