Giter VIP home page Giter VIP logo

keyspersecond's Introduction

KeysPerSecond

KeysPerSecond is a program that counts how many times certain keys and mouse buttons are pressed. It can also show various statistics such as the average, maximum and current number of pressed per second. The program can also show a graph of the key presses over time. Almost all aspects of the program are also fully customisable.

Jump directly to downloads

Introduction

Originally I wanted to know how many keys I pressed per second in osu! and I had already seen programs like this on live streams. However, I could not find a program that worked well on my computer so I decided to write one myself.

The program when active looks like this (the rightmost graph shows cursor movement):
Interface Preview Preview
There is also a right click menu to configure all the settings:
Menu

For each configured key the program will show how many times it was pressed. By default it will also show the maximum, average and current number of keys pressed per second. When enabled it can also show a graph of the number of keys pressed per second over time, the total number of keys pressed, and the time since the last input. A graph showing cursor movement is also available and more graph types and panel types are planned.

Everything shown in the pictures above can be toggled on or off and all the panels can be rearranged freely.
Config

There are also some commands that can be sent to the program, however some of them are unbound by default and you may want to rebind the others if you already frequently use the key combinations. The commands enabled by default are:

  • Ctrl + U: Terminates the program.
  • Ctrl + Y: Shows the GUI or hides it to the system tray.
  • Ctrl + T: Pauses or resumes the input tracking and panel updates.

You can also move the program using the arrow keys or snap it to the edges of your screen.

I hope some of you find this program useful and/or will use it for your streams (I would love to see that happen :) ). And if you find any bugs feel free to report them. If you have any features you'd like to see added please tell me as well!

Notes

  • The horizontal line in the graph represents the average number of keys pressed per second.
  • The smoothness of the cursor graph is heavily dependent on the update rate.
  • You can add any number of keys or mouse buttons to the program.
  • To change a GUI colour in the colours menu, click on the current colour
  • You can move the window with the arrow keys at 3 different speeds 1, 2 & 3 pixels at a time (2=Ctrl, 3=Shift).
  • You can configure a configuration to open automatically on launch, see this wiki page for more details.
  • When resetting something it will also be printed to the console if this program is running using cmd/shell.
  • The overlay option is far from perfect, it just asks the OS to place the program on top. It'll not overlay most full screen games. For some people running the program in Windows 98 / ME compatibility mode makes it so it can overlay full screen osu! so if you're lucky this might work.
  • If you have an old configuration file (kpsconf1 or kpsconf2) then you need to convert it with version 8.4 to load it in more recent versions.
  • Windowed mode can help on operating systems that do not properly support borderless windows (e.g., chromebooks). Note that transparent windows are not supported in windowed mode.

Downloads

Requires Java 8 or higher
Tested operating systems: Mac 10.11.6 & M1, Ubuntu Linux 16.04 LTS, Windows 7 & 8 & 10 & 11

All releases: releases
GitHub repository: here
Original osu! forum post: post

Examples

The following two examples show the layout while it is being edited. All the panels have to line up with the grid, but the size of the grid cells can be changed.


Next are two other examples of possible layouts.


Last are some very simple layouts to highlight more of the title-value display options.
Modes

History

Project development started: 23rd of January, 2017.

keyspersecond's People

Contributors

desu0556 avatar efojug avatar freakode avatar roanh avatar saegon-heo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

keyspersecond's Issues

Cause error when use obs to record the screen

when using obs to record the software there are some black space around it and when your mouse attached to these zones the obs catches the image that your mouse starts strobing
image
image

I guess maybe because the java version?
My java version is jdk1.8.0_291

Entire window "flashes" under Java (Linux)

when at a semi high update rate (250 ms or higher) it starts flashing, or dissapearing and reapearing rapidly. Really annoying and might make my planned ADOFAI streams ubearable (scince ADOFAI tweaks uses a windows only program to mod unity). I have included my Config file so maybe it has to deal with it being transparent {See note in my new comment} or i did something wrong. Also gonna include my Neofetch.

