silvanus930
Session: AV1/HEVC CQ table fixes, VBR NVENC tuning, secant-based adaptive search, dashboard reset mechanism
bc6f62c Download scripts/real_validator_score_test.py from silvanus0930/vidaio-subnet: direct link, hf CLI and curl.
- Browser
- Download file 5.28 kB
-
https://huggingface.co/silvanus0930/vidaio-subnet/resolve/main/scripts/real_validator_score_test.py
- Command line
-
hf download hf://silvanus0930/vidaio-subnet/scripts/real_validator_score_test.py
-
curl -L -o real_validator_score_test.py https://huggingface.co/silvanus0930/vidaio-subnet/resolve/main/scripts/real_validator_score_test.py
5.28 kB
| #!/usr/bin/env python3 | |
| """Score our own compressed outputs using the REAL validator-side scoring | |
| code (services/scoring/server.py's score_compression_synthetics), not a | |
| hand-ported estimate. This repo already contains that code -- it's not | |
| exclusive to validator infrastructure -- so we can call the literal | |
| function directly instead of guessing whether our own port matches it. | |
| This catches things a hand-ported formula never could: the real pipeline | |
| also runs encoding-settings validation (codec profile, pixel format, SAR, | |
| container, color tags) and frame-count/color/chroma checks *before* VMAF is | |
| even computed. Any of those failing zeroes the score regardless of how good | |
| the compression/VMAF tradeoff is -- and we've never verified locally that | |
| our own outputs pass them. | |
| `pieapp_metric` (only used for upscaling scoring) isn't installed in this | |
| environment, so a stub is put on sys.path -- server.py imports it | |
| unconditionally at module load even though compression scoring never calls | |
| it. | |
| Usage: | |
| python3 scripts/real_validator_score_test.py --limit 3 | |
| """ | |
| import argparse | |
| import asyncio | |
| import json | |
| import subprocess | |
| import sys | |
| import time | |
| from pathlib import Path | |
| REPO = Path("/root/vidaio-subnet") | |
| SHIM_DIR = Path("/tmp/vidaio-real-scoring-shim") | |
| LIBRARY_PATH = Path("/root/vidaio-real-content-library") | |
| sys.path.insert(0, str(SHIM_DIR)) | |
| sys.path.insert(0, str(REPO)) | |
| sys.path.insert(0, str(REPO / "services" / "scoring")) | |
| from services.scoring.server import ( # noqa: E402 | |
| CompressionScoringRequest, | |
| score_compression_synthetics, | |
| ) | |
| def compress_via_service( | |
| service_url: str, container_mp4_path: str, meta: dict | |
| ) -> dict | None: | |
| """Runs the clip through the real production /compress path (adaptive | |
| CQ search included -- no explicit cq override), exactly like a live | |
| validator request would.""" | |
| payload = { | |
| "video_paths": [container_mp4_path], | |
| "codec": meta["codec"].upper(), | |
| "codec_mode": meta.get("codec_mode") or "CRF", | |
| "vmaf_threshold": meta["vmaf_threshold"], | |
| "target_bitrate": int(float(meta.get("target_bitrate") or 5) * 1_000_000), | |
| } | |
| result = subprocess.run( | |
| ["curl", "-s", "-X", "POST", f"{service_url}/compress", | |
| "-H", "Content-Type: application/json", "-d", json.dumps(payload)], | |
| capture_output=True, text=True, timeout=240, | |
| ) | |
| try: | |
| resp = json.loads(result.stdout) | |
| except json.JSONDecodeError: | |
| print(f" bad response: {result.stdout[:200]}") | |
| return None | |
| if not resp.get("success"): | |
| print(f" compress failed: {resp.get('errors') or resp.get('detail')}") | |
| return None | |
| return resp | |
| async def score_one( | |
| host_output_dir: Path, | |
| container_output_prefix: str, | |
| mp4_path: Path, | |
| meta: dict, | |
| resp: dict, | |
| ) -> None: | |
| container_out = resp["output_paths"][0] | |
| output_path = host_output_dir / Path(container_out).relative_to(container_output_prefix) | |
| if not output_path.exists(): | |
| print(f" output missing on host: {output_path}") | |
| return | |
| request = CompressionScoringRequest( | |
| distorted_file_paths=[str(output_path)], | |
| reference_paths=[str(mp4_path)], | |
| uids=[21], | |
| video_ids=[meta["task_id"]], | |
| uploaded_object_names=[""], | |
| vmaf_thresholds=[meta["vmaf_threshold"]], | |
| target_codec=meta["codec"], | |
| codec_mode=meta.get("codec_mode") or "CRF", | |
| target_bitrate=float(meta.get("target_bitrate") or 5), | |
| ) | |
| result = await score_compression_synthetics(request) | |
| r = result.model_dump() if hasattr(result, "model_dump") else result.dict() | |
| print( | |
| f" REAL SCORE vmaf={r['vmaf_scores'][0]:.2f} " | |
| f"ratio={r['compression_rates'][0]:.4f} " | |
| f"score={r['final_scores'][0]:.4f} " | |
| f"reason={r['reasons'][0]}" | |
| ) | |
| async def main() -> int: | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--service-url", default="http://localhost:8004") | |
| parser.add_argument("--container-output-prefix", default="/tmp/organic-proxy") | |
| parser.add_argument("--host-output-dir", default="/tmp/vidaio-miner-video-tmp") | |
| parser.add_argument("--container-library-path", default="/tmp/organic-proxy/calib-library") | |
| parser.add_argument("--library-path", default=str(LIBRARY_PATH)) | |
| parser.add_argument("--limit", type=int, default=3) | |
| args = parser.parse_args() | |
| clips = [] | |
| for mp4_path in sorted(Path(args.library_path).glob("*.mp4")): | |
| meta_path = Path(f"{mp4_path}.json") | |
| if not meta_path.exists(): | |
| continue | |
| meta = json.loads(meta_path.read_text()) | |
| clips.append((mp4_path, meta)) | |
| clips = clips[: args.limit] | |
| host_output_dir = Path(args.host_output_dir) | |
| for mp4_path, meta in clips: | |
| print(f"[{meta['task_id']}] codec={meta['codec']} thr={meta['vmaf_threshold']}") | |
| container_mp4_path = f"{args.container_library_path}/{mp4_path.name}" | |
| resp = compress_via_service(args.service_url, container_mp4_path, meta) | |
| if resp is None: | |
| continue | |
| await score_one( | |
| host_output_dir, args.container_output_prefix, mp4_path, meta, resp | |
| ) | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(asyncio.run(main())) | |