580bd692e6
OutputTarget.fps is a BindableFloat but TargetSnapshot.fps is a plain int — capture_current_snapshot was stuffing the BindableFloat directly into the snapshot, causing json.dumps to fail on recapture (500) and polluting the in-memory cache so subsequent list calls also 500'd with pydantic validation errors.