PupilMetrics Research · v5.7.0
The static pupil, measured in numbers you can argue with.
Pupil–iris ratio, ellipseness, decentration, collarette position and the shape of the pupil margin itself — each against a published band, each exportable, each stored so the next visit can be compared with this one.
Windows, Android, macOS and iOS. The analysis runs on the device; patient records never leave it.
Patient names, ages, images and results are written to a local SQLite database and nowhere else. Licence activation sends a machine ID and a key — never a patient identifier.
- Median radius the pupil's own, not an ideal circle
- Protrusion margin bulges outward at that zone
- Flattening margin curves inward at that zone
- Collarette (ANW) the autonomic nerve wreath
- Version
- 5.7.0
- Platforms
- Windows 10 64-bit · Android 8.0+ · macOS · iOS 14+
- Trial
- 14 days or 20 analyses, whichever ends first
- Languages
- 18 languages, 20 locales
What one capture produces
Two independent pipelines run on every image — a classical computer-vision pass on the full-resolution pixels, and an ONNX model on a normalised 224×224 iris-centred crop — and their outputs are fused into a single confidence figure. Both eyes are captured, right (OD) first.
- P/I ratio
- Pupil diameter as a percentage of iris diameter. The primary measure of pupil size, and the only one the ML model predicts directly.
- %
normal 20–30 - Ellipseness
- Minor axis over major axis. 100% is a perfect circle; below the threshold the ellipse orientation is classified into a pupil form — horizontal, vertical, diagonal, chord-like or irregular.
- %
normal ≥ 95 - Decentration
- Offset of the pupil centre from the geometric centre of the iris, as a percentage of iris radius, reported with a direction in degrees and a named pattern.
- % of iris radius
normal < 5 - Zone findings
- Local deviation of the pupil margin from its own median radius, graded and reported per zone as a flattening (inward) or protrusion (outward). Up to four of each per eye.
- % deviation
reported ≥ 1.5 - ANW ratio
- Diameter of the collarette — the autonomic nerve wreath — relative to the iris. Reported with the OD/OS asymmetry alongside it.
- %
normal 25–35 - Anisocoria
- Absolute difference in pupil size between the two eyes, with the larger pupil named. Moderate and above raises a TBI research-observation flag.
- mm (converted)
none < 0.25 - Hybrid confidence
- A single score fusing capture quality, classical-CV confidence, ML plausibility and the agreement between the two models. A low score is the app telling you not to trust the row above it.
- %
Two pipelines, on purpose
The classical pass uses circle detection, radial sampling and boundary-point analysis at full resolution, and produces pixel-accurate boundaries. The model sees a 224×224 crop and predicts the P/I ratio through a calibrated linear fit (R² = 0.856), verified by a SHA-256 hash at load.
Where they disagree, the confidence score falls. That disagreement is the useful output — a number neither pipeline could produce alone.
The millimetre figure is a conversion
This app measures a ratio. It has no scale reference, no known working distance and no calibration target, so it cannot measure anything in millimetres directly. Every mm figure is the ratio multiplied by an assumed iris diameter — 12.0 mm for adults, less for infants.
Real adult iris diameter runs about 10.2–13.0 mm, so treat the millimetre column as a convention that makes bands comparable, and the ratio as the thing actually measured.
Every band the app will flag against
These are read off the app's own manual strings and its threshold constants, so the software and this page cannot drift apart. If a threshold changes in a release, this section changes with it.
| Ratio | Label |
|---|---|
| < 15% | Miosis — very constricted |
| 15–19% | Constricted |
| 20–30% | Normal for adults in standard indoor lighting |
| 31–40% | Dilated |
| > 40% | Mydriasis — very dilated |
| Age group | Expected | Normal range |
|---|---|---|
| Infant (< 1 yr) | 2.2 mm | 2.0 – 2.5 mm |
| Child (1–5) | 4.0 mm | 3.5 – 4.5 mm |
| Child (6–11) | 4.3 mm | 3.8 – 4.8 mm |
| Teen | 4.2 mm | 3.5 – 5.0 mm |
| Adult (20–39) | 3.5 mm | 3.0 – 4.2 mm |
| Adult (40–59) | 3.0 mm | 2.5 – 3.5 mm |
| Senior (60+) | 2.7 mm | 2.3 – 3.2 mm |
Date of birth must be entered for this comparison to appear. The infant band is measured against a smaller assumed iris — a newborn iris is about 10 mm, not 12 — because using an adult constant inflated every infant pupil by 20% and reported perfectly normal infants as above baseline.
| Deviation | Severity | What the app does |
|---|---|---|
| < 1.5% | — | Not reported at all |
| 1.5–3.0% | Within limits | Minor variation, not flagged |
| 3.0–6.0% | Mild | Noted for observation |
| 6.0–10.0% | Moderate | Flagged for follow-up |
| > 10.0% | Significant | Primary focus in the report |
| Ratio | Status |
|---|---|
| < 25% | Spastic — ring contracted inward |
| 25–35% | Normal |
| > 35% | Atonic — ring expanded outward |
OD/OS asymmetry of 0–5% is normal. One eye spastic and the other atonic is flagged as a functional frustration pattern.
| Difference | Severity |
|---|---|
| < 0.25 mm | None — within normal limits |
| 0.25–0.50 mm | Mild — may be physiological |
| 0.50–1.00 mm | Moderate — TBI flag raised |
| > 1.00 mm | Severe — TBI flag raised |
Against the assumed 12.0 mm iris these are roughly 2.1%, 4.2% and 8.3% of ratio. The TBI flag is a research-observation reference, not a diagnostic finding.
Six ways to get the image, one gate they all pass through
Source is chosen per eye on the camera-mode selector. Whatever the source, an image that fails the quality gate does not reach analysis — a blurred capture produces a confident wrong number, which is worse than no number.

Camera sources
Iriscope / External (USB). Deep integration with the Dino-Lite AM4115ZT and compatible models. Optimal focal distance is about 2–3 cm from the eye.
Wireless iriscope. HF4115-RUT with the WF-20 adapter — connect the computer to the iriscope's own hotspot first.
Binocular iriscope. A dual-lens USB camera, so one capture fills both eyes at once.
Quality-gated rear and front camera. The recommended method on phones and tablets: the gate fires the shutter itself when every criterion is met.
Manual camera. Direct shutter control, for a third-party macro lens or lighting the gate rejects unfairly.
Import from gallery. Re-analyse an archived image. The file is copied into the app's own folder, so the original is never modified.
| Criterion | Acceptable | What it catches |
|---|---|---|
| Sharpness | score ≥ 100 | Motion blur, out-of-focus iris |
| Brightness | 30 – 230 | Under- and over-exposure |
| Contrast | score ≥ 30 | Flat, low-detail images |
| Pupil confidence | ≥ 30% | Frame contains no detectable pupil |
| Centre offset | ≤ 25% of frame | Pupil too far off centre to measure decentration |
A red border and a live message name the failing criterion; amber is borderline; on green the photo is captured automatically. A separate “not an eye” check runs after capture in every mode, including manual.
Lighting
Diffuse and even — the iriscope's own LED ring is ideal. Avoid harsh shadows across the iris, and reposition slightly to move a corneal reflection off the pupil border.
Framing
The iris should fill at least half the frame width and sit centred. A pupil near the frame edge costs decentration accuracy directly.
Stability
Brace the device. Ask the patient to fixate on a distant point, and capture between blinks — the gate rejects blink frames on its own.

Imported images get a crop step
A gallery image was framed for something other than this analysis. The 4:3 crop tool lets you bring the iris up to the share of the frame the detector expects before anything is measured, or keep the original if it is already close.
Both eyes can be imported in one action — the app prompts for the right eye, then the left.
The reflex, when the static picture is not enough
Research carries the same PLR video pipeline as PupilMetrics Neuro: a dark baseline, a calibrated flash, and a frame-by-frame diameter series with latency, constriction, peak velocity and T75 read off it. PLR results are kept on their own screen and are not merged into the static iris analysis.

Every parameter carries its own verdict
Latency, constriction, max velocity and T75 recovery are each flagged Normal, Borderline or Abnormal against the age-adjusted band — and when no age was entered, the panel says so rather than quietly defaulting.
The waveform is drawn under the numbers with the baseline and minimum marked, so a grade that came from a noisy trace is visible as a noisy trace.
Grades A–F are assigned from signal-to-noise and constriction amplitude. A grade D or below is a capture problem, not a finding.

