Free NohBoard v1.3.0

I know certain applications already exist that do just this, display your keyboard on-screen. And even more probably. However, so far I have found none that were both free and easy to use. That's where this program came in, I made it to be free and easy to use, without any fancy graphics, and easily capturable (possibly with chroma key). Furthermore, it's very customizable.

Rewrite version: v1.0.0
Download from:

Current version:
Download from:
GitHub repository:

Note: when updating to v0.5b or higher from a lower version, it is best to remove all .kb files first (except perhaps for any home-made ones, they will need to have KBVersion updated to 3, and be adapted to the new format (see Keyboard file history for more info)).

Use: download and unpack, run NohBoard.exe.

By right clicking anywhere on the main window, you get the ability to open a settings dialog. In this settings dialog, the colors for the keyboard can be changed.

Furthermore, you can select which keyboard layout file should be used. So far, I have modeled the us international keyboard and some variations of it. One extra layout is made, called game_keys1.kb. This layout contains only the most basic keys used for gaming, this by itself might lack some keys, but it serves as an example of all the different things that are possible by making custom keyboard layouts.

Note that changing keyboard layouts requires a restart of the program.

Capturing NohBoard is best done with Window Capture.
Game Capture works too. However, there is a strange artifact where OBS will incorrectly detect the borders, they will be a lot larger than the actual image. It works normally for the rest, resizing and cropping works as if you were changing it from the edge of the image. Because of this, Window Capture is the preferred method.

As of version 0.9 of OBS-Studio, filters will be supported on all sources. Also, Game Capture does not have the weird artifact that the original OBS has with Game Capture on NohBoard. Therefore, the recommended way for OBS-Studio to capture NohBoard is using Game Capture. You can then add a Color Key filter to filter out the background if desired. The added benefit of Game Capture is that it does not have the bug where it will not show up in window capture when a full-screen game is started in some cases.

Note that enabling the scroll counter has to be done in the settings file for now. I might add a ui for this later. The following lines need to be edited:

scrollCounter 1 <- This enables the counter
scrollHold 1000 <- Holding a bit longer is sensible for the counter so it doesnt instantly reset.

