Keyboard AI is a Python CLI that learns character patterns from a text corpus and searches for keyboard layouts with lower ergonomic cost. It explores how corpus statistics and a scoring model can drive layout search, so the layouts it finds depend on the corpus you give it.
What It Demonstrates
- Corpus ingestion from files, stdin, or a bundled sample text.
- Unigram, bigram, and trigram statistics for layout scoring.
- Evolutionary search with configurable generation count, population size, elite count, mutation strength, and random seed.
- Ergonomic scoring for key effort, same-finger movement, row jumps, hand alternation, rolls, and redirects.
- Saved model JSON output plus export helpers for Karabiner and QMK-style configs.
- Regression tests for corpus statistics, optimization behavior, saved-model round trips, and CLI flows.
The Core Idea
The project treats keyboard layout design as a search problem. Each candidate layout is scored against a corpus, then the optimizer keeps stronger candidates and mutates/crosses them over to search nearby layouts.
def train_layout(corpus, initial_layout, optimizer):
population = optimizer.initialize(initial_layout)
for _ in range(optimizer.generations):
scored = optimizer.score(population, corpus)
elites = optimizer.select_elites(scored)
population = optimizer.recombine_and_mutate(elites)
return optimizer.best_layoutCLI Usage
Train from a text file:
keyboard-ai train --corpus my_writing.txt --output model.jsonTrain from pasted text:
keyboard-ai train --stdinScore an existing layout:
keyboard-ai score --layout qwertyuiopasdfghjklzxcvbnm --corpus my_writing.txtGetting Started
git clone https://github.com/yuazi/keyboard-AI
cd keyboard-AI
pip install -e .
python3 -m unittest discover -s tests -v