Skip to content
This repository was archived by the owner on Sep 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
771739c
add gitignore for PyCharm
acidcoke Jun 3, 2023
e0217c2
initial attempt
willwade Jun 27, 2023
cd57d88
runas admin version
willwade Jun 27, 2023
7f5d322
creating inno6 version of our build gh action
willwade Jun 27, 2023
40705fb
updating requirements
willwade Jun 27, 2023
4c0a671
mysetup -> projectGameface Installer
willwade Jun 27, 2023
2dc590f
adding readme details
willwade Jun 27, 2023
7bb3107
Update windows-build-release.yml
willwade Jun 27, 2023
417da76
reverting to installer name
willwade Jun 27, 2023
9d99616
Merge branch 'inno6-installer' of https://github.com/willwade/project…
willwade Jun 27, 2023
8c2f71e
reverting binary name
willwade Jun 27, 2023
9392ad0
trying diff way of doing name
willwade Jun 27, 2023
fa17bd6
a fix for #7
willwade Jun 27, 2023
9225d13
migrating config saving to C:/Users/<USER_NAME>/Gameface/
willwade Jun 28, 2023
0c4dcc7
fixing location of path for binary
willwade Jun 28, 2023
716ca97
fixing color?
willwade Jun 28, 2023
70e95e1
fixing verrsion to latest for customtkinter
willwade Jun 28, 2023
2b196a1
add icon for app
willwade Jun 28, 2023
c23b1a1
fiximg issues with fgcolor
willwade Jun 28, 2023
970bd16
reputting in correct name of app
willwade Jun 28, 2023
552879b
testing log path to Gameface user dir
willwade Jun 28, 2023
13f73b1
stupid typo
willwade Jun 28, 2023
9212f7d
gah had reverted the switch color bug
willwade Jun 28, 2023
22a1490
build portable and autostart
willwade Jun 29, 2023
11612e0
adding portable build
willwade Jun 29, 2023
fdb2227
stupid typo
willwade Jun 29, 2023
701dff2
clearer sections for zipping
willwade Jun 29, 2023
7cb0bfd
see if shell: pwsh fixes things
willwade Jun 29, 2023
4a136f4
swap installer and portable
willwade Jun 29, 2023
a60eba5
d'oh! its a zip not a exe
willwade Jun 29, 2023
5846347
one last thing
willwade Jun 29, 2023
6ad7452
unchecking desktop defaults
willwade Jun 30, 2023
df492bd
Merge branch 'google:main' into main
acidcoke Aug 6, 2023
1628611
Merge branch 'google:main' into main
acidcoke Nov 9, 2023
f5bb7a8
rename to Grimassist
acidcoke Nov 9, 2023
2e50742
remove redundant license comments
acidcoke Nov 10, 2023
763a67c
add file ending to contributing file
acidcoke Nov 10, 2023
d94dbbd
Update src/config_manager.py
willwade Nov 13, 2023
dbeda43
Update README.md
willwade Nov 13, 2023
4054ea8
putting back in missing actions
willwade Nov 13, 2023
31590c7
Merge branch 'inno6-installer' of https://github.com/willwade/project…
willwade Nov 13, 2023
3e10ab9
Merge branch 'inno6-installer' of github.com:willwade/project-gamefac…
acidcoke Nov 13, 2023
1a857ec
Merge branch 'willwade-inno6-installer'
acidcoke Nov 13, 2023
67a5ec6
Merge branch 'inno6-installer' of github.com:willwade/project-gamefac…
acidcoke Nov 13, 2023
d404a2f
rename to grimassist
acidcoke Nov 13, 2023
e83d668
Merge branch 'willwade-inno6-installer'
acidcoke Nov 13, 2023
e2952aa
Update windows-build-release.yml
willwade Nov 13, 2023
b6e7bd5
Merge pull request #3 from acidcoke/willwade-patch-1
willwade Nov 14, 2023
4434cb6
Merge pull request #2 from acidcoke/add-cursor-toggle
acidcoke Nov 14, 2023
10685d5
Add cursor toggle (#2)
acidcoke Nov 14, 2023
366ad29
0.3.34 bump (#4)
acidcoke Nov 14, 2023
dd22197
fix for paths
willwade Nov 15, 2023
4b54107
Merge pull request #5 from acidcoke/path-fix-installer
willwade Nov 15, 2023
814ec8d
skip loading of page_home
acidcoke Nov 17, 2023
b33b706
remove page_home from menu
acidcoke Nov 18, 2023
e6e2559
Create pylint.yml
acidcoke Nov 19, 2023
6938fb9
fix typos
acidcoke Nov 19, 2023
b09ad3b
remove empty lines at beginning of files
acidcoke Nov 19, 2023
5f4c6d2
replace strings with static variables
acidcoke Nov 20, 2023
992a59f
replace last string for page_names
acidcoke Nov 21, 2023
aa1fafd
refactor pages from dicct to list
acidcoke Nov 21, 2023
9365341
replace page_name Strings with classes through reflection
acidcoke Nov 22, 2023
cf22345
extract SafeDisposableFrame to its own file
acidcoke Nov 22, 2023
1e3f970
fix frames imports
acidcoke Nov 23, 2023
d506013
add missing requirements
acidcoke Nov 23, 2023
01b6562
display camera name on windows devices
acidcoke Nov 24, 2023
9146851
rename function for updating radio buttons
acidcoke Nov 24, 2023
522a391
update requirements
acidcoke Nov 24, 2023
1530f5d
refactoring for legibility
acidcoke Nov 25, 2023
bf45ede
Merge pull request #7 from acidcoke/simplify-gui
acidcoke Dec 2, 2023
bf26034
Fix camera update issue
acidcoke Dec 5, 2023
dcba8ba
Merge pull request #9 from acidcoke/camera-loading-speedup
acidcoke Dec 5, 2023
e9c4b7b
Refactor Pylint to ruff workflow and update Windows build workflow
acidcoke Dec 31, 2023
e119eb1
Fix warnings and remove unused imports
acidcoke Dec 31, 2023
bf3436a
Refactor import statements in controllers, detectors, gui, and utils …
acidcoke Jan 1, 2024
e50be16
Fix profile name validation in profile frames
acidcoke Jan 1, 2024
c9a67b5
Add ignore rules for VsCode, Ruff, and output directory
acidcoke Jan 1, 2024
b3d03e8
Update lint.yml workflow
acidcoke Jan 1, 2024
d65260c
Update ruff command in lint.yml
acidcoke Jan 1, 2024
48a9c7a
Merge branch 'main' into linter-workflow
acidcoke Jan 1, 2024
ac6da59
Merge pull request #8 from acidcoke/linter-workflow
acidcoke Jan 1, 2024
f59657c
Add guard job and build job documentation to windows-build-release.yml
acidcoke Jan 1, 2024
84391e1
Bump version number to 0.4.0
acidcoke Jan 1, 2024
2071673
Update guard job condition in windows-build-release.yml
acidcoke Jan 1, 2024
fb1248a
Update guard job condition in windows-build-release.yml
acidcoke Jan 1, 2024
5d06198
Update windows-build-release.yml workflow
acidcoke Jan 1, 2024
ec68a97
Add dependency on get_workflow_conclusion job
acidcoke Jan 1, 2024
05c1f90
Update GitHub workflows for linting and Windows build
acidcoke Jan 1, 2024
104802f
Update version extraction in windows-build-release.yml
acidcoke Jan 1, 2024
f12ebb5
Update file paths and variables in windows-build-release.yml
acidcoke Jan 1, 2024
fa6fe72
Refactor GitHub Actions workflow and test variable
acidcoke Jan 1, 2024
7eb17ef
Update version extraction regex in windows-build-release.yml
acidcoke Jan 1, 2024
f36c3ce
Update version handling in windows-build-release.yml
acidcoke Jan 1, 2024
0c4d9fe
Add Windows build workflow for releasing Grimassist
acidcoke Jan 1, 2024
17236b7
Update version extraction in windows-build-release.yml
acidcoke Jan 1, 2024
d84e7a2
Fix version extraction in Windows build workflow
acidcoke Jan 1, 2024
e56f7e2
Update Windows build workflow
acidcoke Jan 1, 2024
8c98b52
Update Windows build workflow to use Python 3.10 and freeze portable …
acidcoke Jan 1, 2024
39697c7
Update file paths in windows-build-release.yml
acidcoke Jan 1, 2024
266bc7a
Update file paths and naming conventions
acidcoke Jan 1, 2024
de1e857
Update installer output filename in installer.iss
acidcoke Jan 1, 2024
f718c4f
Fix file path in windows-build-release.yml
acidcoke Jan 1, 2024
e379bda
Add dependency on check job in build workflow
acidcoke Jan 1, 2024
04b0c2d
Add write permissions for contents in windows-build-release.yml
acidcoke Jan 1, 2024
e5d271a
Fix tag_name variable in release action
acidcoke Jan 1, 2024
fda897d
Update __init__.py with new camera functions
acidcoke Jan 1, 2024
a46db23
introduce enum for trigger modes
acidcoke Jan 28, 2024
bceb94b
refactor to use enum
acidcoke Jan 29, 2024
6cec59f
add stub for new trigger type
acidcoke Jan 29, 2024
74ebd8f
Make single trigger work properly. Rename old single trigger to Dynam…
acidcoke Feb 15, 2024
2099d4b
add config entry for new Triggertype
acidcoke Feb 17, 2024
69553e5
minor refactoring
acidcoke Feb 17, 2024
45360c9
implement rapid fire mode
acidcoke Feb 17, 2024
b0260f1
Properly hard code trigger value which was hidden in a convoluted if-…
acidcoke Feb 18, 2024
b0bbcf6
implement trigger modes for keyboard actions
acidcoke Feb 18, 2024
6ea4ed0
implement toggle for mouse buttons
acidcoke Feb 22, 2024
69f2425
implement toggle for keyboard keys
acidcoke Feb 22, 2024
9b0757b
release all keys when exiting
acidcoke Feb 22, 2024
fef53de
crudely implement gui for mouse trigger selection
acidcoke Feb 24, 2024
d75b832
refactor trigger names
acidcoke Feb 25, 2024
51636cf
use trigger enums for mouse actions
acidcoke Feb 25, 2024
9a06c7b
fix layout in page_select_gestures.py
acidcoke Feb 25, 2024
3a276bc
add trigger selection for keyboard actions
acidcoke Feb 25, 2024
687361d
some formatting
acidcoke Feb 25, 2024
e9d5f88
move meta actions to separate function
acidcoke Feb 25, 2024
f03445b
increase default window size to accommodate bigger action divs
acidcoke Feb 25, 2024
ee2c9c3
allow resizing of window
acidcoke Feb 25, 2024
542f7d1
update configs
acidcoke Feb 26, 2024
8e41dfc
fix cursor settings layout
acidcoke Feb 26, 2024
1a4e0c2
fix glitch in page_keyboard.py
acidcoke Feb 26, 2024
647eb32
some formatting
acidcoke Feb 27, 2024
251f6ab
improve readme
acidcoke Mar 24, 2024
1f34e5e
change actions to meta
acidcoke Apr 4, 2024
6d0e9e9
Merge pull request #12 from acidcoke/more-triggers
acidcoke Apr 4, 2024
e4761b8
bump version to 0.5.0
acidcoke Apr 6, 2024
bdbe595
Merge pull request #13 from AceCentre/12-no-developer-getting-started…
acidcoke Apr 12, 2024
f0e8dae
Merge pull request #16 from AceCentre/2-add-blink-detection (#14)
acidcoke Apr 12, 2024
de26c2e
bump to v0.5.1
acidcoke Apr 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Lint

on:
push:
branches-ignore:
- main

jobs:
check:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff
- name: Analysing the code with ruff
run: |
ruff check .
69 changes: 69 additions & 0 deletions .github/workflows/windows-build-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
on:
push:
tags:
- 'v*.*.*'

permissions:
contents: write

jobs:

check:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff
- name: Analysing the code with ruff
run: |
ruff check .

# The build job runs on a Windows machine and performs various build steps.
build:
runs-on: windows-latest
needs: check
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Freeze Installer
run: |
pyinstaller build.spec
- name: Build Installer
run: |
iscc installer.iss
- name: Freeze Portable
run: |
pyinstaller --distpath dist-portable build-portable.spec

- name: Zip Portable
shell: pwsh
run: |
Copy-Item -Path assets -Destination dist-portable\ -Recurse
Copy-Item -Path configs -Destination dist-portable\ -Recurse
Compress-Archive -Path dist-portable -DestinationPath Grimassist-Portable-${{github.ref_name}}.zip

- name: release
uses: softprops/action-gh-release@v1
with:
files: |
Output/Grimassist-Installer-${{github.ref_name}}.exe
Grimassist-Portable-${{github.ref_name}}.zip
tag_name: ${{github.ref_name}}
draft: false
prerelease: false
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ docs/_build/
# PyBuilder
target/

# VsCode
.vscode/

# PyCharm
.idea/

# Jupyter Notebook
.ipynb_checkpoints

Expand Down Expand Up @@ -129,3 +135,10 @@ dmypy.json
.pyre/
*.bat
log.txt

# Ruff
.ruff/
.ruff_cache/

# Output directory
output/
93 changes: 0 additions & 93 deletions CODE_OF_CONDUCT.md

This file was deleted.

29 changes: 0 additions & 29 deletions CONTRIBUTING

This file was deleted.

15 changes: 15 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# How to Contribute

We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.

## Code Reviews

All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.

## Community Guidelines

Be a decent human being, bot, or whatever.
63 changes: 42 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
# Project Gameface
Project Gameface helps gamers control their mouse cursor using their head movement and facial gestures.
# Grimassist
Grimassist helps gamers control their mouse cursor using their head movement and facial gestures.



# Download
# Download

## Single portable directory

1. Download the program from [Release section](../../releases/)
2. Run `run_app.exe`
2. Run `grimassist.exe`


## Installer

1. Download the Grimassist-Installer.exe from [Release section](../../releases/)
2. Install it
3. Run from your Windows shortcuts/desktop


# Model used
Expand All @@ -31,15 +40,15 @@ MediaPipe Face Landmark Detection API [Task Guide](https://developers.google.com
## Installation
> Environment
>- Windows
>- Python 3.9
>- Python 3.10
```
pip install -r requirements.txt
```

## Quick start
1. Run main application
```
python run_app.py
python grimassist.py
```


Expand All @@ -52,20 +61,22 @@ pip install -r requirements.txt
|-----------|---------------------------------------|
| camera_id | Default camera index on your machine. |
| tracking_vert_idxs | Tracking points for controlling cursor ([see](assets/images/uv_unwrap_full.png)) |
| camera_id | Default camera index on your machine. |
| spd_up | Cursor speed in the upward direction |
| spd_down | Cursor speed in downward direction |
| spd_left | Cursor speed in left direction |
| spd_right | Cursor speed in right direction |
| pointer_smooth | Amount of cursor smoothness |
| shape_smooth | Reduces the flickering of the action |
| hold_trigger_ms | Hold action trigger delay in milliseconds |
| auto_play | Automatically begin playing when you launch the program |
| mouse_acceleration | Make the cursor move faster when the head moves quickly |
| use_transformation_matrix | Control cursor using head direction (tracking_vert_idxs will be ignored) |
| pointer_smooth | Amount of cursor smoothness |
| shape_smooth | Reduces the flickering of the action |
| tick_interval_ms | interval between each tick of the pipeline in milliseconds |
| hold_trigger_ms | Hold action trigger delay in milliseconds |
| rapid_fire_interval_ms | interval between each activation of the action in milliseconds |
| auto_play | Automatically begin playing when you launch the program |
| enable | Enable cursor control |
| mouse_acceleration | Make the cursor move faster when the head moves quickly |
| use_transformation_matrix | Control cursor using head direction (tracking_vert_idxs will be ignored) |


## Keybinds configs
## Keybinding configs
>[mouse_bindings.json](configs/default/mouse_bindings.json)
>[keyboard_bindings.json](configs/default/keyboard_bindings.json)

Expand All @@ -75,20 +86,30 @@ gesture_name: [device_name, action_name, threshold, trigger_type]
```


| | |
|--------------|-------------------------------------------------------------------------------------------|
| gesture_name | Face expression name, see the [list](src/shape_list.py#L16) |
| device_name | "mouse" or "keyboard" |
| action_name | "left", "right" and "middle" for mouse. "" for keyboard, for instance, "w" for the W key. |
| threshold | The action trigger threshold has values ranging from 0.0 to 1.0. |
| trigger_type | Action trigger type, use "single" for a single trigger, "hold" for ongoing action. |
| | |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| gesture_name | Face expression name, see the [list](src/shape_list.py#L16) |
| device_name | "meta", "mouse", or "keyboard" |
| action_name | name of the action e.g. "left" for mouse. <br/>e.g. "ctrl" for keyboard<br/> e.g. "pause" for meta |
| threshold | The action trigger threshold has values ranging from 0.0 to 1.0. |
| trigger_type | "single" for a single trigger<br/> "hold" for ongoing action. <br/> "dynamic" for a mixture of single and hold. It first acts like single and after passing the amount of miliseconds from hold_trigger_ms like hold. Note: this is the default behaviour for mouse buttons<br/> "toggle" to switch an action on and off<br/>"rapid" trigger an action every "rapid_fire_interval_ms" |





# Build

## Pyinstaller / Frozen app
```
pyinstaller build.spec
```

# Build Installer

1. Install [inno6](https://jrsoftware.org/isdl.php#stable)
2. Build using the `installer.iss` file

# Attribution
Blink graphics in the user interface are based on
[Eye icons created by Kiranshastry - Flaticon](https://www.flaticon.com/free-icons/eye).
Binary file added assets/images/dropdowns/Eye blink left.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/dropdowns/Eye blink left.xcf
Binary file not shown.
Binary file added assets/images/dropdowns/Eye blink right.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/dropdowns/Eye blink right.xcf
Binary file not shown.
Binary file added assets/images/dropdowns/eye.xcf
Binary file not shown.
Binary file added assets/images/menu_btn_about.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/menu_btn_about.xcf
Binary file not shown.
Binary file added assets/images/menu_btn_about_selected.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/menu_btn_about_selected.xcf
Binary file not shown.
2 changes: 1 addition & 1 deletion assets/themes/google_theme.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"corner_radius": 500,
"border_width": 0,
"button_length": 0,
"fg_Color": ["#444746", "#4A4D50"],
"fg_color": ["#444746", "#4A4D50"],
"progress_color": ["#64DD17", "#1f538d"],
"button_color": ["#8F8F8F", "#D5D9DE"],
"button_hover_color": ["gray20", "gray100"],
Expand Down
Loading