Pixelstabiele opnames
Deterministische rendering met wachten op fonts, gepinde animaties en maskering van dynamische content — diffs weerspiegelen echte regressies, geen ruis.
ScanU is een platform voor visuele regressietests en cross-browser-screenshottests voor professionele webteams. Het legt pixelnauwkeurige renders vast van elke pagina die telt, in de browsers en viewports die uw gebruikers daadwerkelijk gebruiken, en brengt layoutwijzigingen aan het licht die unit- en end-to-end-tests stilletjes missen.
Wat ScanU is
ScanU maakt van de laatste meters releasekwaliteit — precies wat uw gebruikers te zien krijgen — een signaal waar uw team mee aan de slag kan. Het platform maakt pixelstabiele screenshots van de pagina’s die u aanwijst, legt een expliciete baseline vast en vergelijkt elke volgende run met die baseline, in de browsers en op de apparaten die ertoe doen.
De meeste teams draaien al linters, typecontroles, unit-tests en end-to-end-flows. Dat alles kan groen blijven terwijl een knop twaalf pixels wegglijdt, een modal zijn padding verliest, een menu breekt in Safari of een mobiel breakpoint de hero stilletjes reflowt. Functionele tests toetsen gedrag; ze toetsen niet hoe de pagina eruitziet. Daarvoor is een screenshot-testingtool bedoeld, en dat is precies wat ScanU doet — zonder omhaal.
Onder de motorkap stuurt ScanU echte renderingengines aan — Chromium, Gecko en WebKit — tegen de URL’s of componentpreviews die u aanwijst. Elke run levert voor elk geconfigureerd paar (browser, viewport) een deterministische opname. De eerste geaccepteerde run wordt de baseline. Vanaf dat moment is elke pull request, elke deploy en elke geplande run een diff tegen die baseline: elke visuele regressie wordt zichtbaar als een beoordeelbare wijziging, zoals een code review een gewijzigde regel oppikt.
De volledige vergelijkingspipeline regelt de details die screenshot-diffing pas echt bruikbaar maken in productie: tolerantie voor anti-aliasing, stabilisatie van animaties, font-loading, maskering van dynamische content, scroll-capture en perceptuele diff-drempels — zodat een sub-pixel-hintingwijziging geen echte layoutregressie overstemt.
ScanU is gebouwd voor teams die de UI zien als een contract met hun gebruikers. Het is een tool voor visuele regressietests, een tool voor cross-browser-screenshot vergelijking en een diff-review-oppervlak — in één platform — tussen uw build en uw release gate.
Deterministische rendering met wachten op fonts, gepinde animaties en maskering van dynamische content — diffs weerspiegelen echte regressies, geen ruis.
Chromium, Gecko en WebKit parallel aangestuurd, in de desktop-, tablet- en mobiele viewports die uw gebruikers daadwerkelijk gebruiken.
Baseline, huidige opname en gemarkeerde diff naast elkaar. Accepteren, afwijzen of baseline bijwerken — altijd met een expliciete actie, nooit in stilte.
Draait in uw bestaande pipeline. Status checks, PR-commentaar en artefactlinks verschijnen waar uw engineers al code reviewen.
Richt ScanU op Storybook, een componentsandbox of live-URL’s. Tokenwijzigingen en componentrefactors krijgen een eerlijke visuele audit vóór de release.
Screenshots en metadata worden opgeslagen op Europese infrastructuur, met AVG-conforme dataverwerking — geschikt voor teams met strikte eisen aan gegevenslokalisatie.
Waarom het ertoe doet
De kosten van een visuele bug worden zelden in ontwikkeltijd gemeten. Ze worden gemeten in het vertrouwen van een gebruiker die uw product opent, iets subtiel verkeerds ziet en stilletjes besluit dat dit team niet op details let. Dat vertrouwen is lastig te herstellen, en het is bijna altijd goedkoper om de bug te voorkomen.
Functionele tests beantwoorden één vraag goed: «doet de knop het juiste wanneer erop geklikt wordt?». Op alles wat vóór de klik gebeurt blijven ze stil — of de knop de juiste kleur, de juiste grootte, de juiste plek heeft, of hij leesbaar is op een scherm van 360 pixels of überhaupt nog zichtbaar is na de laatste CSS-refactor. Precies in die kloof leven de meeste incidenten op releasedag.
Echte regressies die wij zien — en waarvoor ScanU gebouwd is — clusteren rond een handvol voorspelbare aanleidingen:
gap van een flex-container klappen op één breakpoint. Op desktop ziet de layout er identiek uit; op een tablet van 768 pixels overlappen twee cards nu.Geen van deze wijzigingen laat een assertion falen. Alle breken iets voor een gebruiker. De taak van ScanU is om dit tweede soort breuken net zo makkelijk zichtbaar, reviewbaar en blokkeerbaar te maken als een rode unit-test. Wanneer de diff op de pull request verschijnt, kan een designer meewegen zoals een reviewer meeweegt op een function signature — vóór de merge, niet nadat het productie heeft bereikt.
Die verschuiving — van «hopelijk merkt iemand het in staging» naar «we reviewen een visuele wijziging zoals we een code- wijziging reviewen» — is de kernwaarde van een tool voor visuele regressietests in een moderne release-pipeline.
Cross-browser-tests
Cross-browser-testen is geen nostalgiebelasting uit het IE6-tijdperk. Ook moderne engines — Chromium, Gecko en WebKit — blijven uiteenlopen op de details waarop uw layouts stilletjes leunen, en een verrassend aantal productie-incidenten is terug te voeren op een renderingverschil dat niemand controleerde.
Als een regressie alleen in één engine opduikt, betekent dat vrijwel altijd een van drie dingen: er werd een feature gebruikt die in sommige engines later wordt uitgerold dan in andere; een layout hangt af van een metric die per platform verschilt (scrollbar-breedte, font-baseline, smoothing-algoritme); of een user-agent-afhankelijke polyfill gedraagt zich in het veld net iets anders dan op de ontwikkelmachine. Alle drie zijn onzichtbaar voor een engine-agnostische testsuite.
Typische voorbeelden die we zien tijdens een cross-browser- audit:
date, datetime-local, select — worden in WebKit zichtbaar anders gerenderd dan in Chromium en duwen aangrenzende elementen af en toe een paar pixels op.line-height die in Chromium in balans is, kan een CTA in Gecko over de vouw duwen.gap in flex-containers, aspect-ratio en container queries zijn op iets verschillende momenten in engines geland. Als uw build op een oudere baseline mikt, kunnen fallback-paden anders renderen dan het primaire pad.prefers-color-scheme, accent-color en forced-colors op Windows — slaan per platform anders door in het DOM en zijn makkelijk over het hoofd te zien in een lokale dev-omgeving.ScanU legt elke pagina in de door u geconfigureerde engines en viewports in één run vast, met identieke fixtures en timing-hooks, zodat de diffs die u ziet echte layoutverschillen zijn — geen bijeffect van het draaien van elke browser in een andere harness. U ziet de volledige cross-browser-mogelijkheden op de productpagina: de matrix die u configureert, is de matrix die bij elke run wordt vastgelegd.
Voor teams die design systems uitrollen, of elk product waarvan de visuele identiteit deel uitmaakt van het merk, is die matrix geen extraatje. Het is de enige manier om te weten dat wat uw klant in Safari ziet, overeenkomt met wat u in Chrome hebt afgetekend.
| Browser | Viewport | Status |
|---|---|---|
| Chromium 124 | 1440 × 900 | Komt overeen met baseline |
| Firefox 126 | 1440 × 900 | Komt overeen met baseline |
| WebKit (Safari 17) | 1440 × 900 | Visuele diff · review |
| Chromium 124 | 768 × 1024 | Komt overeen met baseline |
| WebKit (Safari 17) | 768 × 1024 | Layout-verschuiving gedetecteerd |
| Chromium 124 | 390 × 844 | Nieuwe baseline in afwachting |
Hoe screenshot-vergelijking werkt
Een visuele diff-tool is alleen zo nuttig als de signaal-ruisverhouding van de diffs die hij produceert. De capture-pipeline van ScanU is zo ontworpen dat het enige dat tussen twee runs verandert, datgene is wat u ook daadwerkelijk hebt gewijzigd — niet het decor van fonts, animaties, tijdstempels of advertentieplekken eromheen.
Elke run is een pipeline van drie stappen. Eerst navigeert ScanU in elke browser-engine naar de pagina of het component onder test, wacht op een geconfigureerde set readiness-signalen — geladen fonts, gedecodeerde afbeeldingen, rustig netwerk, een data-ready-attribuut of een eigen JavaScript-probe — en pint alle CSS-animaties op hun laatste frame. Vervolgens wordt de pagina op elk geconfigureerd viewport in dezelfde run vastgelegd, met scroll-stitching voor lange pagina’s zodat u het volledige artefact krijgt en niet alleen het zichtbare deel. Tot slot vergelijkt de pipeline de opname met de geaccepteerde baseline en produceert per (browser, viewport)-paar een resultaat: identiek, binnen tolerantie of significant anders.
De vergelijking zelf is geen naïeve pixel-diff. ScanU past een perceptueel model toe dat anti-aliasing, sub-pixel-rendering en kleurruimte-schommelingen begrijpt, zodat een kerning-eigenaardigheid in WebKit geen bug lijkt. Ook ondersteunt het expliciete maskers voor zones waarvan u weet dat ze bij elke load veranderen — live data, relatieve tijdstempels, gerandomiseerde content, carrousels — zodat die gebieden nul ruis toevoegen aan de diff.
Zodra een echte wijziging opduikt, toont het platform drie gesynchroniseerde panelen: de baseline, de huidige opname en een diff-overlay die precies markeert wat er is bewogen. Per wijziging wordt één beoordeelbare beslissing vastgelegd — accepteren, afwijzen of baseline updaten — en die beslissing wordt deel van de projectgeschiedenis. Geen stille drift en geen automatische acceptatie: de baseline beweegt pas als een geautoriseerd persoon dat uitdrukkelijk zegt.
Dezelfde pipeline kan vanuit drie ingangspunten worden aangestuurd: tegen live-URL’s (productie, staging, PR-previews), tegen een statische site of gebouwde asset- bundle, of tegen componentpreviews in een Storybook-achtige sandbox. De meeste teams gebruiken het eerste als release gate, het tweede voor deploy-artefacten en het derde voor werk aan het design system — alle drie voeden dezelfde baseline-opslag.
De laatst geaccepteerde render voor deze pagina, browser en viewport. Bevroren tot een reviewer hem expliciet bijwerkt.
De opname van deze run. Dezelfde fixtures, dezelfde timing-hooks, hetzelfde viewport — alleen de code onder test is gewijzigd.
Amberkleurig gemarkeerde gebieden tonen waar de huidige render verder van de baseline afwijkt dan de geconfigureerde tolerantie toestaat.
Voor wie ScanU is
ScanU is gebouwd voor teams wier werk wordt beoordeeld op wat de gebruiker ziet. Dat is een bredere groep dan het klinkt — niet alleen designers en frontend-engineers, maar iedereen wiens release-beslissingen ervan afhangen dat een UI op een bepaalde browser, bij een bepaald viewport, op een bepaalde dag correct is.
Frontend- en full-stack-engineers gebruiken ScanU als laatste etappe in een pull-request-pipeline: de build is groen, de unit-tests slagen, de end-to-end-suite is tevreden — en vervolgens bevestigt een visuele diff dat de wijziging overeenkomt met wat de designer in gedachten had, of brengt een regressie aan het licht die niemand had opgepikt door een patch door te lezen. Het resultaat is minder tijd aan post-deploy-brandblussen en meer tijd aan het werk dat het product echt vooruit helpt.
QA-engineers krijgen een testlaag die schaalt zonder selectors te herschrijven. Een nieuwe pagina aan de visuele suite toevoegen is een URL en een baseline — geen week met broze XPath. De laag die UI-regressies opvangt wordt eersterangs onderdeel van de testpiramide in plaats van een Slack-bericht van een gebruiker achteraf.
Design-system- en platformteams draaien ScanU tegen elke componentsandbox in hun bibliotheek. Wanneer een token verandert, krijgt elk component dat ervan afhangt automatisch een visuele audit. Wanneer een component wordt gerefactord, krijgen de consumerende projecten een diff die ze kunnen reviewen voordat de nieuwe versie landt. Zo voorkomt een design system dat stille regressies zich over jaren opstapelen.
Product- en engineering-leaders gebruiken het review-oppervlak als bewijs. Release notes kunnen een link bevatten naar de geaccepteerde visuele diff voor elke release. Incident-reviews kunnen vastleggen of een regressie is opgepikt, gemist of expliciet geaccepteerd. In de loop van de tijd wordt het platform een logboek van hoe de UI is geëvolueerd en wie elke stap heeft afgetekend.
Use cases
Hetzelfde platform bedient zeer uiteenlopende workflows. De rode draad is dat elk van deze teams UI oplevert op een cadans waar hun klanten om geven, en elk een manier nodig heeft om in één oogopslag te zien of de UI er nog steeds uitziet zoals het hoort.
Wat de vorm van het team ook is, ScanU wordt doorgaans om een van vijf redenen ingezet: een recent productie-incident dat een visuele regressie zou hebben afgevangen; een design- system-migratie waarvan de impact-omvang onmogelijk handmatig te auditen is; een CI/CD-workflow die een release gate nodig heeft die rijker is dan «tests geslaagd»; een klantgerichte oplevering die voor/na-bewijs vraagt; of een compliance-positie die kiest voor EU-gehoste test-tooling. Een gedeelde CI/CD-integratie zit achter alle vijf — dezelfde pipeline doet het werk, ongeacht of hij door een PR, een merge of een nachtelijke planning wordt getriggerd.
Lever klanten wekelijks een visuele delta per site. Voor/na-bewijs in elke sprint, op elke browser uit het contract, in één rapport.
Voeg een visuele laag toe aan de testpiramide. Nieuwe pagina’s komen met een URL en een baseline in de suite — geen broze selectors, geen zelfgebouwde screenshot-scripts om te onderhouden.
Screenshot-diffs verschijnen inline op de pull request. Layoutregressies worden in review opgevangen, niet in productie en niet in een Slack-draad van een klant.
Snel bewegen zonder de homepage te slopen. Een deterministisch vangnet dat de marketingsite pixelstabiel houdt door redesigns, A/B-tests en token-migraties.
Visuele dekking op elke componentsandbox. Token-wijzigingen, theme-swaps en componentrefactors krijgen automatisch een audit voordat de bibliotheek publiceert.
Valideer breakpoints op mobiel, tablet en desktop in dezelfde run. Responsive tests worden van een screenshot-klus een review-stap.
CI/CD en release-vertrouwen
Release-vertrouwen is geen gevoel. Het is een pipeline die de waarheid vertelt over wat er wordt uitgerold — inclusief de delen waar uw test runner geen mening over heeft. ScanU koppelt zich aan die pipeline als status check, PR-commentaar en opgeslagen artefact, linkbaar vanuit elke incident-review.
Het integratiemodel is bewust saai: de capture-stap van ScanU draait in dezelfde job die al uw tests uitvoert; hij meldt een pass, een review-needed of een fail op de PR; en die status wordt behandeld als elke andere verplichte check. Teams weten al hoe ze groen, geel en rood uit hun pipeline moeten lezen — een visuele-regressiecheck in dat ritme voegt een nieuwe veiligheidsdimensie toe zonder een nieuw mentaal model te eisen.
Onder de motorkap is ScanU ontworpen voor de realiteit van moderne CI/CD:
De stapsgewijze CI/CD-integratiegids beschrijft de specifieke bedrading voor GitHub Actions, GitLab CI, Bitbucket Pipelines en zelf-gehoste runners. Het gangbare geval is één extra job; het geavanceerde geval is een matrix van omgevingen die een baseline door een gefaseerde release heen laat promoveren.
AVG · EU-hosting · privacy
Testartefacten zijn data. Screenshots kunnen per ongeluk persoonsgegevens bevatten die op een pagina stonden — een naam in de navigatiebalk, een e-mailadres in een profielmenu, een ordernummer op een bevestigingsscherm. Een verantwoord platform voor visuele tests behandelt die artefacten met dezelfde zorg als de productiedata die ze weerspiegelen.
ScanU wordt in de Europese Unie gebouwd en gehost, met opslag en verwerking op in de EU geopereerde infrastructuur. Voor teams met verplichtingen rond gegevenslokalisatie — gereguleerde sectoren, publieke afnemers, privacygevoelige B2B-klanten — is dat vaak een procurement-eis, geen voorkeur. ScanU is ontworpen om aan die eis te voldoen zonder concessies aan productmogelijkheden.
Uit die houding volgen een paar bewuste ontwerpkeuzes:
Voor het volledige privacybeeld — sub-verwerkers, regionale hosting, verwerkersovereenkomst, bewaartermijnen — zie de AVG- en gegevensverwerkingsdocumentatie. Voor de meeste teams telt de korte versie: uw screenshots blijven in de EU, en het platform is zo gebouwd dat ze daar blijven.
Het verschil
Visual testing is een drukke categorie. Een groot deel van wat ScanU onderscheidt, zijn de dingen die het weigert te doen — de sluipweggetjes die het niet neemt, de ruis die het niet doorstuurt naar uw reviewqueue, en de meningen die het heeft over hoe een diff gereviewd hoort te worden.
Generieke screenshot-tools worden vaak geleverd als een library die u aan uw test runner plakt, waarna u mag worstelen met timing, fonts, animaties en de eeuwige vraag of een verschuiving van één pixel een echte bug is of een afrondingsartefact. ScanU neemt een stevigere positie in: als het platform geen deterministische opname kan produceren, is dat een probleem van het platform — niet van u. Daarom zijn readiness-signalen, font loading, animation pinning, scroll stitching, perceptuele diffing en gemaskeerde gebieden ingebouwd en niet aangebouwd.
De pricing volgt dezelfde logica. Voor een redelijk team — een paar dozijn pagina’s, drie engines, drie viewports, één pipeline — zou de kosten van visuele dekking geen post moeten zijn die u op een budgetbespreking moet verdedigen. De volledige prijspagina is in duidelijke cijfers geschreven: wat u in elk plan krijgt, wat als run telt en waar het plafond ligt. Geen maatwerkofferte voor teams die gewoon de UI willen uitrollen die ze hebben ontworpen.
Stabilisatie, font-readiness, animation pinning en scroll stitching zijn platformfuncties — geen snippets die u in uw eigen repo onderhoudt.
De diff-engine begrijpt anti-aliasing en sub-pixel-rendering, zodat niet-zichtbare micro-verschuivingen de regressies die er echt toe doen niet overstemmen.
Baselines bewegen alleen wanneer een geautoriseerd persoon de wijziging accepteert. Elke update is auditbaar. Geen stille drift.
Screenshots, metadata en review-historie staan op EU-infrastructuur. Geen opt-in nodig voor teams die aan die houding gebonden zijn.
Wat ScanU afvangt
De meeste bugs die een platform voor visuele regressie afvangt, zijn niet exotisch. Het zijn de kleine, ondramatische, makkelijk te missen breuken die langs reviewers glippen omdat geen enkele assertion ernaar kijkt. Hieronder een greep uit de categorieën die ScanU specifiek aan het licht is gebouwd om te brengen.
Visuele bugs clusteren in een handvol terugkerende patronen. Elk lijkt in isolatie triviaal; elk kan in productie belanden zonder één rode test. Allemaal worden ze als diff zichtbaar bij de volgende ScanU-run, vóór de PR wordt gemerged.
backdrop-filterzorgde. Op Safari rendert een navigatiebalk plots ondoorzichtig waar hij eerder vervaagde.text-wrap: balance leunt, is strak op Chrome maar blijft ongebalanceerd in engines die het nog niet hebben uitgerold. Zonder cross-browser-check is dat onzichtbaar op de machine van de developer.Het feature-overzicht gaat dieper in op de detectie-primitieven — perceptuele toleranties, gemaskeerde gebieden, scroll- capture, baseline-branching — en laat zien hoe elk aansluit op een van de categorieën hierboven. Voor de meeste teams luidt de korte versie: verandert er iets visueel, dan merkt ScanU het; is het gewenst, dan accepteert u het met één klik; is het dat niet, dan hebt u het eerder opgevangen dan wie dan ook.
FAQ
Volgende stappen
De snelste manier om te beslissen of visuele-regressietesten in uw pipeline thuishoren, is hem eenmaal te draaien tegen een project dat u al uitrolt. ScanU is gratis om te starten, kost enkele minuten om aan een bestaande CI-job te koppelen en produceert zijn eerste diff bij de eerstvolgende commit.
De meeste teams beginnen met één pagina met hoge trafiek op drie browsers en drie viewports. Genoeg om het platform aan het werk te zien, en genoeg om de volgende echte regressie op te vangen die uw huidige testsuite zou hebben gemist.
Vanaf daar groeit de scope met het vertrouwen van het team: meer pagina’s, meer breakpoints, dekking op componentniveau voor het design system, een verplichte status check op elke pull request. Geen kennismakingsgesprek, geen maatwerk- onboarding, geen minimumtermijn.