Accessible Slides
Check slides, posters and figures for readers with vision loss: colour blindness, low contrast, and text too small to read from the back of the room.
Procedure
- Get the room. Ask if it is not stated. Default: 2 m screen, back row at 15 m. Screen share or webinar: treat as a monitor at reading distance.
- Get the colours and the font sizes.
.pptxuse python-pptx | HTML read the CSS | PDF or image render to PNG. - Run
scripts/audit.pyfor the numbers. Never judge contrast by eye. - Run
scripts/simulate_cvd.pyon one rendered slide and look at the output. - Report the worst failure first, each with its fix.
Building new slides: apply the rules as you go. Do not build first and audit after; the fixes turn structural.
Rules
1. Colour is never the only signal. Every distinction must survive greyscale. Lines get dash patterns and labels at the end; fills get hatching or a lightness step; status gets a word or an icon. Default palette is Okabe-Ito.
2. Contrast targets.
| Where | Body text | Large text |
|---|---|---|
| Projector, lit room | 7:1 | 4.5:1 |
| Projector, dark room | 4.5:1 | 3:1 |
| Screen share | 4.5:1 | 3:1 |
A projector is not a monitor: room light washes out the blacks, so what the audience gets is always worse than what you authored. Never put body text straight onto a photo.
3. Text size comes from the room, not from taste. Target 16-20 arcmin of
x-height at the back row. audit.py --room turns that into a font size.
4. Colour pairs must survive simulation. Two colours that mean different things need dE2000 of 15 or more under both protanopia and deuteranopia.
Report format
Slide 4 FAIL contrast 2.8:1 #8a8a8a on #ffffff, body text
fix: #595959 (7.0:1)
Slide 7 FAIL CVD #d62728 vs #2ca02c -> dE2000 5.0 under deuteranopia
fix: #d55e00 / #0072b2, plus dashed vs solid
Slide 9 WARN text size 22 pt = 12 arcmin at 15 m; need 34 pt
Close with the single highest-impact change, not a list of twelve.
Load these only when needed
| File | Read it when |
|---|---|
references/palettes.md |
picking or replacing colours |
references/fixes.md |
writing the fix for a specific failure |
references/checks.md |
you need a threshold's source or the size formula |
references/vision-loss.md |
explaining why something fails |
Scripts
scripts/audit.pycontrast, colour separability, text size. Standard library only.scripts/simulate_cvd.pysimulate an image, build a comparison sheet. Needs numpy and Pillow.