A Windows desktop application for self-administered BCVA (Best Corrected Visual Acuity) eye chart testing. Displays randomized Sloan letter charts using the Optician Sans font, tracks visual acuity over time for each eye, and exports results to CSV.
Disclaimer: VisionTrax is not medical software. It is not intended to diagnose, treat, or replace a professional eye examination. Acuity measurements from this application should not be considered clinically accurate or used for medical decision-making. VisionTrax is designed as a personal trend-tracking tool to help you observe general changes in your visual acuity over time. Always consult a qualified eye care professional for diagnosis, prescriptions, and treatment.
- Windows 10/11
- .NET 10.0 SDK
dotnet build
dotnet run
For a release build:
dotnet build -c Release
The compiled output will be in bin/Release/net10.0-windows/.
On first launch, the calibration screen opens automatically. A large letter "H" is displayed on screen. Use a physical ruler to measure the letter and adjust its size with the up/down buttons (or arrow keys) until it is exactly 2 inches tall. Click Done to save the calibration. This ensures letter sizes are accurate on your display.
The calibration is saved to settings.txt in the application directory and persists between sessions. You can recalibrate at any time using the Calibrate button.
This application is designed to be used at a 5-foot viewing distance from the screen. Position yourself 5 feet away from your display for accurate measurements. The letter sizes are calibrated for this distance.
Use the Left Eye / Right Eye buttons at the top of the screen to indicate which eye is being tested. Results are tracked separately per eye.
| Key | Action |
|---|---|
| Up Arrow | Increase letter size (worse acuity line) |
| Down Arrow | Decrease letter size (better acuity line) |
| Right Arrow | Generate new random letters at current line |
| Left Arrow | Go back to previous letters at current line |
| Space | Read current letters aloud |
| Enter | Record current line as correctly read |
| Backspace | Record current line as incorrectly read |
| Esc | Exit application |
An XInput-compatible gamepad (e.g., Xbox controller) can be used. If no controller is connected, it is silently ignored.
| Button | Action |
|---|---|
| D-Pad Up | Increase letter size (worse acuity line) |
| D-Pad Down | Decrease letter size (better acuity line) |
| D-Pad Right | Generate new random letters at current line |
| D-Pad Left | Go back to previous letters at current line |
| Y | Read current letters aloud |
| A | Record current line as correctly read |
| B | Record current line as incorrectly read |
- Correct (Enter / A): A rising two-tone chime
- Incorrect (Backspace / B): A low tone
- Read aloud (Space / Y): Letters are spelled out one at a time using text-to-speech
The application displays 22 standard LogMAR acuity levels ranging from 20/10 (LogMAR -0.3) to 20/1250 (LogMAR 1.8). Each line shows 5 random Sloan letters (C D H K N O R S V Z) with no repeats. The default starting line is 20/200 (LogMAR 1.0).
Press Enter (or A on gamepad) when you read a line correctly, or Backspace (or B on gamepad) when you read it incorrectly. Each result is saved to results.json with a timestamp, the acuity level, letters shown, selected eye, and calibration factor.
Each result record includes a Comment field that defaults to empty. You can manually edit results.json to add comments to any result entry (e.g., noting conditions like "with new glasses" or "tired eyes"). Comments appear as labels on the results chart next to their data points.
Click See Results to view line charts of your best correct acuity per day, shown separately for each eye. The Y axis auto-scales to fit your data with better vision at the top and worse vision at the bottom. The X axis labels adjust based on your data's time range (daily, weekly, monthly, or quarterly). Data points with comments display as yellow labels on the chart.
Click Save CSV on the results page to export your data. The CSV includes columns for date, Snellen acuity, LogMAR value, and comments for both left and right eyes.
All data files are stored in the application directory alongside the executable:
| File | Description |
|---|---|
settings.txt |
Display calibration scaling factor |
results.json |
Test result history (JSON array) |
visiontrax.log |
Debug log |
See LICENSE for details.