A screen reader accessibility mod for the horror game No, I'm not a Human (Trioskaz).
The game is a narrative, visually-driven experience with no built-in screen reader support. This mod speaks the game's text — dialogue, menus, prompts, inspection signs, and a status readout — directly to your screen reader, and makes the mouse-and-look interactions (menus, the room photo, the fridge, the radio dial, the phone) navigable from the keyboard.
Blind and low-vision players can play with NVDA, JAWS, or Windows Narrator running. With no screen reader running, speech falls back to Windows SAPI.
- No, I'm not a Human (Steam, Windows 64-bit)
- MelonLoader v0.7+ installed into the game
- A screen reader (NVDA, JAWS, or Narrator) — optional; without one, speech uses Windows SAPI
- Install MelonLoader into the game (run its installer and point it at
NoImNotAHuman.exe). One-time step; not bundled here. - Download the latest release zip from the Releases page.
- Extract the zip into your game folder (
...\steamapps\common\No, I'm not a Human\), keeping the folder structure. This places:Mods\NoImNotAHumanAccess.dllandMods\UnityAccessibilityLib.dllUniversalSpeech.dll,nvdaControllerClient.dll,ZDSRAPI.dllin the game root (next toNoImNotAHuman.exe)
- Launch the game. You should hear "I'm a Blind Human accessibility mod loaded."
The native speech DLLs must sit in the game root next to the exe. UniversalSpeech loads
nvdaControllerClient.dllfrom there for NVDA. If they're missing or misplaced, speech silently falls back to SAPI — or goes silent.
| Key | Action |
|---|---|
| Arrow keys / Enter | Navigate menus, the room photo, fridge, radio dial, and phone pad |
` (backtick) |
Repeat the last spoken line |
| F7 | Read the controls available in the current context ("what can I do here") |
| F8 | Repeat / diagnostic trigger (also used for bug reports) |
| F9 | Status readout — day/phase/energy/items and any corpses present; in a conversation, the last inspection result; on the phone, your known numbers |
The mod claims the arrow keys and Enter only in the four contexts where the game itself doesn't use them (room photo, fridge, radio, and 3D scene stepping) — never in the main menu, the pause menu, or dialogue, where the game's own navigation owns those keys.
- NVDA — works out of the box; arrow keys pass through to the game.
- Narrator / SAPI — works.
- JAWS — speech works via FSAPI. JAWS swallows arrow keys, so menu navigation under JAWS needs the separate pass-through script (see
jaws/). If arrows don't navigate for you, please file an issue.
The game runs on Unity 6.3 with the IL2CPP scripting backend. The mod is a MelonLoader mod (MelonLoader injects it into the IL2CPP process). Speech is emitted through UnityAccessibilityLib / UniversalSpeech, which talks to NVDA/JAWS/SAPI directly rather than through Unity's slower UIA notification channel.
Text is captured by hooking the game's own systems with Harmony:
- Dialogue is a Yarn Spinner pipeline with a central subtitle sink; a hook there speaks each rendered line, expanding localization placeholders and reading the resolved localized string so speech follows the game's language setting.
- Menus are narrated by tracking uGUI focus and speaking the focused control's label and state.
- World interactions (room photo, fridge, radio, phone, inspection signs, corpses, HUD/status) each have a dedicated narrator that reads the relevant localized game strings.
Mod-authored strings pass through a small localization table; the game's own content is passed through verbatim in whatever language the game is set to.
Requires the .NET 6 SDK and a MelonLoader-patched copy of the game (running the game once after installing MelonLoader generates the IL2CPP interop assemblies the build references).
dotnet build -c ReleaseBy default the build references the game at D:\SteamLibrary\steamapps\Common\No, I'm not a Human and, if a Mods folder is present there, deploys the built DLL straight into the game so changes can be tested immediately. Override the game location if your install differs:
dotnet build -c Release -p:GameDir="C:\Path\To\No, I'm not a Human"The native UniversalSpeech x64 DLLs are not on NuGet; place them in libs\ (from http://vrac.quentinc.net/UniversalSpeech.zip, bin/64/) so the deploy target can ship them into the game root. See NoImNotAHumanAccess.csproj for the full reference and deploy setup.
| Path | Contents |
|---|---|
src/ |
Mod source — the only code that is compiled |
src/Dialogue/ |
Yarn Spinner subtitle/dialogue hooks |
src/Menus/ |
Menu focus tracking and control narration |
src/World/ |
World interaction narrators (photo, fridge, radio, phone, signs, corpses, status, HUD) |
src/Speech/ |
Speech output abstraction over UniversalSpeech |
src/Interop/ |
IL2CPP raw-interop helpers |
docs/ |
Research notes, feasibility findings, and the accessibility roadmap |
release/ |
Packaging script and staged release zips |
The mod and UnityAccessibilityLib are separate works. UniversalSpeech and its client DLLs are redistributed under their own licenses (included in release zips under licenses\).