
JooYoung Seo
School of Information Sciences, University of Illinois Urbana-Champaign
AccessComputing Partner Meeting, October 23, 2026
What good is a chart you can’t see?
How do you read a chart you can’t see?
A Picture’s Worth…?
Sighted person to create a chart and then add a separate description as an afterthought
One group produces boundaries while the other group just consumes
One-way street: power imbalance

Data Insight for All.
Multimodal Access and Interactive Data Representation
Decoupling vision-first approach from data interpretation
Encode data representation in multiple modalities
Not a separate, watered-down version for blind users
one unified experience: the same information with preferred modalities
On top of visualization:
Touchable (Braille) 🖐️
Readable (Text) 📖
Audible (Sonification) 🎶
Conversable (AI) 💬
Data shape and trend pattern in Unicode Braille symbols
Users can run their fingers across the data to feel its peaks and valleys
With a refreshable braille display, or as a tactile graph on a Dot Pad or a Monarch

Sonification turns data into audible tones
x-axis value: stereo panning position
y-axis value: pitch
As a trend goes up, a musical pitch rises with it


A straightforward text of the plot’s key features
Get a clean, simple summary of what the plot is showing
Powered by AI/LLMs (GPT, Gemini, Claude)
Ask questions and get co-insight of the plot
Natural language data analysis
Example Query Can you summarize the main trend for me?
Python: import maidr with Matplotlib, Seaborn, Plotly, or Altair
R: library(maidr) with ggplot2 or base R graphics
AI assistants: the maidr skill for Claude and ChatGPT
Each one hands your plot and its data to the same engine, maidr.js
| Key | Function |
|---|---|
Arrow Keys |
Move around the plot |
B |
Toggle Braille Mode |
T |
Toggle Text Mode |
S |
Toggle Sonification Mode |
D |
Open Plot Description |
Page Up / Page Down |
Switch Layers |
? |
Open Chat AI Mode |
# Minimal Shiny-for-Python app structure with MAIDR-ready plots
from shiny import App, ui
# UI with tabs mirroring slides
app_ui = ui.page_fluid( # implement ui.navset_tab with tabs mirroring slides
)
@output
@render_maidr #<<
def create_histogram_output():
ax = ... # build matplotlib/seaborn axes
return ax
app = App(app_ui, server)Source: xability/a11y_dashboard
AI assistants hand you plots as pictures: nothing to hear, touch, or explore
The maidr skill teaches them to make every plot multimodal
It picks Python, R, or JavaScript for you, and checks its own work
For Claude and ChatGPT, and for Codex, Cursor, GitHub Copilot, and Gemini CLI
Claude Code: /plugin marketplace add xability/maidr-skill then /plugin install maidr@maidr-skill
ChatGPT.com: Download the ready-made ZIP, then Plugins → Skills → Add → Upload
Claude.ai: upload the same ZIP in Customize → Skills → Add and turn it on
Any coding agent: npx skills add xability/maidr-skill
Claude.ai · Open the original demo (presenter login)
ChatGPT · Shared chat history · Open chart (no login)
119,000+ downloads across CRAN, PyPI, and npm
Python: Matplotlib, Seaborn, Plotly, Altair
R: ggplot2, base R graphics
JavaScript: D3, Plotly.js, Vega-Lite, Observable Plot, Chart.js, Highcharts, ECharts, Google Charts, amCharts, AnyChart, ApexCharts, Frappe Charts, uPlot, TradingView Lightweight Charts, React, Recharts, Victory, Nivo, MUI X Charts
BI and Office: Tableau, Power BI, Excel, PowerPoint, Word
Where you work: terminal, Jupyter Notebook, Google Colab, Quarto, Shiny, Streamlit, web pages
AI assistants: agent skill and MCP server, for Claude and ChatGPT
Pick your way in:
Start here: maidr.ai
Python: py.maidr.ai
R: r.maidr.ai
AI skill: github.com/xability/maidr-skill
Source Code: github.com/xability
We’ve been having a monologue with data 👁️
Time to start a dialogue 👁️👂🖐️💬
Your hidden collaborators are waiting
Don’t lose the opportunity to innovate together
JooYoung Seo