Known bugs
  • Nohboard might not be capturable in all cases. Some fullscreen games either prevent NohBoard from updating, or prevent OBS from capturing more frames on NohBoard (this is what I'm suspecting). I have so far been unable to fix this.

Keyboard layout file

Feel free to create (and submit) more layout files if you feel like making some. Below is an explanation of how the keyboard layout file works:
General information
The first four lines define some general information about the keyboard file, each line is explained below:
  • KBVersion - if NohBoard ever requires a different format, this number will be incremented, shows compatibilty information
  • width - specifies the width of the main window in pixels
  • height - specifies the height of the main window in pixels
  • nKeysDefined - specifies the number of keys that are defined in the rest of the file
  • category - specifies the the category the keyboard file should be filed under in the settings dialog

Key definitions
Then, for every key one line is added defining where to put it and what text it should have, the syntax is as follows:
key keyCode x y width height NormalText ShiftText ChangeOnCaps SmallFont

These parameters all mean:
  • key - Simply the word key
  • keyCode - The keycode of the key (you can look them up in the existing layout files)
  • x - The horizontal location (from left) in pixels
  • y - The vertical location (from the top) in pixels
  • width - The width of the key in pixels
  • height - The height of the key in pixels
  • NormalText - The text that should be displayed when Shift or Caps Lock is not pressed
  • ShiftText - The text that should be displayed when Shift (or Caps Lock) is pressed (may be the same)
  • ChangeOnCaps - 1 if the ShiftText should be shown when Caps Lock is enabled, 0 otherwise (numbers have this disabled, letters have this enabled)
  • SmallFont - 1 if the text on the button should be drawn in a smaller font, 0 otherwise (generally, buttons with 1 character have this disabled, buttons with more characters have it enabled)

One exception is the key 1028. This key is used to display a circle showing the mouse speed. It has the following parameters:
key x y size

Note that if this key is defined at the end of the file, this is enough. If not, all keys defined after it will get messed up and loading will fail, so then the following layout is recommended, just padding all required parameters with 0s:
key 1028 x y size 0 0 0 0 0

And here is the game_keys1.kb file as an example, showing how these lines are adapted
KBVersion 2
width 409
height 233
nKeysDefined 12
category Games
key 37 221 53 43 43 %left% %left% 0 1
key 38 265 9 43 43 %up% %up% 0 1
key 39 309 53 43 43 %right% %right% 0 1
key 40 265 53 43 43 %down% %down% 0 1
key 65 9 53 43 43 a A 1 0
key 68 97 53 43 43 d D 1 0
key 83 53 53 43 43 s S 1 0
key 87 41 9 43 43 w W 1 0
key 160 9 107 100 43 %shift% %shift% 0 0
key 162 9 151 65 43 Ctrl Ctrl 0 1
key 164 75 151 56 43 Alt Alt 0 1
key 32 132 151 262 43 %0% %0% 0

Special characters
For now, unicode files cannot be read. Therefore, some compatibility workaround has been added for making special characters.
They can be made by placing combinations of characters between %% signs.
For example, %'e% makes è, %e'% makes é, similarly for all vowels. If you need any of these, you can try if you can find the code for it. I might update this later with a full list. If you can't find it, or it doesn't exist, feel free to ask me to add it.

Two important ones are:
A space (" ") is %20%
An empty string (for on the space key for example) is %0%

Some more examples:
%ae%, %oe%, %^e%, %~e%, %,c%, etc...

Special keycodes
There are some keycodes defined that do not directly map to keyboard keycodes, these are all above 1024, and are defined in the list below:

  • 1025 - Numpad Enter key
  • 1026 - Left mouse button
  • 1027 - Right mouse button
  • 1028 - Mouse speed widget
  • 1029 - Scroll up
  • 1030 - Scroll down
  • 1031 - Scroll right
  • 1032 - Scroll left
  • 1033 - Middle mouse button
  • 1034 - First mouse X-button
  • 1035 - Second mouse X-button
If you want any keyboard layout file to be made for you, please submit a picture of it as an example, and I will try and create it for you.

Keyboard file history
Below follows some information about adapting your custom keyboards to newer formats.
1 (NohBoard v0.1b)
Initial version

2 (NohBoard v0.4b)
No changes to the contents, version number was increased due to a drastic renaming of the keyboard filesnames.

3 (NohBoard v0.5b)
category property added to the headers, add this to specify under which category the layout file should be filed.

SmallFont property added to keys, add a 0 or a 1 behind every key definition in keyboard files < KBVersion 3.
Where 1 indicates the text for this button should be drawn in a small font, 0 indicates the normal, bigger font should be used.

Version history:
v 0.17b
- Added button outlines (Michal Mitter).
- Added a new keyboard file us_intl_surfandhop.kb by Kristopher Henry Kram.

v 0.16b
- Added a mouse sensitivity option.
- Added a new keyboard file game_fps1_mm.kb.

v 0.15b
- Added separate colors for the mouse speed indicator.
- Added a gradient between the two colors for the mouse speed indicator.
- Fixed a small graphical glitch with the mouse speed indicator.

v 0.14b
- Added a scroll counter (YaLTeR).

v 0.13b
- Added support for X mouse keys (side keys), middle mouse key, scroll wheel (both vertical and horizontal).
- Altered mouseAll.kb to demonstrate all new buttons.
- Added two extra .kb files with FPS layouts incorporating the vertical scroll and middle button.

v 0.12b
- Two extra .kb files with mouse movement tracking.
- Added the option to trap the keyboard and/or mouse input.

v 0.11b
- Added mouse speed tracker
- Two extra game .kb file for The Binding of Isaac and DOTA.
- Two .kb files to showcase mouse movement tracking.

v 0.10b
- Fix cleanup always removing special keys and mouse buttons.
- One extra .kb file with wsad and mouse buttons.

v 0.9b
- Changed pressed key storage from llist to std::vector.
- Added experimental pressed key cleanup code.
- Changed se*.kb to scandi*.kb.
- Added numpad/arrow keys layouts.

v 0.8b
- Added Swedish keyboard layouts.
- Fixed a crash caused by removing items from an empty linked list.

v 0.7b
- Fixed showing only one keypress at a time.
- Fixed actually performing unhooking code when closing.

v 0.6b
- Fixed kb file version check when entering settings dialog to not crash.
- Improved message loop reaction speed.
- Reduced critical section time for render thread.
- Fixed a mouse hook bug.
- Made mouse hook optional.
- Disabled mouse hook when no mouse keys defined in the .kb file.

v 0.5b
- Added a separate font color for pressed buttons.
- Added support for a large and small font, font size switch per button => push KBVersion to 3.
- Category added to KBFile, allowing grouping in settings window => push KBVersion to 3.
- Bug fixed where unallocated memory was used to store and check pressed keys, now uses a linked list.
- Extra controls for font name, size and width added to the settings window.
- Fixed a memory leak due to not cleaning up fonts in Direct3d.
- Added mouse click detection.
- game_keys1.kb updated to showcase mouse buttons.
- Fixed a race condition? Due to mouse click detection.
- Make bright color texts readable in settings by changing to a dark background.

v 0.4b
- AZERTY layouts added, as well as some user contributed special layouts.
- Extra character conversions, required for AZERTY added.
- Keyboard layouts names changed somewhat, layout files now have version 2. It is recommended to delete the old .kb files before updating to this version.
- Display during full screen games fixed. Sadly, at the cost of Windows XP compatibility.

v 0.3b
- German keyboard layouts added.
- Extra character conversions, required for german layout added.
- Lots of extra configuration options in the config file - still need to be added to the settings menu.
- Multiple key definitions for the same keycode possible (allows for custom shaped keys, most notably the Return key).

v 0.2b
- Fixed a memory leak.
- Hopefully fixed NohBoard process staying active after closing.

v 0.1b
- First version.
Expect more changes in the future, feature requests and bug reports are welcome!

Other tools
Believe it or not, but people are writing tools for NohBoard, below is a listing of tools I know of and have tested:

- NohboardHelper: Allows you to create keyboard layouts using a graphical interface:
  • NohBoard-ReWrite-v1.0.0.png
    65.9 KB · Views: 52,593
First release
Last update
4.06 star(s) 16 ratings

More resources from ThoNohT

Latest updates

  1. The Corona update

    Bugs: - Fixed outline width always being reset to 1. - Fix mouse speed indicator style changes...
  2. Quake keyboard and background fix

    v1.2.2 Fix background color not updating. Add quake keyboards by flyingmongoose.
  3. More editing enhancements

    1.2.1 Features: New icon. (joao7yt) Added a dialog for easier rectangle boundary creation for...

Latest reviews

I like this app but I know of better ones but it is quite acceptable although it is a program it makes no sense to be a program it is better to be an obs plugin although it is
When I use window capture to display NohBoard in OBS, two extra instances of it are displayed in the scene in addition to the source itself which I can move around. I can attach a screenshot if necessary.

Also, it's frustrating that when I add a new element to a default keyboard, the new key's size is always slightly smaller than the keys the default layout starts with. I tried editing the size of the new keys by going to Keyboard Properties then adjusting the size but I'm pretty sure that's just for the entire keyboard, not individual keys.

And why isn't there an option to move the elements on a grid instead of having to eyeball their alignment with one another every time?
Dual PC Stream Review. Would love to see the ability to remove the Title Bar as well as make the background transparent. Since I use 1 PC for Gaming and another for Streaming I can't use chroma key filters to bypass this. Other than those 2 options wanted, the Tool works as intended and I've started to make my own layouts for specific games. Mainly using this to test Input Drop/Lag/Queue within games. Those moments you know you clicked but the game said no...goodbye. Thanks for this Tool.
Very cool app! I first downloaded a very outdated version by mistake, couldn't change the Keyboard layout, wrote an issue on Github, and within 24 hours, I got an answer and everything works fine now!
Easy to set up and a simple, sleek design. However, running OBS as admin will stop NohBoard from working as it won't register my key presses or mouse clicks - the only way to solve this is not running OBS as admin. Other than that, it's a great app to use.
The design is very nice, and I like how easy it is to set up.
Everything is perfect, but it's just that it doesn't work on my favorite game, Global server Maplestory (GMS)... It's just sad and I don't know what the problem is. I also checked if it shows on my monitor through my twitch streaming. Keys pressed changes when I'm on other browsers or a game like League of Legend, but no on Maplestory.
It has a great way now to edit it and I have been doing for myself some keyboards heheh,

but I have a question:
How can I edit a higher refresh rate? Sometimes when I press a button, its not release at once. So games like StepMania looks like I'm not pressing those buttons :)
<3 for everything else is just AWESOME.
Is not user friendly and will require some trial and error to get a great layout customized and tailored for yourself. There are several pre-made layouts as well as user-posted layouts however.

A great resource for any streamer looking to display key or mouse button presses.
It works fine in obs and if you tamper with colours you can get a sleek personalized transparent board but yeah.
Trying to theorycraft how this would work if you broadcast from an other computer than you game with. So either Nohboard would have to be open on my gaming rig sharing the data collected via a link that I put into the same program on my broadcasting computer and then i screencapture the feed of the correct keyboard. Or, i use a second screen (TV in my case) then hook the broadcasting computer up to that tv and it would collect what is happening on that screen, would guess i need a second catpure card for that, so a bad option. Am i on to something here? bit confusing! but interesting
So tested and used on windows 10

the conclusion is this is some seriously fine software

You can customize just about everything. don't like which keys are showing? no problem. don't like where they are at? no problem. color, border, width, height, what it smells like, all customizable.

i haven't tried to to change this yet, but the only thing i might not be able to customize is replacing the mouse button "LMB" with an icon instead. but in the end i can live with that considering the endless range of possibilities

in my video using OBS studio as far as i can tell there is no lag, but i am using a medium-high range gaming desktop.

i look forward to his upcoming C# version, however long it may be