██████████████████ ████████ gotchfutchian@gotchbox-arch
██████████████████ ████████ ---------------------------
██████████████████ ████████ OS: Manjaro Linux x86_64
██████████████████ ████████ Host: Alienware Aurora R9 1.0.9 {yes its a prebuilt i got a couple christmases ago}
████████ ████████ Kernel: 5.14.0-1-MANJARO
████████ ████████ ████████ Uptime: 20 hours, 54 mins
████████ ████████ ████████ Packages: 1474 (pacman), 16 (flatpak), 5 (snap)
████████ ████████ ████████ Shell: zsh 5.8
████████ ████████ ████████ Resolution: 2560x1440
████████ ████████ ████████ DE: Plasma 5.22.4
████████ ████████ ████████ WM: KWin
████████ ████████ ████████ Theme: Breath2 2021 Dark [Plasma], Breath [GTK2/3]
████████ ████████ ████████ Icons: [Plasma], breath2 [GTK2/3]
████████ ████████ ████████ Terminal: yakuake
CPU: Intel i7-9700K (8) @ 5.200GHz
GPU: NVIDIA GeForce RTX 2070 SUPER
GPU: Intel CoffeeLake-S GT2 [UHD Graphics 630] {ignore, this is disabled nor does it output anything}
Memory: 8132MiB / 15798MiB

config.kpsconf3.renamed_becasue_github_dosent_like_non_standard_file_extensions.txt

Failed to save and load statistics

"Failed to save statistics on exit.
Cause: dev.roanh.kps.Key
Attempt to save again?"

"Failed to load statistics on launch.
Cause: writing aborted; java.io.NotSerializableException: dev.roanh.kps.Key"

The same error is also thrown when trying to load them manually

IO boards?

Hey there,

I just found this app as a feature while i play StepPrime (kindof stepmania). Well, im using a real pad which is connected via USB but it seems to be incompatibility with IO Boards? Maybe it's only taking keyboard strokes and not for other kind of boards.
Im attaching a picture where you can find they're connected (also by windows search "set up usb game controllers")

Also, another suggestion.. Ctrl+i clear the keyboard statics; how can i use Ctrl+something to clear total strokes?

Thanks !

1234

Custom panel background color

There could be a way to have only the keys show up, like you can transparent the background out but keep the keys filled in?

Remove hotkeys for commands

Sometimes the hotkeys conflict with other hotkeys and I want to remove them because personally they are not commonly used.

failed to save/load stats

(Some sentences were written using a translator)
When I try to "save stats",
it says,

Failed to save the statistics!
Cause: dev.roanh.kps.Key

but total, maximum, average were saved successfully.

and then, if I load that save,
it says,

Failed to load the statistics!
Cause: writing aborted; java.io.NotSerializableException: dev.roanh.kes.Key

also total, maximum, average were loaded successfully.

After update to v8.5, when I try to save or load, it always display above contents.

Suggestion: Load config from command line argument

First; amazing program!

Now, loading the config each time i start the program is a bit annoying, i made a script that starts all my streaming tools and what takes the most time is this.

So intead of doing start KeysPerSecond-v8.2.exe, then manually clicking config, looking for the file, etc ...
It could simply be start KeysPerSecond-v8.2.exe C:\pathtofile.cfg 👌

Layout body moves when you use arrow keys

I found a UI bug that messes up when you are configuring stuff. If you use the arrow keys to navigate the UI within Layout, the UI elements move up and down the page. This works for everything in the program and also works in all 4 directions. imgur.com/a/2g8yTN3

Reopening the Layout box resets the position of the elements.

Reset totals command defaulting back to ctrl + I

If I change the command for Reset totals from Ctrl + I to another shortcut, it works as intended for the current session. However, if the config is saved and loaded again, it defaults back to Ctrl + I in the commands configuration panel, as well as in practice. However, looking at the file in Notepad+ +, I can see that whatever command I set has been saved.

