Skip to content

feat(project-form): DINOv2 check under the rendering-noise filter - #441

Merged
pashidlos merged 2 commits into
masterfrom
feat/dinov2-check
Oct 24, 2026
Merged

pashidlos merged 2 commits into
masterfrom
feat/dinov2-check

Conversation

@pashidlos

Copy link
Copy Markdown
Member

What

The project form's side of the DINOv2 check (Visual-Regression-Tracker/backend#431): a second look before the rendering-noise filter passes a run, which catches faint changes of content the blur misses (a missing light icon).

While "Ignore rendering noise" is on, every library's config form (pixelmatch, looks-same, odiff, VLM) offers "Check with DINOv2" and, while that is on, a "DINOv2 threshold" field (0.01–2, shows the backend default of 0.15 until edited). They write dinov2Check / dinov2Threshold into imageComparisonConfig and are carried over when the library or VLM provider changes.

Whether the server can run it

The form asks GET /dinov2/status ({ configured, available }):

Server Form
no DINOv2 service (DINOV2_URL unset) switch disabled, "Not available: this server has no DINOv2 service (DINOV2_URL)."
no service, project saved with the check on error note — every run the filter would pass goes to review; the switch can still be turned off
service set up but not answering warning note; the switch works
service answering no note
backend without the endpoint (older) treated as no service

Also

fix(project-form): the rendering-noise threshold used minNumber/maxNumber, which compare the whole part only — 128.5 passed the form and the backend fell back to its default. Now minFloat/maxFloat (separate commit, with a test that fails on the old validators).

Verification

  • Vitest: 624 passing (new: the status hook's cases, threshold bounds, carry-over on a library switch, dinov2Service). npm run lint 0 errors, npm run typecheck, npm run build clean.
  • Playwright: page-object locators and mockDinov2Status; request-body and availability tests in projectList.spec.ts. In Docker the full suite ran 310/316 — the 6 failures (project list render, test-run grid, matching-variations screenshot) passed 116/116 twice when those files ran alone, the load flakiness also seen on master.
  • screens.spec.ts: new entries "edit project dialog with the DINOv2 check on" and "edit project dialog on a server without DINOv2"; edit-project-noise-filter changes by the new switch under the threshold. Baselines generated in Docker, every changed PNG looked at.

Merge order

After backend#431: this form needs GET /dinov2/status. Against a backend without it, the check is simply not offered.

🤖 Generated with Claude Code

pashidlos and others added 2 commits October 24, 2026 17:12
minNumber and maxNumber compare the whole part only, so 128.5 passed the
form and the backend fell back to its default. minFloat and maxFloat
compare the number as typed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
While the filter is on, each library's config offers "Check with DINOv2"
and its threshold (0.01-2, the backend default 0.15 until edited), written
as dinov2Check / dinov2Threshold into imageComparisonConfig and carried
over when the library or VLM provider changes.

The form asks GET /dinov2/status whether the server can run the check. With
no service set up the switch cannot be turned on, as the backend would send
every run the filter passes to review; a project saved with it on says so
and can turn it off. A service that is set up but not answering gets a
warning. A backend without the endpoint counts as having no service.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@pashidlos
pashidlos merged commit e8efe67 into master Oct 24, 2026
3 checks passed
@pashidlos
pashidlos deleted the feat/dinov2-check branch October 24, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant