Repository navigation
Corrected frame sampling. The fps filter's default rounding read the frame from ~half a sampling step after each label, so every reported timestamp ran early — and a state shorter than the bias could be missed outright. All sampling commands (when, text, locate, ci, moments, load, rundiff, strip) now use round=up and read the frame that was on screen at each labeled instant, verified with a frame-indexed probe video.
MCP parameter parity. scenes, when, and find expose threshold; diff exposes ssim_min, cell_max, and mask_out — the MCP tools now reach the same knobs as the CLI, with a schema-level parity test.
Quieter, harder contracts. Stable exported error-message constants; stderr stays silent on success even under host logging handlers (a PySceneDetect INFO leak is pinned); exit-code 2's usage/tool-failure meaning is documented as intentional.
Tests: 196 (from 192), including a rebuilt MCP round-trip harness with fail-fast on server death and clean-exit asserts.