Every-frame prediction is free on CUDA (~0.2s) and hopeless on the iGPU
(5.2s/img): a 100-frame faceless scene cost 8.7 min. stride>1 keeps
frame-perfect decode and probes every Nth frame, max M per scene, then
waits for the next scene start. Default stride=1 = original behavior.
Scheduler unit-tested (face-hit, faceless-exhaust, multi-scene).
Real-run evidence: the transformation-emblem false positive (frame 1583
of the OP, 717x857, aspect 0.84) is geometrically face-shaped and
passes every box gate; OP/ED music videos are dominated by exactly that
kind of stylized graphics. Episodes carry the character close-ups a
grounding dataset needs. Verified on the second run: feather storm
(frame 29, area .64) now correctly rejected by the area cap.
Tested against real failure samples from the v2 run: full-frame feather
storm (area .64) and wide effect blob (area .70) now rejected; normal
and close-up faces pass. Note: stylized OP/ED emblems are geometrically
face-shaped and NOT catchable this way — documented, CCIP gate is the
answer for those.
Ultralytics select_device() rewrites CUDA_VISIBLE_DEVICES on first
predict() when the CUDA context is uninitialized: --gpu 1 silently
became a two-GPU cuda:0,1 context that OOMed on GPU0 (Strata's card).
Initializing torch and touching cuda once after setting CVD locks the
pin; both scripts now use device cuda:0 within the pin.
Original saved any frame with a big COCO person box (heads, hands,
shoes). Switches to yolov8x6_animeface (HF: Fuyucchi), keeps the
scene-change gate, adds --gpu pinning via CUDA_VISIBLE_DEVICES before
torch init, --download-model, --preview-dir QC mode, optional edge
margin and min face-area fraction.