import os import subprocess import sys import time def run_script(script_path): script_name = os.path.basename(script_path) print(f"\n{'='*60}") print(f"🚀 EXÉCUTION : {script_name}") print(f"{'='*60}") # On force l'encodage UTF-8 pour les scripts enfants sur Windows env = os.environ.copy() env["PYTHONIOENCODING"] = "utf-8" env["PYTHONUTF8"] = "1" # On s'assure d'utiliser l'exĂ©cutable python actuel result = subprocess.run([sys.executable, script_path], env=env) if result.returncode != 0: print(f"❌ ERREUR dans {script_name}. ArrĂȘt de la pipeline.") sys.exit(1) def main(): start_time = time.time() # Ordre de prioritĂ© des catĂ©gories categories = ['characters', 'anime', 'manga', 'movies', 'games', 'actors'] for category in categories: print(f"\n--- 📂 PHASE : {category.upper()} ---") cat_dir = os.path.join("pipeline", category) if not os.path.exists(cat_dir): continue # Liste ordonnĂ©e des Ă©tapes (essaye avec et sans prĂ©fixe) steps_patterns = [] if category == 'characters': steps_patterns.append(["1_ingest_vg_characters.py", "ingest_vg_characters.py"]) steps_patterns.extend([ [f"1_ingest_{category}.py", f"ingest_{category}.py"], [f"2_refine_{category}.py", f"refine_{category}.py"], # Ajout de refine si prĂ©sent [f"3_filter_{category}.py", f"filter_{category}.py"], [f"5_vectorize_{category}.py", f"vectorize_{category}.py"] ]) # Cas spĂ©cial : Vectorisation VG (Hors-jeu) if category == 'characters': steps_patterns.append(["5_vectorize_vg_characters.py", "vectorize_vg_characters.py"]) for variants in steps_patterns: for step in variants: script_path = os.path.join(cat_dir, step) if os.path.exists(script_path): run_script(script_path) break # On passe Ă  l'Ă©tape suivante dĂšs qu'une variante est trouvĂ©e # Étape finale : Enrichissement Jikan et Cross-Media print("\n--- 🌐 PHASE FINALE : ENRICHISSEMENT & MAPPING ---") final_steps = [ "pipeline/jikan_enrichment.py", "pipeline/movies/6_cross_media_mapping.py", "pipeline/actors/6_cross_media_mapping.py" ] for step in final_steps: if os.path.exists(step): run_script(step) total_time = (time.time() - start_time) / 60 print(f"\n{'*'*60}") print(f"✹ PIPELINE ANIMETIX TERMINÉE EN {total_time:.2f} MINUTES") print(f"{'*'*60}") if __name__ == "__main__": main()