- 40M+ runsSaved and reviewed in production at Samsung
- ~50 projectsOn Samsung’s central quality platform
- Since 2018In daily use by Samsung’s teams
- Open sourceApache 2.0, self-hosted: your results stay on your network
You already built half of this
Every team that cares about quality ends up with its own tools to look at results. They fit, at first.
- Metrics pasted into a spreadsheet, a week after someone ran them.
- Screenshots in a chat thread, to argue which version looks better.
- A dashboard someone maintains on weekends, for one project.
- A coding agent that says its change is better, with nothing to check it against.
QA-Board is what those tools become after years of use on dozens of projects: one place where each commit's outputs and metrics sit next to the reference's, for everyone on the team and for their agents.
The loop
Run, compare, look, find, tune, gate
The same review loop for anything you measure: camera pipelines, models, servers, embedded code, test suites, agents.
Run your code on your test set
Wrap your code with qa and run it on a batch of inputs: on your computer, on a cluster (LSF, Dask, Celery) or in CI on every push.
People and agents
One view of quality, for people and agents
Coding agents write a growing share of changes. With QA-Board they run the same tests, read the same results and meet the same targets as people, and a person decides what ships.
- People
Review in the web app
Every commit’s outputs next to the reference’s, behind a link you can share. Milestones, History and tuning, from the browser.
- Agents
Read the same results
qaboard.runs(url)andqa runsgive an agent the runs a page shows. The compare API gives it a verdict against the reference. - Agents
Learn the conventions
Two skills teach coding agents to integrate a project with QA-Board, and to check the results before they call a change better.
- People and agents
Meet the same targets
Experimentalqa gatefails a change that regresses, whoever wrote it, and links to the Metrics Diff that shows why.
Viewers
Built for heavy data
Each kind of output gets a viewer that puts the new run next to the reference, in sync, and shows where they differ: images and videos down to the pixel, 3D maps, flame graphs, plots and reports.
Images, down to the pixel
Zoom from a 113 MP test wall to single pixels of a Siemens star, and the reference follows. The viewer loads only the tiles it shows.
- Wipe and flipDrag a divider across the two images, or flip between them in place: differences jump out.
- The differencePerceptual, ΔE 2000, absolute or signed. Raise its maximum until only what really changed stands out.
- Blind testsThe two images in a random order, A and B: pick the better one, then reveal which was new.
The details
Polish you'd never build in-house
Years of daily use on dozens of projects, in the web app you get on day one.


Which runs changed most
The server compares the images of every run on the page with the reference’s, and ranks the runs by their largest difference: start your review where it matters.
Every stage, synced
One slider over a camera pipeline’s stages, from the raw mosaic to the output, drives every run’s card at once.
Bit accuracy before a hardware handoff
Only the output files that changed, each diffed with the reference’s. A commit that changes none is bit-accurate.


Why a run failed
When LSF kills a run, its log says why, compares the memory it used with what it asked for, and says what to change.


Tuning frontiers
Every configuration of a sweep, one metric against another: see which ones sit on the efficient frontier.


The file’s own values
Hover a pixel: its values in both images as your code saved them, 16-bit or float included, not only the colors on screen.


