Turn a folder of pose-estimation .h5 files into a single, self-contained web page for
reviewing tracking quality. The generated page summarizes keypoint confidence and
reliability for every recording and gives you a simple Include / Exclude review workflow.
No server and no internet connection are needed — the result is one standalone HTML file that you can open on any computer or email to a colleague.
- Python 3.9 or newer
- Two packages, installed once:
pip install -r requirements.txtPoint the script at any folder containing pose .h5 files:
python generate_qc_dashboard.py /path/to/your/h5_folder -o qc_dashboard.htmlThen open the resulting qc_dashboard.html in any web browser (double-click it).
If your videos were not recorded at 30 frames per second, pass your frame rate so the time axes are labeled correctly:
python generate_qc_dashboard.py /path/to/your/h5_folder -o qc_dashboard.html --fps 30The data is baked into the HTML, so you can move or share that one file freely.
- Left panel — every recording, with a quality dot (good / okay / poor). Search by name, sort by confidence or quality, or filter to a single quality level.
- Overview (shown before you select a video) — the confidence distribution across the whole dataset and which body parts are least reliable.
- Detail view (click a recording) — mean confidence, a confidence-over-time heatmap, frame-dropout charts, and per-keypoint reliability.
- Confidence-threshold slider (top right) — re-scores quality live, so you can see how a stricter or more lenient cutoff changes the picture.
- Your decision — mark each recording Include, Undecided, or Exclude, and add free-text notes.
Where your decisions live. As you review, your Include / Exclude choices and notes are
saved automatically in your web browser's local storage (under a key named
pqc_<number-of-recordings>). That means they are:
- kept on that browser, on that computer — they do not travel inside the HTML file;
- never written into your
.h5files, and never saved to disk by the tool; - lost if you clear your browser data — so export anything you want to keep or share.
Export buttons (bottom of the page, under Export):
| Button | File you get | What's inside |
|---|---|---|
| Export Included | include_videos.txt |
One filename per line — every recording marked Include |
| Export Excluded | exclude_videos.txt |
One filename per line — every recording marked Exclude |
| Export All Decisions | qc_decisions.csv |
Columns: file, decision, quality, mean_confidence, notes |
| Export Full Metrics | qc_full_metrics.csv |
The columns above plus duration, frame-loss stats, and a _mean and _reliable column for each keypoint |
The plain-text lists are convenient for scripting (e.g. feeding the "include" list into an analysis pipeline). The CSV files open directly in Excel, R, or pandas.
Re-loading decisions (Import). Click Import Decisions and choose a CSV that has at
least a file column and a decision column (a notes column is optional). Decisions are
matched to recordings by filename, so qc_decisions.csv round-trips: export it, move it to
another computer, load the same dataset there, and import it back to restore your review.
Tip: if you plan to re-import, avoid commas inside your notes. The importer splits columns on commas, so a comma in a note can shift the other fields.
Copyright 2026 Kumar Lab, The Jackson Laboratory.
Licensed under the Apache License, Version 2.0 — see LICENSE. You may use, modify, and redistribute this software under the terms of that license.