roboflow/supervision · error · ValueError
All data values within a single object must have equal lengt
Error message
All data values within a single object must have equal length.
What it means
Raised by merge_data during Detections merging when, inside a single Detections object, the per-detection data arrays/lists stored under different keys have unequal lengths. Every value in detections.data must be aligned with xyxy (same number of entries), and a violation inside any one input object aborts the merge.
Source
Thrown at src/supervision/detection/utils/internal.py:570
Returns:
A single data payload containing the merged data, preserving the original data
types (list or npt.NDArray[np.generic]).
Raises:
ValueError: If data values within a single object have different lengths or if
dictionaries have different keys.
"""
if not data_list:
return {}
all_keys_sets = [set(data.keys()) for data in data_list]
if not all(keys_set == all_keys_sets[0] for keys_set in all_keys_sets):
raise ValueError("All data dictionaries must have the same keys to merge.")
for data in data_list:
lengths = [len(value) for value in data.values()]
if len(set(lengths)) > 1:
raise ValueError(
"All data values within a single object must have equal length."
)
merged_data: dict[str, Any] = {key: [] for key in all_keys_sets[0]}
for data in data_list:
for key in data:
merged_data[key].append(data[key])
for key in merged_data:
if all(isinstance(item, list) for item in merged_data[key]):
merged_data[key] = list(chain.from_iterable(merged_data[key]))
elif all(isinstance(item, np.ndarray) for item in merged_data[key]):
ndim = merged_data[key][0].ndim
if ndim == 1:
merged_data[key] = np.hstack(merged_data[key])
elif ndim > 1:
merged_data[key] = np.vstack(merged_data[key])
else:View on GitHub (pinned to 7f254d9784)
Solutions
- Audit the offending Detections: assert all(len(v) == len(d.xyxy) for v in d.data.values()) on each input before merge and fix the misaligned field
- Rebuild the Detections from scratch with all data fields the same length instead of mutating d.data in place
- Drop the misaligned key from data before merging if it is not needed
Example fix
# before
bad = sv.Detections(xyxy=boxes, data={'a': names[:3], 'b': ids[:2]})
sv.Detections.merge([bad, other])
# after
bad = sv.Detections(xyxy=boxes, data={'a': names[:3], 'b': ids[:3]})
sv.Detections.merge([bad, other]) Defensive patterns
Strategy: validation
Validate before calling
def assert_aligned_data(d):
n = len(d.xyxy)
for k, v in d.data.items():
assert len(v) == n, f"data['{k}'] len {len(v)} != xyxy len {n}" Try / catch
try:
merged = sv.Detections.merge(detections_list)
except ValueError as e:
if "equal length" in str(e):
for d in detections_list:
bad = [k for k, v in d.data.items() if len(v) != len(d.xyxy)]
raise ValueError(f"misaligned data keys {bad}") from e
raise Prevention
- Never mutate detections.data in place; rebuild Detections when detection counts change
- Assert data-length alignment in every custom connector before returning Detections
- Prefer np.ndarray data values so shape mismatches fail loudly at construction time
When it happens
Trigger: sv.Detections.merge([d1, ...]) or concatenate where one input was constructed with data={'class_name': np.array(['a','b']), 'track_id': [1]} — lengths 2 vs 1. Any data key whose length differs from len(xyxy) of that same Detections triggers it during merge.
Common situations: Hand-building Detections with data dicts where one key was forgotten when appending a new detection; a connector or custom code that appends to xyxy but not to every data field; caching/pickling Detections created by an older code version with fewer data fields.
Related errors
- Both Detections should have exactly 1 detected object.
- Field '{attribute}' should be consistently None or not None
- All data dictionaries must have the same keys to merge.
- All metadata dictionaries must have the same keys to merge.
- Inconsistent data types for key '{key}'. Only np.ndarray and
AI-assisted analysis of roboflow/supervision@7f254d9784 (2026-08-15).
Data as JSON: /api/errors/9c9392b1bef69ce6.
Report an issue: GitHub.