Milestones
Save a release as a shared milestone, an experiment as a private one, and compare any commit with them.
Live logs
Follow a running log, count its errors, and jump from one to the next.
File browser
Every run’s folder in the browser, from the keyboard: j k to move, / to filter, c to copy a path.
Use cases
For quality that pass/fail tests can't judge
Images, models, trajectories, latency, test suites, agents. Each use case follows a demo project: the problem, the workflow, and the configuration that produces what you see.
- Camera, ISP, imaging
Image quality
A denoiser wins PSNR but adds halos: synced zoom, image differences, a 113 MP test wall, every stage of the pipeline.
- Computer vision, ML
Model evaluation
An int8 detector is 72% smaller and misses small objects: metrics per class and object size, PR curves over the reference.
- Robotics, perception
Odometry and mapping
A false loop closure pulls the trajectory meters away: 6DoF trajectories against the ground truth, point clouds, depth video in sync.
- Embedded, HW/SW co-design
Bit accuracy
Check in CI that a change left every output file identical, before you hand a fixed-point model over to a hardware team.
- Performance engineering
Serving latency
A shared cache saves CPU and takes p99 from milliseconds to seconds: latency tails, flame graph diffs, History, a tuning frontier.
- LLM agents
Agent evals
Shorter tool descriptions, and an assistant reboots robots without asking: transcripts diffed, a report per task, pass rate and cost.
Production-ready
Hardened at scale
QA-Board has been Samsung's central quality platform since 2018: about 50 projects and more than 40 million runs. Running it for your company is documented and tested.
Upgrades without downtime
- Rolling deploys, tested in CI
- Rollbacks
- Database backups and restores
Kubernetes
- A Helm chart, installed in CI with a real batch
- Database failover with CloudNativePG
Access control
- Single sign-on, LDAP, local accounts
- Project roles, groups from your directory
Monitoring
- Errors and traces of the web app, server, jobs and qa
- Sent to Sentry, hosted or self-hosted
Storage at scale
- What takes space, and whose it is
- Old outputs deleted automatically
Heavy outputs
- 113 MP images, zoomed to the pixel
- Videos, point clouds, flame graphs
Integrations
Fits your stack
QA-Board wraps the code you have, where it runs today. It doesn't need to be the entrypoint of your build or your CI.
Your code
- Python
- Any executable: C++, shell...
Git and CI
- GitHub and GitLab webhooks
- GitHub Actions, GitLab CI, Jenkins
- CircleCI, Travis CI...
Runners
- Local processes
- LSF
- Dask
- Celery
Servers
- Docker Compose
- Kubernetes (Helm)
- Air-gapped installs
Sign-in
- Single sign-on (OpenID Connect)
- LDAP, SAML
- Local accounts
Storage
- A shared folder (NFS, SMB...)
- Mounted at the same path everywhere
Roadmap
Where we're going
- Next
N-way comparisons
Pick N commits, batches or tuning runs: outputs in a grid with synced zoom, one metrics column per run.
- Next
HTTP upload of outputs
Save results from GitHub-hosted runners, laptops off the VPN and pods without a shared volume.
- Next
An MCP server
Coding agents read results, Metrics Diffs and image crops, and review their changes like people do.
Get in touch
Bring QA-Board to your team
We're looking for teams who track quality, and we help them get started. Tell us what you measure and where your code runs, and we'll help you:
- Set up a self-hosted server on your own machines, with Docker Compose or Kubernetes
- Integrate your first projects: inputs, metrics, visualizations and CI
- Plan upgrades, backups and storage as your results grow
See it on your computer
Start a server, run an example project and open its results in a few commands.
What's new: October 2026
A new image viewer, readable configuration diffs, a dark theme and a commit page that stays fast with 1000 runs. QA-Board now works with GitHub and other git hosts, and comes with a quickstart, a tutorial and a user guide. Admins: read "Before you upgrade" first; at SIRC, also install `qaboard-site-sirc` when you upgrade qaboard.
A new image viewer
Compare images side by side, with a wipe, one at a time in place, or as their difference, measured perceptually or in ΔE 2000. Zoom in to read the pixels' own values, even 16-bit or float, run a blind test, and rank the runs of a page by how much their images changed. Videos compare the same way, frame by frame.
Learn more →See what changed in a configuration
Runs show how their configuration differs from their reference run's, like gain: 3 → 4, and hide the settings all runs share. Lists and tuning parameters are readable, and runs are compared with the reference run whose configuration is closest. Copy a run's settings as qa options.
Fast with 1000 runs and years of commits
On a commit with 1000 runs, filtering takes half a second instead of freezing the page for 7, and the Metrics Table opens in a third of a second instead of 7. The commit search box finds any of a project's commits, and long commit lists and the projects list load as you scroll.
Learn more →Dark theme and more room for results
Switch to a dark theme, or follow your system's. Collapse the sidebar to icons, dock the View options on the right (o), and switch commit lists to Compact. Press ? for the keyboard shortcuts and the filter syntax.
Logs, files and reruns
Logs update live, with search, and failed LSF runs say why LSF stopped them. Browse a run's files under /s/, edit your batches in Available Tests with errors flagged as you type, and redo only the runs you filtered, with the batch's runner and concurrency.
GitHub, other git hosts and a quality gate
QA-Board works with GitHub and GitHub Enterprise as well as GitLab, and receives the push events of Gitea, Forgejo and Bitbucket Cloud. qa batch sets a commit status that links to the results, you can start GitHub Actions workflows from the web app, and the experimental qa gate fails the CI when quality regresses.
Get started in minutes
Try QA-Board on your computer with one Compose file and demo projects, then follow the tutorial: it shows the steps for your server, git host, CI and runners. A user guide explains the web app, and release notes pop up in it once a month is over.
Learn more →Deploy, monitor and upgrade safely
deployments/deploy.py rolls out new backend replicas next to the old ones and rolls back instantly, a Helm chart runs QA-Board on Kubernetes, and Sentry traces requests from the browser to the database. Before upgrading, check your git host, QABOARD_STORAGE_ROOTS and QABOARD_PROXY_HOSTS settings, and your backups.