This utility lets you draw using your laptop's touchpad on Linux.

Overview

FingerPaint

This utility lets you draw using your laptop's touchpad on Linux.

Pressing any key or clicking the touchpad will finish the drawing.

Your touchpad will not control the cursor while drawing, though external mice should still work.

It has support for both X11 (all desktop environments), and Wayland (just Gnome at the moment).

Video:

Video

Installation

Ubuntu / Debian

apt install xinput python3-pip python3-tk
pip3 install fingerpaint

Arch / Manjaro

Install fingerpaint via the AUR

Usage examples

# Simple usage
fingerpaint -o painting.png

# Play with style
fingerpaint --dark -o painting.png

# Copy to clipboard (using bash)
fingerpaint --hint=$'Press any key or click to finish drawing\nImage will be copied to clipboard' -o - | xclip -sel clip -t image/png

# Copy to clipboard (using fish)
fingerpaint --hint="Press any key or click to finish drawing"\n"Image will be copied to clipboard" -o - | xclip -sel clip -t image/png

Uses

  • Digitize your signature to sign PDFs
  • Enter complex characters (e.g. Math symbols) or Asian scripts
  • Doodle I guess
Comments
  • Program hangs after closing GUI

    Program hangs after closing GUI

    I noticed that the script doesn't end after closing the GUI using the keyboard. Without looking in detail I think this could be because keyboard events are not caught in this line, only using the mouse buttons works: https://github.com/Wazzaps/fingerpaint/blob/ff7090b4a5a0b999dc75ef687911e8c04299f3f4/fingerpaint/fingerpaint.py#L189-L191

    opened by jhossbach 8
  • TypeError: 'int' object is not subscriptable

    TypeError: 'int' object is not subscriptable

    Hi, when I try to run fingerpaint, I encounter the following issue:

    Traceback (most recent call last):
      File "/home/<user>/.local/bin/fingerpaint", line 8, in <module>
        sys.exit(cli())
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 288, in cli
        main(args)
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 207, in main
        make_ui(handler_loop(), scaled, devname, args)
      File "/home/<user>/.local/lib/python3.8/site-packages/fingerpaint/fingerpaint.py", line 86, in make_ui
        image_canvas.line(
      File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 161, in line
        angles = [
      File "/usr/lib/python3/dist-packages/PIL/ImageDraw.py", line 162, in <listcomp>
        math.degrees(math.atan2(end[0] - start[0], start[1] - end[1]))
    TypeError: 'int' object is not subscriptable
    

    Touchpad used is SYNA2393:00 06CB:7A13, OS is Ubuntu 20.04 with GNOME 3.36.8.

    opened by biancofla 5
  • AttributeError: 'InputDevice' object has no attribute 'absinfo'

    AttributeError: 'InputDevice' object has no attribute 'absinfo'

    When I try to run fingerpaint, I get this error:

    Using touchpad: XXXXXXX Touchpad
    Traceback (most recent call last):
      File "/home/XXX/.local/bin/fingerpaint", line 8, in <module>
        sys.exit(cli())
      File "/home/XXX/.local/lib/python3.9/site-packages/fingerpaint/fingerpaint.py", line 288, in cli
        main(args)
      File "/home/XXX/.local/lib/python3.9/site-packages/fingerpaint/fingerpaint.py", line 165, in main
        x_absinfo = touchpad.absinfo(evdev.ecodes.ABS_X)
    AttributeError: 'InputDevice' object has no attribute 'absinfo'
    
    

    I am running Fedora 34, with GNOME DE. (I changed some personal information for XXX).

    opened by caiocvsilva 5
  • Logitech K400 Plus trackpad not recognized

    Logitech K400 Plus trackpad not recognized

    I have a Logitech K400 Plus keyboard.

    It has a trackpad and left/right buttons built into in

    It interfaces to the computer via Logitech Unifying Receiver.

    Fingerpaint does not recognize it as a trackpad.

    Is there a way to inform Fingerpaint to use this trackpad?

    enhancement 
    opened by johnblommers 4
  • State of Wayland support

    State of Wayland support

    I am wondering whether Wayland is supported now, is xinput still needed? There was an issue on the AUR: https://aur.archlinux.org/packages/fingerpaint-wayland

    https://github.com/Wazzaps/fingerpaint/blob/12b865681dbe4b5602bc052e9f6dd7d515554952/fingerpaint/fingerpaint.py#L298-L305

    opened by jhossbach 2
  • TypeError: line() got an unexpected keyword argument 'joint'

    TypeError: line() got an unexpected keyword argument 'joint'

    I get this error when I tap on the touchpad:

    $ fingerpaint -o test.png Using touchpad: SYNA3082:00 06CB:8265 Touchpad Traceback (most recent call last): File "$HOME/.local/bin/fingerpaint", line 8, in sys.exit(cli()) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 288, in cli main(args) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 207, in main make_ui(handler_loop(), scaled, devname, args) File "$HOME/.local/lib/python3.6/site-packages/fingerpaint/fingerpaint.py", line 89, in make_ui width=int(args.line_thickness * aa_factor), joint='curve', fill=(0, 0, 0) TypeError: line() got an unexpected keyword argument 'joint'

    opened by AlfonsoGangemi 2
  • ability to go fullscreen

    ability to go fullscreen

    right now fingerpaint opens up in small windows which is sort of limited in visual sense when we want to doodle. It would be nice to have a maximize window option

    opened by Bhupesh-V 1
  • Loosen dependencies

    Loosen dependencies

    Tightening the dependencies in your setup.py makes it hard for some packaging managers (pacman) to install the package. It is also not necessary to keep a specific version. I tested it using the newer version Pillow v8.3.1

    Also, (for me at least) there seems to be some issue with the Arch package python-pyudev giving the wrong version which also messes with this requirement.

    Feel free to just cherry-pick from https://github.com/jhossbach/fingerpaint/commit/9afe96d339f59353a4e7b4b22353e9ca331c2074.

    opened by jhossbach 1
  • Release Tag (v1.1)

    Release Tag (v1.1)

    Hey there, it might be a good idea to create a version tag / release for the package. I can pick up from there and create an AUR package.

    Originally posted by @jhossbach in https://github.com/Wazzaps/fingerpaint/discussions/1#discussioncomment-1142541

    opened by jhossbach 1
  • fingerpaint and fingerpaint-wayland AUR packages are the same?

    fingerpaint and fingerpaint-wayland AUR packages are the same?

    I checked PKGBUILDs of both the packages, and they both seem the same. Maybe I guess, earlier they were separate? If they are same now, as both wayland and xorg functionality is in same code, please consider making a request at AUR for deletion to avoid any confusion for some people who use both wayland and xorg on their systems (like me, i generally use wayland, but sometimes have to switch to xorg, when i am somewhere where people may use my laptop)

    documentation 
    opened by heymisphere 1
  • Support for wlroots based compositors

    Support for wlroots based compositors

    Besides GNOME and KDE, wlroots (wlr) is the only big thing on wayland right now on which a lot of compositors are based (like sway, hyprland, river). If wlroots is supported, all these compositors would get supported. Any plans for the support for wlr?

    enhancement 
    opened by heymisphere 5
  • Create a Snap package (once Fingerpaint has a save UI)

    Create a Snap package (once Fingerpaint has a save UI)

    For an easy installation, clicking Install at Snap Store in Ubuntu, which is the first Linux distro for many new users now coming to Linux. Solus, KDE Neon, Manjaro, MakuluLinux, Ubuntu MATE, Zorin OS etc. support snapd by default too.

    Request was put up originally to here: https://forum.snapcraft.io/t/fingerpaint-draw-with-touchpad-or-sign-a-signature-easily-only-non-beginner-friendly-installation-available/31234

    enhancement good first issue 
    opened by heidiwenger 1
  • Feature Request:

    Feature Request: "hover" cursor

    This is a great & fun project - thanks for making it. I saw it on OMG! Ubuntu.

    Would you consider implementing a mode where we only see a cursor at the point on the canvas that a touch corresponds to...and then it only draws while holding down a key?

    Thank you!

    enhancement good first issue 
    opened by mdmayfield 0
  • Fingerpaint not working on Manjaro Gnome Wayland

    Fingerpaint not working on Manjaro Gnome Wayland

    I'm using Manjaro Gnome with Wayland and installed the fingerpaint-wayland aur.

    When I use the following command: fingerpaint - o test.png I get the following output:

    Using touchpad: SynPS/2 Synaptics TouchPad Unexpected touchpad state: "", are you using Gnome?

    opened by hahihohehe 11
Releases(v1.2.6)
Owner
Wazzaps
“heuristic” is a word grownups use when they’re about to protect your life’s savings using cryptography they can’t prove secure.
Wazzaps
Run async workflows using pytest-fixtures-style dependency injection

Run async workflows using pytest-fixtures-style dependency injection

Simon Willison 26 Jun 26, 2022
Attempts to crack the compression puzzle.

The Compression Puzzle One lovely Friday we were faced with this nice yet intriguing programming puzzle. One shall write a program that compresses str

Oto Brglez 14 Dec 29, 2022
Personal Toolbox Package

Jammy (Jam) A personal toolbox by Qsh.zh. Usage setup For core package, run pip install jammy To access functions in bin git clone https://gitlab.com/

5 Sep 16, 2022
Python humanize functions

humanize This modest package contains various common humanization utilities, like turning a number into a fuzzy human-readable duration ("3 minutes ag

Jason Moiron 1.6k Jan 01, 2023
Prime Path Generator is a prime path generator used to generate prime paths.

Prime Path Generator is a prime path generator used to generate prime paths.

1 Nov 06, 2021
A toolkit for writing and executing automation scripts for Final Fantasy XIV

XIV Scripter This is a tool for scripting out series of actions in FFXIV. It allows for custom actions to be defined in config.yaml as well as custom

Jacob Beel 1 Dec 09, 2021
Small Python script to parse endlessh's output and print some neat statistics

endlessh_parser endlessh_parser is a small Python script that parses endlessh's output and prints some neat statistics about it Usage Install all the

ManicRobot 1 Oct 18, 2021
A simple API that will return a key-value pair of randomly generated UUID

A simple API that will return a key-value pair of randomly generated UUID. Key will be a timestamp and value will be UUID. While the server is running, whenever the API is called, it should return al

Pius Lucky 2 Jan 18, 2022
A tool for testing improper put method vulnerability

Putter-CUP A tool for testing improper put method vulnerability Usage :- python3 put.py -f live-subs.txt Result :- The result in txt file "result.txt"

Zahir Tariq 6 Aug 06, 2021
password generator

Password generator technologies used What is? It is Password generator How to Download? Download on releases Clone repo git clone https://github.com/m

1 Dec 16, 2021
Stubmaker is an easy-to-use tool for generating python stubs.

Stubmaker is an easy-to-use tool for generating python stubs. Requirements Stubmaker is to be run under Python 3.7.4+ No side effects during

Toloka 24 Aug 28, 2022
Data Utilities e.g. for importing files to onetask

Use this repository to easily convert your source files (csv, txt, excel, json, html) into record-oriented JSON files that can be uploaded into onetask.

onetask.ai 1 Jul 18, 2022
Python program to do with percentages and chances, random generation.

Chances and Percentages Python program to do with percentages and chances, random generation. What is this? This small program will generate a list wi

n0 3 Jul 15, 2021
This script allows you to retrieve all functions / variables names of a Python code, and the variables values.

Memory Extractor This script allows you to retrieve all functions / variables names of a Python code, and the variables values. How to use it ? The si

Venax 2 Dec 26, 2021
A simple, console based nHentai Code Generator

nHentai Code Generator A simple, console based nHentai Code Generator. How to run? Windows Android Windows Make sure you have python and git installed

5 Jun 02, 2022
A script to check for common mistakes in LaTeX source files of scientific papers.

LaTeX Paper Linter This script checks for common mistakes in LaTeX source files of scientific papers. Usage python3 paperlint.py file.tex [-i/x inc

Michael Schwarz 12 Nov 16, 2022
Python utility for discovering interesting CFPreferences values on iDevices

Description Simple utility to search for interesting preferences in iDevices. Installation python3 -m pip install -U --user cfprefsmon Example In this

12 Aug 19, 2022
The Black shade analyser and comparison tool.

diff-shades The Black shade analyser and comparison tool. AKA Richard's personal take at a better black-primer (by stealing ideas from mypy-primer) :p

Richard Si 10 Apr 29, 2022
💉 코로나 잔여백신 예약 매크로 커스텀 빌드 (속도 향상 버전)

Korea-Covid-19-Vaccine-Reservation 코로나 잔여 백신 예약 매크로를 기반으로 한 커스텀 빌드입니다. 더 빠른 백신 예약을 목표로 하며, 속도를 우선하기 때문에 사용자는 이에 대처가 가능해야 합니다. 지정한 좌표 내 대기중인 병원에서 잔여 백신

Queue.ri 21 Aug 15, 2022
Playing with python imports and inducing those pesky errors.

super-duper-python-imports In this repository we are playing with python imports and inducing those pesky ImportErrors. File Organization project │

James Kelsey 2 Oct 14, 2021