dgtlmoon/changedetection.io · warning · ValidationError

Bounding box values are too large

Error message

Bounding box values are too large

What it means

Each of the four bounding-box integers must be ≤ 10000 (a reasonable maximum screen dimension). Values above that raise ValidationError, preventing absurd crop regions that would break or slow the SSIM image diff.

Source

Thrown at changedetectionio/processors/image_ssim_diff/forms.py:31

def validate_bounding_box(form, field):
    """Validate bounding box format: x,y,width,height with integers."""
    if not field.data:
        return  # Optional field

    if len(field.data) > 100:
        raise ValidationError(_l('Bounding box value is too long'))

    # Should be comma-separated integers
    if not re.match(r'^\d+,\d+,\d+,\d+$', field.data):
        raise ValidationError(_l('Bounding box must be in format: x,y,width,height (integers only)'))

    # Validate values are reasonable (not negative, not ridiculously large)
    parts = [int(p) for p in field.data.split(',')]
    for part in parts:
        if part < 0:
            raise ValidationError(_l('Bounding box values must be non-negative'))
        if part > 10000:  # Reasonable max screen dimension
            raise ValidationError(_l('Bounding box values are too large'))


def validate_selection_mode(form, field):
    """Validate selection mode value."""
    if not field.data:
        return  # Optional field

    if field.data not in ['element', 'draw']:
        raise ValidationError(_l('Selection mode must be either "element" or "draw"'))


class processor_settings_form(processor_text_json_diff_form):
    """Form for fast image comparison processor settings."""

    processor_config_min_change_percentage = IntegerField(
        _l('Minimum Change Percentage'),
        validators=[
            validators.Optional(),

View on GitHub (pinned to 5d9c7c6da7)

Solutions

  1. Clamp each value to ≤10000, or crop the region to a sub-area under the limit
  2. Verify you are supplying width/height, not x2/y2 end coordinates
  3. If the source image really is taller than 10000px, pre-scale or split the watch into regions

Example fix

# before
bounding_box = '0,0,19200,43200'
# after
bounding_box = '0,0,1920,1080'  # use actual width/height, not end coords
Defensive patterns

Strategy: validation

Validate before calling

parts = [int(p) for p in bbox.split(',')]
if any(p > 10000 for p in parts):
    parts = [min(p, 10000) for p in parts]  # or reject
bbox = ','.join(map(str, parts))

Type guard

def bbox_within_limits(s: str, limit: int = 10000) -> bool:
    return all(int(p) <= limit for p in s.split(','))

Prevention

When it happens

Trigger: Submitting coordinates or dimensions greater than 10000, e.g. '0,0,20000,20000' for a huge screenshot, or a width/height computed as x2/y2 end-coordinates from a tool that reports absolute pixel extents of very large images.

Common situations: Full-page screenshots of very long pages where height legitimately exceeds 10000px; confusion between width/height and right/bottom coordinates; retina/zoom-scaled coordinates doubling the expected values.

Related errors


AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27). Data as JSON: /api/errors/ea6add57fee038ec. Report an issue: GitHub.