The frame rate is measured, not assumed
The direct-USB capture path enumerates what the camera actually offers and reports the rate it measured, alongside the mode it verified — because a nominal 30 fps that delivers 15 puts every time-based metric out by a factor of two.
Timestamps are written per frame in microseconds at capture time, so the analysis assigns the baseline and post-stimulus windows correctly even when the rate wobbles.
At 30 fps one frame is about 33 ms, so latency differences below one or two frames are not meaningful. Latency-sensitive work wants 60–120 fps.
Ways of looking at the same image
The chip bar on the results screen toggles overlays over the captured iris. The Research tab collects the more specialised instruments in a full-screen workspace — aimed at comparative case studies and teaching, and not needed for routine use.
CLAHE
Contrast-limited adaptive histogram equalisation, tile by tile rather than globally, bringing out crypts and fibre texture without blowing out the bright regions.
3D relief
The iris as an interactive height map — luminance becomes elevation, so raised fibres read as high ground and crypts as valleys, textured with the original image.
Pigment heatmap
A thermal scale over local pigment density, making heterochromia sectors and ciliary-zone darkening obvious.
Gabor
A filter bank across four scales and multiple orientations — the canonical texture operator in iris analysis, underlying Daugman's iris code.
LBP
Uniform rotation-invariant local binary patterns over the stroma, with a histogram — invariant to how the eye was rotated at capture.
Annotation
Freehand drawing on the image with undo and clear, exported as a flat PNG alongside the report.

Side-by-side comparison
Both irides in synchronised, zoomable panels with the bilateral metrics and their deltas beneath. Mirror OD flips the right eye so both are oriented nasal-side inward — the standard bilateral orientation. Sync pan ties the two panels together so you are comparing the same region of each.
Per-eye confidence is printed on each panel, so an asymmetry driven by one bad capture is visible as one bad capture.
One scan is a data point. The file is the finding.
Every completed analysis is written to the local database the moment the results screen finishes loading — there is no save step to forget. History is searchable by name and complaint, and any record reopens with its full result intact.

Serial scan timeline
Up to six series — OD and OS P/I ratio, ellipseness and hybrid confidence — plotted chronologically across every scan on file for that patient, each independently toggleable.
The thumbnail strip along the bottom is the point: a spike in the trend line is one click from the image that produced it, so an artefact can be identified as an artefact rather than written up as a change.
Plotting confidence next to the metric is deliberate. A series that moves while its confidence falls is a capture story, not a patient story.
Four ways out, all of them local

PDF, TXT, JSON, print
PDF is the primary report, assembled on-device at the moment you tap export. Both eye images sit on page one unless you turn images off; the practice name appears in the header of every page; the whole document is generated in the currently active app language.
TXT carries identical clinical content without the images, formatted for pasting into an EHR or an email — all metrics for both eyes, the full ANW section, the age-normalised comparison, anisocoria, research observations and observer notes.
JSON is the machine-readable record. Keep it alongside the PDF: it is the authoritative version, and it carries the parameters the analysis ran under.
Auto-save PDF is off by default. Turn it on and a report is written at the end of every analysis without a tap.
One application, four places to run it
The analysis pipeline is identical everywhere. What differs is how the image gets in, and what the operating system lets the app do with a window.
Windows
Windows 10 64-bit · 4 GB RAM · USB 2.0 for an iriscope
- The primary target, and where the iriscope integration is deepest
- Custom title bar; F11 fullscreen, Ctrl+H history, Escape to go back
- Constitutional type selection (desktop only)
- Reports written to the Documents folder
Install the DNVideoX driver before first launch if you are using a Dino-Lite.
Android
Android 8.0+ · USB OTG for an iriscope
- Quality-gated front and rear capture, with the shutter fired by the gate
- Mirror-assist modes for capturing your own eye
- Share sheet on every export, not just save-to-disk
- Iriscope over USB OTG where the device supports it
Install from Google Play or sideload the provided APK.
macOS
Signed DMG, built on CI
- Install directly from cnri.edu
- Same desktop feature set as Windows
- USB iriscope support depends on the device's UVC compliance
Built and notarised through the same pipeline as the iOS release.
iOS
iOS 14 or later
- Quality-gated capture and the full analysis pipeline
- Purchases handled in-app rather than by licence key
- Share sheet export
Distributed through the App Store.