This is on version 8.4. I have not attempted reinstalling because setting it up for each session is less of an issue than reconfiguring settings for me.

Auto save results

Hey it's me again.

I accidentally closed the terminal running the app at the end of the day. As I wanted to know how many keys I typed, it's kind of a fail.

Would it be possible to auto save results every so often ?

Suggestion: Reset variables on map start

like the title says we should be able to define variables that reset on map restart. i.e. lets say i want my mania keys, average and maximun to restart every time i start a map. i put that in a config file and use it that way. i would like to use this while streaming but im the kind of person to restart them map 10 times during the intro. whcih it would be obnoxious to restart the settings every time.

can't use program

hello, i'm korean user.
A little talk english sorry.
play the "elswrod" game wtih use keyspersencond. but keyspersecond is not play

안녕하세요, 저는 한국 유저입니다.
능숙하지 못한 영어실력 죄송합니다.
Elsword 게임과 keyspersencond를 같이 사용하려 합니다. 그러나 keyspersecond가 실행되지 않습니다.

Interface Translations

I made a Chinese version of this software (just modify the source code), can I publish it? Can I submit my modified source code to this repository for other Chinese players to use?

Support overlaying fullscreen applications

Checked the Overlay mode and when I switch to osu while fullscreen, it doesn't overlap. Is there a way to make it overlap or is does it not work for fullscreen programs?

OSU!mania can't register key when using KeysPerSecond

Hi, This is great work!

I used KeysPerSecond-v8.2.exe in win10.
I found that OSU! sometimes can't read keys when I play OSU!mania and used KeysPerSecond and OBS.
This caused that keys I pressed to be judged as a miss.
This interval will occur once every 5-30 seconds.
But I don't understand why was bug happen, maybe it just a case.

Thank you

Keyboard Layout

I have an issue where I press two different keys on my keyboard, but they get recognized as the same, probably because this program uses the standard qwerty layout.

Visually Replay Events

i don't know if this is the right place for a suggestion but i made a github account just for this.

so anyway i think it would be nice if u can record the key presses and playback it later after playing
and maybe save the replay into a File?
as someone who had a bad pc this would be usefull. i can playback them later and record them using OBS
so i wouldn't have performance drop while playing
currently the savestats is the closest we can get

Stat Saver

Hey, i am trying your program, to see how much I play Osu Mania. In general I liked your Setup with the Keyspresses for each Key, and all Keys in total, but I would have liked it, to save the Statistics automatically. Is there any possible way to Save the Keylogs in the Setup-file itself or have an extra file, which the program overwrites automatically when you close it? I just dont like the Stat saving in a certain interval creating a new File each time.

Feature Request: Custom key button names.

Hey im a 4k OSU!Mania player and i use the keys 1 2 / * to play (/ * on numpad) but it shows up on the app as 1 2 / [print screen] (which is unreadable). i was wondering if you could add in a setting to customize the names for the keys so i could change them to 1234, that would also make it relate to the columns while playing
image that is what it looks like for me.

Problem: More Flexable Java version check on Windows.

My computer ( Windows 11 Pro ) has a lot of java version:

Openjdk 16.0.2,
IBM Semeru Runtime Open Edition 16.0.2.0 (In PATH, Uses as Default)
IBM Semeru Runtime Open Edition 1.8.0
Openjdk 17.0.1

...

When I directly open the exe file, It shows this window:

image

Then the application opens the Oracle java download page.

But when I use command prompt:

image

image

It can be run normally.

And, Your readme said that this application supports running on Java above 1.8 .

So how about making checking java version more flexable ?

Edit: This problem happens from V8.2 to now.

Edit 2: My computer doesn't have ORACLE Version Java 1.8.

Edit 3: I just checked version 3.0 and version 7.0. They all went into this issue.

Auto load configuration

Hi, I really like this program and I have used it for a long time, very nice!

Is it possible to auto load configure? This may require storing additional configurations to AppData or somewhere.

