A profile is plain-data TOML — no source reading required to write one. Shipped in humaninput/profiles/: touch_typist, hunt_and_peck, fast_coder, mobile_thumbs, tired.
humaninputprofiles# list available profiles/layouts
humaninputfitrecorded.csv-omy_profile.toml# calibrate against real typing (csv: timestamp_ms,key,action)
Every field below has a default, so a profile only needs to override what it cares about. "Validated" means humaninput.profile._validate raises ValueError on load if the constraint is violated; "not validated" fields are trusted as-is — get them wrong and you'll see it in the output, not in a load-time error.
Multipliers on interval.mu_ms, keyed by transition class (see The model → Digraph classification). None are validated; all are relative to same_hand_different_finger = 1.0.
30 WPM, high variance, long pauses on digits/symbols, minimal rollover
fast_coder
100 WPM on alphanumerics, disproportionately slow on symbols/brackets, high correction rate
mobile_thumbs
high variance, high adjacent-key substitution rate, word-level autocorrect-style corrections, tuned [mouse]/[touch] sections for a small touchscreen
tired
touch_typist with fatigue drift and elevated error rate
Unknown keys in any section raise ValueError at load time (_build_section checks against the dataclass's known field names) — a typo in a profile TOML fails loudly instead of being silently ignored.