This free, all-platforms, semi-automatic Freiburg Vision Test assesses acuity and contrast sensitivity using optotypes or gratings. It’s not certified for medical use; please observe the checklist.
FrACT is frequently updated. It could be a bug fix, more often a cool new feature or a new preset for some study. As programming is wont to be, problems, bugs, or undesirable side effects may sneak in. In spite of extensive testing (like using the testing suite above), problems may slip through. To protect you, before deploying a major update, I preserve the former version, thus "freezing" it and linking to it here. [Even if said link disappears, that version remains on the site.] So, if you routinely rely on FrACT, use the latest frozen version. It’s best installed as a Web App, so FrACT will still run even if this website is temporarily down.
What’s new?
2025年10月08日
3.2
new feature: all Settings export/import via json-textfiles. Build your own Presets!
2025年06月15日
3.1.2
new feature: "Line(s) of optotypes" sports a popup to change # of lines directly
2025年06月06日
3.1.1
new feature: plotting the results history after the run
2025年05月13日
3.0
breaking change: new export format (6). New feature: ID string and eye condition. Fix bug for incorrect reaction times since mid-March (1000ms too short). Rename many settings to be more systematic w/o change in their function (3.1)
2025年05月12日
2.1
new feature: save results into PDF, for ‘21 CRF Part 11’ compliance
2025年03月12日
2.0
add BaLM10 (prompting version increment), clear type-ahead buffer during ISI
2025年01月28日
1.6
Gratings now sinusoidal, square-wave, triangular & "checkerboard"; all windows/panes centered in normal & fullscreen view
2024年10月11日
1.5
Vernier "full" export format: appropriate format (arcsec not LogMAR); extend postMessages syntax
2024年09月16日
1.4
Add optional "ISI" (interstimulus interval); left/right randomization of eccentXInDeg (request); helper fields "best/worst possible acuity"; round out full control of FrACT from supervising software; redesign "Line(s) of optotype" mode; drop superfluous Cappuccino files; add more presets
2024年06月02日
1.3
Control via HTML window.postMessage() for Version, setSettings & Acuity/Contrast test runs. An example: This allows to start the automatic demo run. API described here.
2024年05月19日
1.2
Feedback sounds selectable; many internal changes improving documentation, integration, simplification and extensibility; new Cappuccino framework (1.3.1)
"FrACT", a semi-automatic visual test battery available as a free app, employs psychometric methods combined with anti-aliasing and dithering to provide self-paced assessment of visual acuities (Bach 1996), contrast sensitivity (using optotypes or gratings) and Vernier acuity on standard equipment. FrACT complies with the international norm for acuity testing (EN ISO 8596) and is recognized as one of the "Recommended Methodolog(ies) for Assessment of Visual Acuity" by the Harmonization of Outcomes and Vision Endpoints in Vision Restoration Trials Taskforce. FrACT is used world-wide in vision labs, by optometrists, ophthalmologists, and in clinical trials (→Who used FrACT). It has been validated in independent laboratories (→Descriptions & Validations).
After rewriting the code to serve all platforms, I renamed FrACT to "FrACT10"; they are identical in basic test behaviour. FrACT10’s possibilities now surpass the "classic" FrACT; its code is →open source (→commit history). With FrACT10 moving forward online and as web app, "classic" FrACT will remain available here.
Key characteristics
Test symbols / Optotypes: Sloan letters, Landolt rings, tumbling Es, symbols, gratings; Vernier patterns for hyperacuity. Gratings: sinusoidal or square-wave.
Acuity / contrast thresholds: Assessed with a progression of test symbols, using a Bayesian approach and following a modified "Best PEST" strategy (see General Pertinent Sources for details).
Results Display: As LogMAR, Snellen fraction, or decimal acuity; full details can be exported for further processing.
Customization: Many parameters can be set, such as for testing low contrast acuity or colours, and results include not just acuity/contrast thresholds but also reaction time and more.
Technicalities: Equipment resolution limits in space and luminance are mitigated by dithering and antialiasing.
Where and why to use?
Participants’ screening in research settings: This is where I have personally used FrACT the most.
Acuity detail studies: Useful for research on specific acuity properties such as contrast, exposure time, reaction time, feedback, noise, and hyperacuity, as evidenced by numerous papers.
Perfect for keeping your waiting patients entertained :) !
Many shades of FrACT
One particular advantage of FrACT: its ultra-wide range with continuous coverage
For (ultra) low vision: FrACT can reproducibly assess CF and even HM: Counting Fingers, CF≈1.9 LogMAR; Hand Movement, HM≈2.3 LogMAR. →Sources and more detail.
For normal vision: FrACT can assess acuities beyond 2.0 decimal = 40/20Snellen = –0.3 LogMAR. [Although 20/20 vision is commonly considered as "normal," numerous studies (e.g., Frisén & Frisén (1981), Elliot et al. 1995, Pointer 2006) suggest that the actual average acuity among the general population is nearly double that figure. Consider: If Snellen had adopted the population average as the standard for "normal" vision, approximately half of the population would have fallen below this threshold.]
Gratings: Can sweep (find threshold) for contrast or spatial frequency: Settings▸Gratings▸What to sweep:
Eccentricity for Acuity and Contrast: Settings▸General▸Optotype eccentricity [°]
Timing control: ISI, display time and response time: Settings▸General▸Timeouts
Noise embedding for Acuity and Contrast: Settings▸Misc▸Noise embedding
For studies: reproducible across time and locations through the Settings▸PRESETS mechanism or the All settings export/import, and multiple result export options
Explore the Settings for more information. Something unclear? Simply hover your mouse over any questionable GUI element to reveal tooltips which tell you more.
Yes, free als in beer. What’s more, my apps don’t contain any code to monetize their use (e.g. selling your location). However, should you desire to contribute: donations are gladly accepted via Buy Me a Coffee.
Please remember to cite it when publishing (with version number). Since this is free software, there’s no warranty for anything. Your feedback is warmly welcomed and has frequently improved FrACT.
Download/Install as Web App on all platforms for offline use
FrACT10 is a Web App (details: blog) that can be installed for offline use like so: First open it in its own window/tab (or open a "frozen" version) and look for your browser’s "3 dot" or sandwich menu:
Chrome/Brave · MacOS
Chrome/Brave · Windows
Edge · Windows/MacOS
Web App macOS Chrome
webApp macOS Chrome
webApp macOS Chrome
3 dots ...>Save and share>Install whatever... changes all the time, now: Cast, ... and Share>Install as App
3 dots ... > Install
3 dots ··· > Apps
Other desktop browsers
Safari (MacOS ≥ Sonoma): File > Add to Dock ...
In all cases the Web App will be saved here: «user»/Applications/...
Firefox doesn’t (openly) support Web Apps
Linux: depends on your specific flavor. I found various recipes, e.g. for "Web App Manager"
iOS: Add to Home Screen in the Share menu and proceed as suggested
FrACT10 online: Any modern browser on Android, iOS, Linux, MacOS or Windows
FrACT10 Web App: Chrome/Edge/... browsers on Windows, same + Safari on MacOS, also Android, iOS, Linux
Also nearly any modern visual display unit. For remote input see the response box below in Usage Details. Please observe the Checklist for reliable results.
On clinical trials
Clinical trials demand greater rigor than what’s outlined in the Checklist. These trials will be professionally managed, and I’ve had the pleasure of collaborating with numerous exceptional clinical scientists, statisticians and other experts. Many of my suggestions will state the obvious and here appear in random order, they’re not intended to be exhaustive.
Run every condition twice. That yields a quality marker (measure of reproducibility, e.g., the Bland-Altman limits of agreement), then average for any further processing.
After you have established all desired settings (that differ from FrACT’s defaults), let’s make a PRESET for your study. This ensures reproducible settings across time & centers.
Document the version of FrACT, don’t change it during the course of your study (see "frozen" above). For documentation of all settings used, employ Settings>Export Setting.
For every session, apply your preset, check luminance of the VDU, and verify size calibration (with "plastic card").
Find an easy and reproducible way to ensure a well-controlled observation distance.
For reliable documentation and 21 CRF Part 11 compliance: Use the Result→PDF button after every run. In Settings>Misc there are fields for ID and tested eye which are included in the PDF output (or any other export).
Make use of automated results export / integration with your hospital documentation system. Never type a result manually.
Make yourself independent from my website: Install a "frozen" version of FrACT10 as web app, or run from your own servers, as described in Long term support (at the end).
FrACT in standard form might not be permitted by regulatory bodies because its settings are accessible to technicians and patients. Approaches to lock down FRACT include:
Drive FrACT solely with HTML messages. Implement a "Start test run" button in your software which sets all settings to your standard and then initiates the test run. This functionality is similar to the Click for demo run↑ button above and requires some programming expertise on your side.
I could add a setting to reload your specific Preset at the beginning of any run, also adding the preset name to the exported data. This would ensure that every result was obtained under standard settings. So far, there hasn’t been a need for this feature.
Test-retest variability = Precision. And what about Repeatability, Reproducibility and Accuracy?
Good sources on this topic
British Standards Institution (1987) Precision of Test Methods Part 1. Guide for the Determination of Repeatablity and Reproducibility for a Standard Test Method by Inter-laboratory Tests (BS 5497-1:1987 ≙ ISO 5725:1986), p 1
Precision, as defined above and in Wikipedia, refers to the variability observed in repeated tests and encompasses two aspects:
Repeatability: quantifies precision in tests performed during a short interval of time in one laboratory by one operator using the same equipment. The repeatability value r according to the British Standards Institution is defined as the value below which the absolute difference between two single test results may be expected to lie with a probability of 95%. It can be quantified with the 95%-confidence interval (CI95) of the Bland-Altman Limits of Agreement (LoA). For example, a CI95 of ±0.2 LogMAR indicates that in 95% of the cases results will fall within a ±2 lines range.
Reproducibility: quantifies precision in tests performed under different conditions, e.g. in different laboratories. Thus: reproducibility ≥ repeatability.
Accuracy, also called "trueness", describes how close measurements are to their true value; a difficult concept in visual acuity. Thus we fall back to operational definitions: Acuity x is what test x’ measures.
FrACT’s variability has been documented across various studies, as outlined below. Conclusion: The 95% confidence interval of FrACT’s LoA is ≲ ±0.2 LogMAR in patients/participants with acuities of hand movement or better. If you want lower variability, increase the number of trials beyond 18 [roughly a 1/√n dependence, see Bach (2024)].
CF: counting fingers, HM: hand movement (→how to derive quantitive values for these). The values for the 2006, 2007, 2009 & 2016 studies are based on re-analysis of the original data sets because formerly I used decimal acuity and also idiosyncratic measures of variability, obnoxious to convert.
The British Standards Institution’s / ISO’s repeatability value r (the "repeatability coefficient" in Bland-Altman 1999) happens to have the same value as LoA when there are two measurements per eye and no bias (thanks UG! This deserves a brief paper in its own right because the Bland-Altman papers are so arcane) (Bland-Altman 1996).
Most of the time I find a tiny bias in vision assessment: The second run’s acuity is a wee bit better, probably due to learning. Since the bias is not significant, I average the upper and lower LoAs, arriving at the single number for LoA as given in the table above.
Long term support
Main motto: Progredere, sed nihil frange1.
FrACT began 40 years ago and is available on the Internet in various forms for 30 years now. I am committed to providing unwavering support for decades. "Classic" FrACT was last (and finally) updated in 2020, and will continue to work in the two major operating systems due to its 64-bit architecture.
Initially, FrACT10 was exclusively running in a web browser. Subsequently, it was also released as an Electron-based application. If you currently use one of these applications, they will continue to function without gaining new features. In 2023, FrACT10 was replaced by a platform-independent Web App (details: blog). This development makes FrACT10 accessible on all platforms and allows for automatic updates, if so wished.
If you want to run the "(b)leading edge" most recent FrACT10, install the Web App from here. Whenever I update FrACT10, your Web App automatically updates in the background: Give it 1⁄2minute, then reload, voilà!
If you want a stable version for long-term usage (studies, clinical trials, student assignments, ESU, ...), install the Web App from the latest "frozen" version. Even if you clear your browser caches, specifically the cache which Chrome calls "Hosted app data", the Web App will reinstall the same version by itself. Frozen versions will remain on the server for years, even if I remove the direct links to them.
To make yourself completely independent from me (advised), install all files at an HTTP server of your own, like so: Got to https://michaelbach.de/fract/FrACT10/FrACT/ (or a frozen version of your choosing). Download the entire contents of that directory (≈15 MB; e.g., with a "site sucker") to an appropriate location on your HTTP server. Then open the index.html therein and lo, FrACT10 runs from your server!
1Advance, but don’t break anything.
Usage Details
If you ran a previous version, all selections in Settings may automatically be defaulted in order to update internal structures (depends on the exact version).
How to calibrate?
Very easy: Enter the width of the calibration bar (easiest with plastic card) and the observation distance in the Settings>General interface. Be sure to have enough distance from the screen, so pixel resolution does not limit acuity. Also consider other entries in Settings and set them appropriately; the defaults can not be optimal for every situation. The Checklist is a must-read; in the FrACT10 Manual or classic FrACT3.x Manual [PDF] all settings are explained, probably in more detail than you wished...
For the Contrast Test, you also need to go to Settings>Gamma. There you can interactively linearise the luminance transfer function ("gamma correction") before testing. But see below for a cautionary note on the difficulties of contrast testing. Or use a screen calibrator (see What is special about the Contrast Test?).
All selections in Settings are automatically saved.
Starting the test
Apart from using the obvious buttons a test run can also conveniently be started from the numerical keypad (digit "5"). Enter the position of the appearing optotypes orientation via the numerical digit keys, or use the alternatives. The digit key "5", pressed twice, aborts an ongoing test run (and inhibits display of the premature result). In Settings you can select which test start on "5".
Response box
Working with patients you may want to enter results yourself. In vision experiments, participants typically enter their responses themselves.
The two examples here are for Landolt Cs with their 8/4 alternatives as optotypes. For Sloan letters, any standard keyboard is fine (Bluetooth-coupled allows distance).
image of keypad 1For direct response entry by the observers, these keypads are useful. They come in various versions. Most have only a short cable, for the standard 4 m distance you will want to add a USB extension cable.
image of keypad 2This one sports fancy labels.
Number of trials?
First, this depends on the number of choices with your chosen optotype: Sloan letters have 10 choices, Landolt Cs 8 or 4, gratings 4 or 2, Vernier lines 2.
The default number of trials is set to 18 with 8/10 choices, 24 with 4 choices, and 32 with 2 choices. A paper on this: Bach M (2024) Freiburg Vision Test (FrACT): Optimal number of trials?
For scientific applications, rather than increasing the number of trials, best repeat each condition (e.g. each eye at 18 trials, ideally in an ABBA scheme) and take the mean; this also allows test-retest quality quantification.
Why are all the above trial numbers divisible by 6? Because every 6th trial is a "bonus" or "easy" trial (if enabled), where the optotype is presented at 3 times its current threshold estimate. This keeps your participants happy, especially since the last trial is thus always a ‘success’ experience.
4 or 8 gap positions, or 10 letters?
Sloan Letters have 10 alternatives, Tumbling E has 4 possible orientations, for Landolt C there are 4 or 8. Depending on your application, you may wish to use only the 4 primary Landolt gap positions or to supplement it with the four oblique directions; FrACT allows both. Briefly: 4 directions are less easily confused, but guessing probability is higher, making more trials necessary; 8 positions allow more rapid determination of visual acuity(less trials) as the guessing probability is lower. Final outcome should be identical, but the number of runs must be adequately chosen; see previous item. The letters are the standard Sloan letters, the Sloan letter "C" is physically identical to the Landolt C.
Results Export
The test result is presented on the screen in formats as chosen in Settings>Acuity. Additionally, the result can be transferred to the clipboard (in a simple, final-result-only or full-history fashion); so just switching to a spreadsheet program running in the background allows pasting and archiving the result. More export options: FrACT10 Manual>Exporting.
What is special about the Contrast Test?
Experience taught me that contrast testing is technically more demanding than acuity testing.
Avoid stray light falling on the screen; a "monitor hood" may be sufficient
Be sure to linearise luminance ("gamma correction") before you test contrast (go to Settings>Gamma); the best approach is to employ a screen calibrator (I’m using the Spyder). Choose a gamma value of your liking (e.g. 1.8 or 2.0) and calibrate the screen/computer to that value; then set it thus in Settings>Gamma in the gamma value field.
Normal contrast vision is better than normal screen luminance resolution (256 steps are not enough, especially after loosing a bit or two via linearizing ("gamma correction"). This is solved via dithering (Bach (1997) Anti-aliasing and dithering in the "Freiburg Visual Acuity Test’. Spatial Vision 11:85–89).
Mirroring, or more generally, "Display transformation"
In many environments the standard 4 m distance may be difficult to achieve. In such conditions, high-quality front surface mirrors can extend the effective viewing distance. Their image-flip can be compensated for by Settings>Display transformation.
Shortcuts
I am lazy and prefer to start actions without mousing, thus I added a number of shortcuts, see also FrACT10 Manual or classic FrACT3.x Manual [PDF]. Casing is irrelevant for shortcuts.
Shortcuts "classic" FrACT
Key
Action
5
start "Which test on five"
a
start Acuity
l
start Acuity Letters
c
start Contrast
v
start Vernier Acuity
e
start Acuity Tumbling E
b
aBout
h
Help
u
Settings
q or x
Quit = eXit
55 or <esc>
abort running test
Shortcuts FrACT10
Key
Action
L
Run Acuity · Sloan Letters
C
Run Acuity · Landolt C
E
Run Acuity · Tumbling E
A
Run Acuity · Auckland Optotypes (TAO)
V
Run Hyperacuity · Vernier lines
1
Run Contrast threshold · Sloan Letters
2
Run Contrast threshold · Lanolt Cs
3
Run Contrast threshold · Tumbling Es
G
Run Gratings
S
Settings
F
Fullscreen toggle
5
Run as set in "Which test on five"
55
Abort current run
H
Help
Q, X or -
Quit = eXit
Avoiding more mousing: Use the tab key (⇥) to move between fields in Settings (shift-tab for backwards). The blue 🆗 button is activated by the return key.
Descriptions & Validations
Jolly et al. (2019) A Randomized Crossover Study to Assess the Usability of Two New Vision Tests in Patients with Low Vision. Optomet Vision Sci 96(6): 443–452 [comparison of the Berkeley Rudimentary Vision Test (BRVT) & FrACT]
Bach & Schäfer (2016) Visual acuity testing: feedback affects neither outcome nor reproducibility, but leaves participants happier. PLOS ONE 11(1):e0147803
Kollbaum, Jansen, Kollbaum, Bullimore (2014) Validation of an iPad test of letter contrast sensitivity. Optom Vis Sci 91:291–296 [Contrast, comparison of Pelli-Robson, FrACT, and a new iPad test]
Kurtenbach, Langrová, Messias, Zrenner, Jägle (2013) A comparison of the performance of three visual evoked potential-based methods to estimate visual acuity. Doc Ophthalmol 126:45–56 [Acuity, comparison of FrACT and ETDRS]
Lange, Feltgen, Junker, Schulze-Bonsel, Bach (2009) Resolving the clinical acuity categories "hand motion" and "counting fingers" using the Freiburg Visual Acuity Test (FrACT). Graefe’s Arch Clin Exp Ophthalmol 247:137–142 [→PDF] [Acuity, ETDRS & FrACT in very low acuity]
Schulze-Bonsel, Feltgen, Burau, Hansen, Bach (2006) Visual acuities "hand motion" and "counting fingers" can be quantified with the Freiburg visual acuity test. IOVS 47:1236–1240 [Acuity, ETDRS & FrACT in very low acuity]
Terzi, Bühren, Wesemann, Kohnen (2004) Frankfurt-Freiburg Contrast and Acuity Test System (FF-CATS) – A new test to determine contrast sensitivity under variable ambient and glare luminance levels [Article in German]. Ophthalmologe 102:507–513 [Acuity]
Loumann Knudsen L (2003) Visual acuity testing in diabetic subjects: the decimal progression chart versus the Freiburg visual acuity test. Graefes Arch Clin Exp Ophthalmol 241:615–618 [Acuity]
Neargarder, Stone, Cronin-Golomb, Oross 3rd. (2003) The impact of acuity on performance of four clinical measures of contrast sensitivity in Alzheimer’s disease. J Gerontol B Psychol Sci Soc Sci 58:54–62 [Acuity]
Wesemann (2002) Visual acuity measured via the Freiburg visual acuity test (FVT), Bailey Lovie chart and Landolt C chart [Article in German] Klin Monatsbl Augenheilkd 219:660–667 [Acuity]
Bach (1997) Anti-aliasing and dithering in the "Freiburg Visual Acuity Test’. Spatial Vision 11:85–89 [Methodology]
"Generic description" Bach (1996) The "Freiburg Visual Acuity Test" – Automatic measurement of visual acuity. Optometry and Vision Science 73:49–53 [PDF] Also consider the FrACT10 Manual or classic FrACT3.x Manual [PDF] which describes all options [PDF]
How do I cite it?
Glad you asked! If you used FrACT for your research, please cite it.
Bach (1996) The "Freiburg Visual Acuity Test" – Automatic measurement of visual acuity. Optometry and Vision Science 73:49–53 [PDF] (the "generic" paper) or
Bach M (2007) The Freiburg Visual Acuity Test – variability unchanged by post-hoc re-analysis. Graefes Arch Clin Exp Ophthalmol 245:965–971 [→PDF] or
Lieberman & Pentland (1982) Microcomputer-based estimation of psychophysical thresholds: The Best PEST. Behavior Research Methods & Instrumentation 14:21–25
Newman & Sproull (1979) Principles of Interactive Computer Graphics. New York, McGraw-Hill, Inc.
Metha, Vingrys, Badcock (1993) Calibration of a color monitor for visual psychophysics. Research Methods, Instruments, & Computers 25:371–383
Mittelviefhaus, Bach, Jedynak, Kommerell (1993) Der Freiburger Visustest. Ophthalmologe 90:1320–135
Pelli (1996) VideoToolbox
Pentland (1980) Maximum likelihood estimation: The Best PEST. Perception & Psychophysics 28:377–379
Petersen (1990) Zur Fehlerbreite der subjektiven Visusmessung. Fortschr Ophthalmol 87:604–608
Treutwein (1995) Adaptive Psychophysical Procedures. Vision Res 35:2503–25
Bach (1997) Anti-aliasing and dithering in the "Freiburg Visual Acuity Test’. Spatial Vision 11:85–89
Coding Best Practices (GxP)
While FrACT began as a "hobby project" (see History below), its widespread adoption entailed rigorous quality control.
Quantitative correctness of the optotype geometry. This is easily verified on the screen with a ruler and a little trigononometry.
To make this easier, you can use this tip: At a distance of 57.3 cm, one degree of visual angle corresponds to 1 cm. Multiply this with 6 and set the resulting 344 cm as testing distance. Calibrate the ruler (e.g. with plastic card), then: → 1 millimeter on the screen corresponds to one minute of arc. Use, e.g., tumbling E, and if you have the Starting LogMAR at 1.0, the first optotype’s stroke width should be 10 mm.
For very low acuity, when converting between angle α and screen pixels x, be sure to use this formula x = 2 · distance · tan(α / 2), and not x = distance · tan(α). (Maybe not that important: the difference even at 50 cm observation distance is less than 1%.)
Quantitative correctness of the threshold outcome. This was done by controlled comparisons to chart testing in my lab and in independent laboratories.
Documentation Practices. The code is self-documenting through descriptive long variable / method names; a detailed manual describes everything; all changes are tracked and available on github.
Data Management.
No confidential user-traceable data is recorded nor stored by FrACT itself.
Settings are reproducible and traceable via PRESETS.
Result data integrity is ensured via automated export mechanisms
Low-level programming practices can only be mentioned in passing here
Robustness. The Settings dialog is augmented with plausibility checking of the input values. E.g., when a numerical entry has incorrect number formatting or is set to an implausible value, the parameter is reset to its default value.
As is well known, any interesting computer program cannot be shown to be entirely correct, and usually isn’t. Thus the ongoing validation by independent and critical users is most important for the verification of FrACT. Thank you! All pertinent comments welcome. Also see Bugs? below.
A brief history of FrACT, "classic" and the current "FrACT10"
It will continue to work for many years, but going forward only FrACT10 will be developed further.
Do not use this for new projects.
In 1985 I programmed the first version, using a custom-built Z80 CP/M computer with a graphics board based on the NEC 7220 graphics chip, using serious digital differential algorithms (Newman & Sproull, 1979) in assembly language just to draw the Landolt C. It became more than a curio after porting to Pascal and incorporation of the Best PEST threshold algorithm (Lieberman & Pentland, 1982) [nowadays one would call this Bayes-based] and was routinely employed in my lab to screen subjects’ acuities before experiments.
The port to the Macintosh in 1992, translating from Pascal to C++, facilitated the use of anti-aliasing (Bach, 1997), which immediately made the measurements more precise (by allowing intermediate pixel values) and enabled a higher acuity limit at practical distances (a few meters).
In 1996 the first Internet version was made available after adding gamma correction for better quantitative definition. The rich feedback spurred many bug fixes and feature expansions, paving the way from a ‘hobby’ to a professional application, now validated in independent laboratories.
The pressure of requests finally motivated me in 2002 to port the program to an operating system-agnostic environment, for which I chose ActionScript/Flash (formerly Macromedia, acquired by Adobe). Consequently the program then ran in near identical fashion on the Macintosh, Linux and Windows operating systems for nearly two decades.
Anticipating the demise of Flash, in 2020 I ported the program to a JavaScript-based framework (Cappuccino); thus it runs on all platforms, including tablets. In 2021, FrACT10 achieved parity with the last "classic" FrACT3.10.5 and its code was open sourced. In 2022 the browser-only FrACT10 was complemented by apps for MacOS & Windows, based on Electron. In 2023 the install hassles of apps were solved by packaging FrACT10 as a Web App for all platforms. In 2024, I implemented HTML messages to control FrACT10 and read/set its Settings and more; this facilitates automation and embedding FrACT10 in larger systems.
Version history of classic FrACT
2020年04月05日 3.10.5 · Vernier: contrast now adjustable, higher max possible values, better shape parameterisation (for MBH & JR) · reward pictures also for Letter and Vernier acuity · no more "contrast screening" · masking now works again (thanks, DH) · corrected "VA Snellen Letters" to "VA Sloan Letters" thanks, KW) · [internal: ‘var’ → ‘const’ where possible]
2019年05月10日 3.10.2 · added "bonusEmoji" [Settings>reward pictures (top right). Recommended] · block-randomiser, now fully ISO/DIN compatible for oblique directions · added ETDRS to crowding, crowding choices also now work for Letters · stimulus sequence, all VAs: 0.1 / 0.2 / 0.4 now also 0.8, same ×ばつ2 for contrast ·added ceiling/floor detection for acuities: rangeOK, atFloor, atCeiling · added field for possible range limit in 1st results line · added "secondsPresentation" to results export · added cpd info to contrast grating results · added contrast info to acuity results · removed feedback info from results (no longer necessary) · added header line for full history in results · Vernier ceiling: 1000 → 3000 arcmin (request by MBH) · fixed occasional Øsaving in luminance linearisation (thanks, SPH) · partial fix of crashes in FrameCalCheck after any test (thanks, OKolbe)
2018年02月14日 3.9.9a · button Settings>Kg. → to ESU (Einschulungsuntersuchung) · now ignoring the modifiers: command, control, shift, tab · for ContrastLandolt choice of fixed pedestal luminance (for SPH) · Spezial Aalen: fester Visus (deactivated in standard edition) · fixed: in Contrast Grating, the #of choices was always 4 (thanks, SJAnderson) · CHANGE: inappropriate keys now interpreted as incorrect response · fixed regression in persistent history (3.9.8→3.9.9) · moved "Kindergarten" to a button in Settings, pertinent code → Prefs · added "FrACT3_lastTrialResult.sol" (for Leipzig collab.) · displayTransform: works with contrast-C, (2) & letter "S"
2016年10月27日 3.9.8 · trialInfoFontSize: default→9, kindergarten→24, · Quit/eXit via "Q" or "X" · more selections for spatial frequeny (on request by Zeiss) · more crowding options · Vernier: contrast can be inverted, added type (3-line etc.) & scale (for low vision) · added sounds for stimulus on/off · shape corrections for Sloan letters K and S (error in Pelli’s Sloan font) · rewrote the squarewave grating for less aliasing
2015年06月01日 3.9.3 · "z" entry could be interpreted incorrectly in Letter Acuity depending on locale (was a QWERTZ vs. QWERTY problem)
2015年04月24日 3.9.2 · more options for crowding · added logCS(Weber) to optotype contrast results · improved color picker behaviour (minor bugfix)
2015年01月28日 3.9.1 · corrected incomplete random assignment for letters · added one more option to crowding ( now first is better names as "flanking rings") · corrected missing result info on normal trial exit (a regression in 3.9)
2014年11月24日 3.9 · added optional incomplete runs (→modified format of export2clipboard) · VA tracking now works (no longer using Pest, thanks Ross!) · added kVersionPraeventiometer · added "Kindergarten" screening preset
2014年04月15日 3.8.2 · harmonised choices in "Which test on 5" · systematic treatment of exentric presentation across tests · maxVAdecimal now takes the thresholdtype setting into account (a little higher if not DIN)
2013年11月29日 3.8.1 · extended & generalised visual feedback situation · feedback optotype red with reduced contrast · sequence: first auditory, then the visual feedback · updated gamma value now stored without needing to click a button (thanks, Nia) · possible to have no result displayed at all (to avoid subject influencing) · tried to really hide mouse cursor (Flash player bug) · largest Landolt C little smaller, margin one full gap until screen edge (thanks, Mark)
2013年06月18日 3.8.0e · renamed "FrACT3_preferences_history.sol" to "FrACT3_preferences_trialHistory.sol", same for the class · changed type of "precision" in the rStrN* class to int · "whichTestOn5" now defaults to acuity in the internal case construct · removed the (by now) obsolete "T" option
2013年03月27日 3.8.0d · removed hi-res timestamp from results, increased displayed precision of results, added distance to results, units for Landolt-C contrast in Weber · added 1500 ms background mask (for Ralf Kredel) · default number of trials reduced to 18 (8 choices) and 24 (4 choices) based on recent study
2012年12月07日 3.8.0 · added grating acuity (useful only for low vision!) · display transform now also works with tumbling E and with Sloan letters (thanks to Paul Artes) · harmonized terminology across tests; · Vernier clipboard results now in arcsecs; ISO date form
2012年06月19日 3.7.4c · improved color bit stealing & added to GUI · added simplified bit-stealing (Tyler1997SpatVis) · introduced "dir2"-pref to switch between hor/ver which is, in principle, more versatile · increased the z-mode callback to 50 (for Liz) · added tracking mode for contrast · added testType to the persistent history · grating: added some Gaussian windowing and made patch-diameter a user-defined setting.
2011年10月27日 3.7.1b • added grating test as requested by Jens • added timestamps (milliseconds since 1970) to the full history • [3.7.m special version for Paik with long Verniers (40x longer)]
2011年04月29日 3.7l preview, work in progress • added display transformations: mirroring vertically and 180° • delt with blocked information storing (due to new Adobe settings) • new flash player module (10.2 with 3.7l) • added "Contrast screening" – calibration accessible via shift key, changed sequence logic, now respects the number of orientations (4/8) • corrected threshold for "red condition" acuity warning in Settings • added visual feedback (growing optotype) • rearranged value/label placement on the Settings screen, main screen buttons, response key graphics • removed display size from key settings (caused misunderstanding) • changed default contrast-dia 30→50 arcmin, max 300→999 • internal class rearranging (Landolt C→Optotypes) • various minor improvements • added face files
2010年09月01日 3.6.3 • corrected Michelson→Weber contrast calculation: the previous Weber value had been c·W%-times too high (e.g. 1.01% instead of 1.0%, 11% instead of 10%, etc.). Thanks to Prof. von Handorff and his students for spotting this. • This is the last version that runs on Mac OS/PowerPC.
2010年07月29日 3.6.2 • added tumbling E • added optional online trial info • added persistent history (copied to clipboard with "z") • modernized writing to the clipboard • centered parameter-input in the Settings frame • solved problem of not being able to enter "5" into the subjectID field
2010年03月21日 3.6beta • Quit button now labelled "Exit" in Windows • added TCP/IP based results transmission • deleted the flawed and effectless manipulation of presented direction depending on response correctness • added face recognition paradigm (experimental) • improved Alert class from <fatal-exception.co.uk/blog/> • for FrACT letters the history is now correctly exported, with the letters. Checked Landolt C and Sloan C size, they are identical, as should be.
2009年11月11日 3.5.5 Quite a number of tiny improvements: • added screen dimension to main screen info • added "force Snellen denominator to 20 ft" on request • added option for colour Landolt Cs on request • set uncalibrated values bold & red in the Settings screen to make them more obvious • set focus to stage (now it responds to keyboard shortcuts after returning from Settings etc.) • now possible to start with numkey-5 irrespective of numlock setting
2009年09月16日 3.5.4 made the calibration bar blue; increased PEST-grain from 500 to 5000; added contrast with Weber definition; improved manual
2009年08月20日 3.5.3 • fixed background glitch, a regression from the new contrast polarity setting • rearranged the setup a little around the calibration bar
2009年07月19日 3.5.2 • added option to set contrast polarity • fixed silly error (fixation target in contrast testing staying on) introduced recently • added option not to go full screen (this can help with multiple screen setups)
2009年05月27日 3.5 • fixed errors in the calibration check GUI resulting from the new mask code • renamed "Preferences" into "Setup", put key settings on main screen [all thanks to Daphne McCulloch’s thoughtful suggestions]
2009年04月21日 3.4.3 • Improved coding around the sound channels (fixed the ‘hang’), cleaned up the Pest code (no performance change, just more elegant :) ) • Added detection of sound capabilities and disabled sound settings when appropriate (does not seem to work correctly) • added a blank (or grey for contrast) mask after the response key. Option in Prefs. Currently fixed at 200 ms. • Keypad now works without numlock • Maximal distance increased (9999 cm instead of 999 cm), • Vernier size now scales with distance (as it should have): 0.5° total height, 0.5 arcmins bar sigma, 0.2 arcmins gap height • separate timeouts for showing the optotype (down to 0.1 s) and for responding to it • and further trivia
2008年12月08日 3.3 timeout > 30 seconds now possible (current maximum: 999 s); improved Flash version display; corrected a missing help button
2008年11月16日 3.2 ported to Flash CS4, added calibration alert
2008年09月10日 3.1.3 fixed a capitalisation issue in a sound resource now ignoring letter capitalisation in shortcuts
2008年09月10日 3.1.2 added optional Sloan letters . Range-checked timeout-value (reported by Frank Schmidtborn, more fields need to be checked)
2008年06月20日 3.1 All numerical preferences now range-checked corrected the logic in the response key evaluation (didn’t stop after first match). Added acuity based on Sloan letters. Rewrote response code to use key-value pairs.
2008年05月30日 3.0.4 "auditory feedback when done" now preserved, made sound resources more generic, improved internal debugging
2008年05月06日 3.0.3 Corrected time-out (error diagnosed by Frank Schmidtborn), added a positional jitter to vernier test (as suggested by Wolf Harmening)
2008年04月26日 3.0.2 Complete re-write of FrACT, now called FrACT3. Reason for re-write was that I wanted to improve the contrast dithering. This entailed updating to the (totally underwhelming) Adobe’s Flash CS3 development system. This required changes in nearly every line of code. A major chore, which markedly improved the program internally, while not showing the changes externally. There is also a new icon, thanks to Inga. A comparison in 54 eyes found that acuity results differed between FrACT2 and FrACT3 by ≈0.01 LogMAR, thus below noise limit. Contrast testing is improved, the vernier test is being evaluated.
2007年12月24日 2.3 fixed a bug of incorrectly formatted Snellen fractions under certain rare conditions
2007年11月19日 2.2 re-enabled the "bonus trial" option for the contrast & Vernier test, improved FrACT documentation
2007年10月30日 2.1 improved contrast dither for oblique orientations. Thanks to Hendrik Jungnickel at the Ammersee meeting!
2007年07月25日 2.0.5 • added 2 new sounds: (1) run done, and (2) incorrect response. Now I prefer the purely auditory feedback to the visual one. Give it a try! • switch to Flash CS 3 with only few nasty side effects • internal changes to the PEST procedure: code "beautification" without changes in the basic logic
2007年06月02日 2.0.3 • added a "which test on pressing ‘5’" option, changed contrast-Ø default to 30’ • finally found how to abort using <esc>
2007年05月23日 202a • There was a problem with the final contrast value in the "export to clipboard" record (thanks to Hendrik Jungnickel!) • Added sanity check for acuity formats. If all are switched off, decimal is switched on
2007年04月11日 2.0 Contrast now employs dithering to achieve normal thresholds (currently using a ×ばつ2 dithermatrix, increasing luminance resolution by a factor of 4). Added target cross for Contrast. Gamma adjustment via cursor keys, reference lines now use 0.5±0.3 luminance, thus avoiding the extremes, better for LCDs.
2007年01月06日 1.10 negative optotype contrast now works again (had been lost when making the program more robust with respect to non-sensible preference values, probably back around version 1.2)
2006年11月30日 1.9 the smallest gap size had been reduced to 0.5 pixel. Tests now showed that this does not result in reliable optotype quality, and has been reset to 1.0
2006年11月15日 1.8a • Extended warning when the highest possible VA is below 2.0 • Vernier result now honors the preferred decimal point character • Rewrite of the contrast routines (help from Hendrik Jungnickel gratefully acknowledged): Correct setting of contrast and readback honoring gamma correction, back luminance clamped to 50%; "results2clipboard" now works with contrast; • contrast now also allows a position shift, added by request
2006年10月01日 1.6a • fixed decimal point internationalization, fixed tab sequence in Preferences • "Bonus trials" now have the setting {never | every 6th trial | always}, added by request. This allows to create a separate easy training version.
2006年08月09日 1.5a • added Vernier measurement (first attempt, feedback welcome) • fixed error that had based the 4afc psychometric function on the 8afc guessing rate • increased the default trial setting (now at 24 for 8 alternatives) The documentation does not yet reflect the Vernier addition – but it’s rather obvious to operate, methinks.
2006年04月28日 1.3 • allowed multiple combination of result formats (decimal, LogMAR, Snellen fractions), • choose better ranges for rounding of decimal VA, • switched off the distance information in the result string (anyone needs this?)
2005年11月22日 1.1.3 added "frame" (square + circular) to crowding options
2005年11月21日 1.1.2 in "results2clipboard" trial number starts with 1, not 0; added "maxAcuity" in Prefs, framePrefs & Acuity
2005年10月25日 1.1 added crowding flankers (on request of Bruce Evans)
2005年10月10日 1.0.9 switched to Flash 8, some slight changes in the preferences dialog (now a combobox for decimal point)
2005年08月06日 1.0.8 • added "results2clipboard" (see Help>More Help for format) • added internationalization of numerical output (the decimal point) • unfinished contrast test now defaults to off
2005年04月22日 1.0.6 • added a "mirroring" option (requested by Laura Gibson & Ken Nakayama • added luminance linearization calibration
2004年10月07日 1.0.5 added facility to change eccentricity, made feedback-expansion a bit slower
2004年05月28日 1.0.1 fixed a size error introduced in vs 1.0 (due to work on the contrast test some acuity routines were affected)
2004年02月11日 1.0 re-implemented old direction strategy: When wrong, then reduce likelihood to present at the responded direction
2004年01月08日 added contrast setting for the acuity optotype (suggestion by Lea Hyvärinen)
At this time (2025-11), I am not aware of any bugs in classic FrACT. Please tell me should you find problems.
Resolved
2020年03月06日 Bug: When the optotype contrast is reduced, the Vernier rendering is wrong, because the Vernier doesn’t take contrast into account, but the background does. ←Solved in 3.10.5
2019-05 Enhancement: Indicate in the results whether a ceiling/floor effect occurred. ←Added in 3.10.2