If you do not like that, is it possible to attach the configuration file location in the form of command line parameters to boot directly to the main interface?

Thank you.

Remove mouse/pad inputs from counters

Hi, awesome work!

I wanted a soft to check how many keys I press during a day as a developer. KPS is exactly what I needed ;)

When tracking all keys, it seems to also track clicks, would it be possible to exclude mouse events from counters? or maybe add a specific counter for that with number of click, distance scrolled, distance moved, etc...

Right-Click Menu not working on overlay (Java 16 Compatibility Issue)

I recently updated to Java 16 and noticed that there appears to be some breaking changes that prevent the right-click menu on the overlay from appearing. Full error logs are attached, but I think it's just some packages moved around.

kps.log

Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: class me.roan.kps.Menu$MenuUI (in unnamed module @0x74df377c) cannot access class sun.swing.SwingUtilities2 (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x74df377c
	at me.roan.kps.Menu$MenuUI.paintMenuItem(Menu.java:652)
	at me.roan.kps.Menu$MenuUI.access$300(Menu.java:604)
	at me.roan.kps.Menu$MenuItemUI.paintMenuItem(Menu.java:724)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.paint(BasicMenuItemUI.java:621)
	at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.update(BasicMenuItemUI.java:617)
	at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
	at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
	at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5271)
	at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
	at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
	at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
	at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
	at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
	at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
	at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
	at java.desktop/java.awt.Container.paint(Container.java:2003)
	at java.desktop/java.awt.Window.paint(Window.java:3949)
	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
	at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
	at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

M1 Mac Support

hi, when I try to start the .jar application from command line using java -jar KeysPerSecond-v8.4.jar, it opens without any gui and outputs this in the cmd and crashes:
Ctrl + P: Causes the program to reset and print the average and maximum value
Ctrl + U: Terminates the program
Ctrl + I: Causes the program to reset and print the key press statistics
Ctrl + Y: Hides/shows the GUI
Ctrl + T: Pauses/resumes the counter
Ctrl + R: Reloads the configuration
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'java.lang.Integer com.github.kwhat.jnativehook.GlobalScreen.getAutoRepeatRate()'
at com.github.kwhat.jnativehook.GlobalScreen.getAutoRepeatRate(Native Method)
at com.github.kwhat.jnativehook.GlobalScreen.(GlobalScreen.java:96)
at me.roan.kps.Main.setupNativeHook(Main.java:350)
at me.roan.kps.Main.main(Main.java:240)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class com.github.kwhat.jnativehook.GlobalScreen
at me.roan.kps.Main$1.run(Main.java:232)

I'm not at all familiar with java so I would appreciate help

Can't load Stats

if mousebuttons are included the program doesn't load the stats.
It says:

Failed to load the statistics!
Cause: Cannot parse line: - [keycode=-1,count=325,alt=false,ctrl=false,shift=false,name="M1"]

Kps not saving one of my keys

Hello when i save my kps my keybinds are zxc space ,./ but when i save it it goes zxc space ./ the comma wont save please fix this ive tried uninstalling and reinstalling kps and it wont work

"No key's pressed"

I'm on mac but when I press a key and click save I get a popup that says "No Key's Pressed"

showing

how do i get it to work/ show it on my own thing when doing a game?

Request

Is there some feature so that the program is in a specific game and not 2 seperate applications if you know what i mean.

Adding more customisation

There could be an option for thickening the lines that divide the key visualisers, and/or a way to add ambient occlusion or a drop shadow to the visualisers.

An edge blur effect could also be an amazing enhancement to the visualiser. Just from a visual standpoint, I'm only looking for an aesthetic.

P.S. Does anyone know how to add a flair like "enhancement", "bug", etc.?

Can't save config

Hi!

Great work with this! It seems that when I try to save the config to a local find, it only opens the "Open File" window. It may be that I do something wrong, but both the Load config and Save config opens up the same window. I'm on a MacBook Pro M1.

Thanks in advance for your help!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.