Skip to main content

Comparisons

Comparisons show the pixel-level differences between a snapshot and its baseline.

Comparison Results

# Capture and compare
snapshot = BrainzLab::Vision.capture("https://example.com")
comparison = snapshot.compare

puts comparison.status          # :passed, :failed, :pending_review
puts comparison.diff_percentage # 2.5
puts comparison.threshold       # 1.0 (1%)
puts comparison.passed?         # false (2.5% > 1%)

Comparison Status

StatusDescription
passedDifference within threshold
failedDifference exceeds threshold, auto-rejected
pending_reviewDifference detected, awaiting review
approvedChanges approved, new baseline created
rejectedChanges rejected, test failed

Viewing Differences

comparison = BrainzLab::Vision.comparison("cmp_abc123")

# URLs to view
puts comparison.baseline_url    # Original baseline image
puts comparison.snapshot_url    # New snapshot image
puts comparison.diff_url        # Diff overlay image

# Diff statistics
puts comparison.diff_percentage # Percentage changed
puts comparison.diff_pixels     # Number of pixels changed
puts comparison.diff_regions    # Array of changed regions

Reviewing Comparisons

Approve Changes

comparison = BrainzLab::Vision.comparison("cmp_abc123")

comparison.approve(
  reason: "Intentional header redesign"
)
# Snapshot becomes new baseline

Reject Changes

comparison.reject(
  reason: "Unintended layout shift - needs fix"
)
# Test marked as failed

Bulk Review

# List pending reviews
pending = BrainzLab::Vision.pending_comparisons

# Approve all from a test run
BrainzLab::Vision.approve_all(
  test_run: "run_abc123",
  reason: "Approved redesign changes"
)

Threshold Configuration

Control sensitivity per page:
BrainzLab::Vision.create_page(
  name: "Homepage",
  url: "https://example.com",
  threshold: 0.01  # 1% - strict
)

BrainzLab::Vision.create_page(
  name: "Dynamic Dashboard",
  url: "https://example.com/dashboard",
  threshold: 0.05  # 5% - lenient for dynamic content
)

Ignore Regions

Exclude areas from comparison:
BrainzLab::Vision.create_page(
  name: "Homepage",
  url: "https://example.com",
  ignore_regions: [
    { x: 10, y: 10, width: 200, height: 50 },  # Ad banner
    { selector: ".timestamp" },                  # Dynamic timestamp
    { selector: ".random-testimonial" }          # Random content
  ]
)

Anti-Aliasing Handling

Vision automatically handles anti-aliasing differences:
BrainzLab::Vision.configure do |config|
  config.anti_aliasing_threshold = 0.1  # Ignore small color diffs
  config.ignore_anti_aliasing = true    # Smart AA detection
end

Comparison Notifications

Get notified when reviews are needed:
BrainzLab::Vision.configure do |config|
  config.on_review_required = :slack
  config.slack_channel = "#visual-qa"
end

Comparison History

# List comparisons for a page
comparisons = BrainzLab::Vision.comparisons(
  page: "Homepage",
  status: :pending_review,
  since: 1.week.ago
)

comparisons.each do |c|
  puts "#{c.id}: #{c.diff_percentage}% - #{c.status}"
end