roboflow/supervision · error · ValueError
Conflicting metadata for key: '{key}': {type(value)}, {type(
Error message
Conflicting metadata for key: '{key}': {type(value)}, {type(other_value)}. What it means
Raised by merge_metadata when two Detections being merged both carry the same metadata key as np.ndarray but the arrays are not equal (np.array_equal fails). Metadata must be identical across merged objects; array-valued metadata that differs in content is a conflict.
Source
Thrown at src/supervision/detection/utils/internal.py:636
"""
if not metadata_list:
return {}
all_keys_sets = [set(metadata.keys()) for metadata in metadata_list]
if not all(keys_set == all_keys_sets[0] for keys_set in all_keys_sets):
raise ValueError("All metadata dictionaries must have the same keys to merge.")
merged_metadata: _MetadataType = {}
for metadata in metadata_list:
for key, value in metadata.items():
if key not in merged_metadata:
merged_metadata[key] = value
continue
other_value = merged_metadata[key]
if isinstance(value, np.ndarray) and isinstance(other_value, np.ndarray):
if not np.array_equal(merged_metadata[key], value):
raise ValueError(
f"Conflicting metadata for key: '{key}': "
f"{type(value)}, {type(other_value)}."
)
elif isinstance(value, np.ndarray) or isinstance(other_value, np.ndarray):
# Since [] == np.array([]).
raise ValueError(
f"Conflicting metadata for key: '{key}': "
f"{type(value)}, {type(other_value)}."
)
else:
if merged_metadata[key] != value:
raise ValueError(f"Conflicting metadata for key: '{key}'.")
return merged_metadata
def get_data_item(
data: _DetectionDataType,View on GitHub (pinned to 7f254d9784)
Solutions
- Rename the key per source (e.g. 'anchors_a'/'anchors_b') or keep only one source's value before merging
- Overwrite metadata on all inputs with the single intended value before calling merge
- If the differing values are legitimate, carry them in detections.data (per-detection) instead of metadata (per-object)
Example fix
# before merged = sv.Detections.merge([d1, d2]) # different 'anchors' arrays # after d2.metadata['anchors'] = d1.metadata['anchors'] # or delete the key merged = sv.Detections.merge([d1, d2])
Defensive patterns
Strategy: validation
Validate before calling
def assert_consistent_metadata(detections_list, key):
vals = [d.metadata.get(key) for d in detections_list]
import numpy as np
first = vals[0]
for d, v in zip(detections_list, vals):
if isinstance(first, np.ndarray):
assert isinstance(v, np.ndarray) and np.array_equal(first, v), f"array metadata '{key}' differs"
else:
assert v == first, f"metadata '{key}' differs: {v!r} vs {first!r}" Prevention
- Treat metadata as global context: write it once from a single source of truth
- Group Detections by metadata content before merging instead of merging heterogeneous batches
- Put per-detection varying values in detections.data, not metadata
When it happens
Trigger: sv.Detections.merge([d1, d2]) with d1.metadata={'anchors': np.array([1,2])} and d2.metadata={'anchors': np.array([3,4])}; also annotations.merge() or the internal two-detection merge (core.py:3462) on objects from different sources carrying the same metadata key with different array values.
Common situations: Merging detections produced by two models/pipelines that store their own anchor boxes, calibration arrays, or transform matrices under the same metadata key; merging Detections from different frames/segments of a video where the metadata was populated from frame-specific state.
Related errors
- All metadata dictionaries must have the same keys to merge.
- Inconsistent data types for key '{key}'. Only np.ndarray and
- Unexpected array dimension for key '{key}'.
- Conflicting metadata for key: '{key}'.
- Both Detections should have exactly 1 detected object.
AI-assisted analysis of roboflow/supervision@7f254d9784 (2026-08-15).
Data as JSON: /api/errors/3928f6b9608ec9bd.
Report an issue: GitHub.