Research prototype. Not for diagnosis or treatment decisions.
About / Safety
What RetinaGuard AI is — and isn’t
An AI output cannot rule out disease
Even a well-performing model can miss disease, and image quality, devices and populations all affect results. Follow professional eye-care advice — especially if you have diabetes or any concerns about your vision. Medical content on this site is informational only and is not personal medical advice.
If you are concerned about your eyes
- Step 1
Contact an eye-care professional
An optometrist or ophthalmologist can examine your eyes and advise on screening intervals.
- Step 2
Don’t use this app to delay care
No output here — including “no apparent signs” — is a reason to postpone an appointment.
- Step 3
Urgent changes need urgent help
Sudden vision loss or significant, rapid changes in vision require urgent medical attention.
Privacy principles
- No account required — no names, dates of birth or identifiers are requested.
- No image storage by default — images are previewed locally in your browser.
- No analytics collecting health data.
- External transmission happens only when you click “Run analysis” with an inference API configured, and the destination is shown beforehand.
Data & source credits
Candidate training data: APTOS 2019 Blindness Detection on Kaggle.
Asia Pacific Tele-Ophthalmology Society (APTOS). APTOS 2019 Blindness Detection. Kaggle competition, 2019. https://www.kaggle.com/competitions/aptos2019-blindness-detection
Used subject to Kaggle competition rules. No dataset images are included in this app. All retina visuals are illustrative schematics.
Run locally & connect a model
Status: VITE_INFERENCE_API_URL not set — uploads will not be analyzed
bun install
echo "VITE_INFERENCE_API_URL=https://your-inference-host.example" > .env.local
bun run devThe app sends POST {VITE_INFERENCE_API_URL}/predict as multipart/form-data with the image in the field image. The service must allow CORS from this site. Requests time out after 30 seconds. Never place API secrets in the frontend — protect the service at the network or proxy layer.
Expected JSON response
{
"prediction": 2, // required, integer 0–4
"probabilities": [.., .., .., .., ..], // optional, 5 values in [0,1]
"uncertainty": 0.18, // optional; >= 0.5 is treated as high
"quality": "gradable", // optional: gradable | ungradable | uncertain
"model_version": "effnet-b3-v0.1", // optional
"warnings": ["..."] // optional
}Optional fields are displayed only when returned — nothing is invented. Malformed responses, HTTP errors, timeouts and unreachable services produce an error state with no result. Ungradable/uncertain quality or high uncertainty replaces the grade with a professional-review recommendation.