Twenty locales, and the report follows the app
Arabic, Chinese (simplified and traditional), Dutch, English, French, German, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Portuguese (Portugal and Brazil), Romanian, Russian, Spanish, Swedish and Turkish.
Switching language changes the exported report too — headings, metric labels, status labels and finding descriptions are all generated in the active language, not just the interface.
Arabic renders right-to-left throughout, including the report.
The same database everywhere
SQLite on every platform, in the application support directory. Records hold the patient fields, the scan timestamp, image paths, the full result JSON for each eye, the anisocoria and age-norm results, and the PDF path.
Nothing is synced. Moving a patient file between machines means moving the file.
Keyboard, on desktop
F11 toggles fullscreen, Ctrl + H opens scan history from anywhere, and Escape goes back or closes the current dialog.
Settings and the practice-name field are reachable from the title bar on any screen, so neither needs you to leave what you are doing.
Desktop
Captured on Windows. The interface is identical on macOS.
Android
The same pipeline and the same numbers, with capture adapted to a handset.
Machine-bound on desktop, in-app on mobile
| Tier | Duration | Machines | Notes |
|---|---|---|---|
| Trial | 14 days | 1 | Full features. Also ends after 20 completed analyses, whichever comes first. |
| Standard | 1 year | 1 | — |
| Professional | Lifetime | 1 | — |
| Enterprise | Lifetime | Multiple | Multi-seat. |
Activation contacts licenses.cnri.edu once, to bind the key to a machine ID. After that the application works offline indefinitely. No patient identifier is ever part of that exchange.
Starting the trial
Click Start Free Trial on the licence screen. The countdown begins immediately and every feature is available — no card, no account.
Two limits run at once, days and analyses, and the trial ends on whichever runs out first. A failed capture is not counted against you.
Mobile
iOS purchases are handled in-app through the store rather than by licence key. Android follows the desktop model where the build is sideloaded, and the store model where it is not.
What this software is not
Published rather than buried, because a research instrument that oversells itself is worse than no instrument.
Not a medical device
PupilMetrics Research is a research and educational tool for practitioners. It is not approved, cleared or certified by the FDA, CE, TGA or any equivalent authority for diagnostic use in any medical context.
Every measurement, finding and report it produces — P/I ratio, ellipseness, decentration, zone findings, ANW assessment, anisocoria, age-normative comparison, confidence score and all therapy-panel content — is observational and educational only, and is not a diagnostic conclusion or a substitute for clinical examination.
The zone associations are a theoretical framework
The zone-to-organ correspondences come from historical clinical literature. The software labels them as research-derived frameworks and so do we. A protrusion at the middle-temporal zone is a measured deviation of the pupil margin; what it means is a hypothesis with a long paper trail, not a finding.
Millimetres are converted, not measured
There is no scale reference in the image. Every mm figure is a ratio multiplied by an assumed iris diameter, uniformly about 2.6% high against real population means. The ratio is the measurement; the millimetre is a convention for making bands comparable.
Texture metrics are device-relative
Gabor, LBP and the other texture tools compute from pixel intensity and image gradient, and are influenced by capture lighting, white balance and camera characteristics. Interpret them longitudinally within one patient on one device. Cross-device and cross-practitioner comparison needs a calibration the app does not perform.
Automatic detections are suggestions
Crypt, contraction-furrow and heterochromia-sector detection are algorithmic proposals. Each one should be visually confirmed before it is written down.
Not validated against a reference instrument
No method-comparison study, no test–retest repeatability figure, no sensitivity or specificity against a criterion standard. The specific studies that would be required are listed on the Neuro page and apply here equally.
Your data, your responsibility
Everything stays on the device, which means the practitioner is responsible for ensuring that local storage and any onward sharing of exported reports complies with HIPAA, GDPR, the Australian Privacy Act or whatever applies in their jurisdiction.
Fourteen days, twenty analyses, every feature
The trial is not a demo build. If it is going to disappoint you, it will do it with your own patients and your own camera, which is the only test that counts.