feat(tooling): X-Ray threshold optimizer, gallery utilities, artifact registry, docs build
Optimizer (scripts/optimizer/): replay.py runs the real C++ tracker/matcher/ scene_tracker chain over a dumped-embeddings HDF5 via sae_kpn, so a threshold sweep never re-decodes video or re-embeds faces. optimize.py drives scipy's differential_evolution over the knob space, with DE-level parallelism (multiple population candidates evaluated concurrently via a ThreadPoolExecutor) on top of per-film replay parallelism. second_score.py is the per-second X-Ray scoring metric (TPI/FPI/FN, out-of-cast misID weighted 10x, fair recall masked to gallery-known cast) that superseded an earlier scene-union metric. dump_error_frames.py / dump_scene_montage.py extract annotated video frames (bounding boxes, TPI/FPI/FN captions, onscreen-vs-offscreen split) for visual review of a replay against ground truth. Gallery utilities: cast_restrict.py, gallery_membership.py, fetch_missing_actors.py, reembed_gallery.py. scripts/validation/: X-Ray ground-truth loading and provider-agnostic identity matching (identity.py's keys_for — an actor is the union of every id we can derive, since pipeline output and ground truth don't share one id space). scripts/artifacts/: push/pull scripts for the Gitea generic package registry — galleries, montage frames, and experiment data (manifests/trajectories/results) are pushed there instead of committed, since none are needed to run the app, only benchmarks. Versioned by git short-SHA. scripts/docs/: MkDocs site build (build_site.sh) and the calibration-curve comparison chart (calibration_chart.py, matplotlib, reads each gallery's embedded calibration). Gallery-building scripts (make_jellyfin_gallery.py, make_gallery.py, filter_gallery.py, run_from_jellyfin.py, movienet_eval.py, movienet_prep.py, sae_gallery.py) updated to read/write HDF5 galleries exclusively, matching the engine-side format switch. run_from_jellyfin.py and the optimizer no longer carry movie source paths in shared manifests (some source filenames include scene-release tags) — resolved locally via a gitignored file-lut.json instead.
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
"""make_gallery.py — fetch actor images for a movie and build gallery.json.
|
||||
"""make_gallery.py — fetch actor images for a movie and build gallery.h5.
|
||||
|
||||
Fetches the cast from TMDB, downloads actor profile images, embeds them via
|
||||
the sae_embed module (SCRFD + ArcFace, same models as scene_analyze, loaded
|
||||
once), then writes gallery.json.
|
||||
once), then writes gallery.h5.
|
||||
|
||||
Requirements:
|
||||
pip install requests Pillow
|
||||
@@ -13,13 +13,13 @@ Usage:
|
||||
python scripts/make_gallery.py \\
|
||||
--tmdb-key YOUR_KEY \\
|
||||
--imdb-id tt0137523 \\
|
||||
--output gallery.json
|
||||
--output gallery.h5
|
||||
|
||||
# Or directly with a TMDB movie ID:
|
||||
python scripts/make_gallery.py \\
|
||||
--tmdb-key YOUR_KEY \\
|
||||
--movie-id 550 \\
|
||||
--output gallery.json
|
||||
--output gallery.h5
|
||||
|
||||
# Additional options:
|
||||
# --build-dir build/ build dir containing sae_embed module
|
||||
@@ -31,7 +31,6 @@ Get a free TMDB API key at: https://www.themoviedb.org/settings/api
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
@@ -151,7 +150,7 @@ def build_gallery(movie_id: int, key: str, embedder,
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Fetch TMDB cast images and build gallery.json via sae_embed")
|
||||
description="Fetch TMDB cast images and build gallery.h5 via sae_embed")
|
||||
parser.add_argument("--tmdb-key", required=True,
|
||||
help="TMDB Bearer token (API Read Access Token from themoviedb.org/settings/api)")
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
@@ -159,7 +158,7 @@ def main():
|
||||
help="IMDB movie ID, e.g. tt0137523 — looked up via TMDB automatically")
|
||||
group.add_argument("--movie-id", type=int,
|
||||
help="TMDB movie ID (alternative to --imdb-id)")
|
||||
parser.add_argument("--output", required=True, help="Output gallery.json path")
|
||||
parser.add_argument("--output", required=True, help="Output gallery.h5 path")
|
||||
parser.add_argument("--build-dir", default="build",
|
||||
help="Build directory containing the sae_embed module (default: build)")
|
||||
parser.add_argument("--models-dir", default="models",
|
||||
|
||||
Reference in New Issue
Block a user