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
Hot reloading for Python

Hot reloading for Python

Olivier Breuleux 769 Jan 03, 2023
PyGMT - A Python interface for the Generic Mapping Tools

PyGMT A Python interface for the Generic Mapping Tools Documentation (development version) | Contact | Try Online Why PyGMT? A beautiful map is worth

The Generic Mapping Tools (GMT) 564 Dec 28, 2022
Allows you to canibalize methods from classes effectively implementing trait-oriented programming

About This package enables code reuse in non-inheritance way from existing classes, effectively implementing traits-oriented programming pattern. Stor

1 Dec 13, 2021
Greenery - tools for parsing and manipulating regular expressions

Greenery - tools for parsing and manipulating regular expressions

qntm 242 Dec 15, 2022
A simple and easy to use Spam Bot made in Python!

This is a simple spam bot made in python. You can use to to spam anyone with anything on any platform.

7 Sep 08, 2022
✨ Voici un code en Python par moi, et en français qui permet d'exécuter du Javascript en Python.

JavaScript In Python ❗ Voici un code en Python par moi, et en français qui permet d'exécuter du Javascript en Python. 🔮 Une vidéo pour vous expliquer

MrGabin 4 Mar 28, 2022
a tool for annotating table

table_annotate_tool a tool for annotating table motivated by wiki2bio,we create a tool to annoate all types of tables,this tool can annotate a table w

wisdom under lemon trees 4 Sep 23, 2021
Generates a random prnt.sc link and display image.

Generates a random prnt.sc link and display image.

Emirhan 3 Oct 08, 2021
A sys-botbase client for remote control automation of Nintendo Switch consoles. Based on SysBot.NET, written in python.

SysBot.py A sys-botbase client for remote control automation of Nintendo Switch consoles. Based on SysBot.NET, written in python. Setup: Download the

7 Dec 16, 2022
Aurin - A quick AUR installer for Arch Linux. Install packages from AUR website in a click.

Aurin - A quick AUR installer for Arch Linux. Install packages from AUR website in a click.

Suleman 51 Nov 04, 2022
Standard implementations of FedLab and its provided benchmarks.

FedLab-benchmarks This repo contains standard implementations of FedLab and its provided benchmarks. Currently, following algorithms or benchrmarks ar

SMILELab-FL 104 Dec 05, 2022
Python utilities for writing cross-version compatible libraries

Python utilities for writing cross-version compatible libraries

Tyler M. Kontra 85 Jun 29, 2022
✨ Un code pour voir les disponibilités des vaccins contre le covid totalement fait en Python par moi, et en français.

Vaccine Notifier ❗ Un chois aléatoire d'un article sur Wikipedia totalement fait en Python par moi, et en français. 🔮 Grâce a une requète API, on peu

MrGabin 3 Jun 06, 2021
A library from RCTI+ to handle RabbitMQ tasks (connect, send, receive, etc) in Python.

Introduction A library from RCTI+ to handle RabbitMQ tasks (connect, send, receive, etc) in Python. Requirements Python =3.7.3 Pika ==1.2.0 Aio-pika

Dali Kewara 1 Feb 05, 2022
Pyfunctools is a module that provides functions, methods and classes that help in the creation of projects in python

Pyfunctools Pyfunctools is a module that provides functions, methods and classes that help in the creation of projects in python, bringing functional

Natanael dos Santos Feitosa 5 Dec 22, 2022
VerSign: Easy Signature Verification in Python

VerSign: Easy Signature Verification in Python versign is a small Python package which can be used to perform verification of offline signatures. It a

Muhammad Saif Ullah Khan 3 Dec 01, 2022
Analyze metadata of your Python project.

Analyze metadata of your Python projects Setup: Clone repo py-m venv venv (venv) pip install -r requirements.txt specify the folders which you want to

Pedro Monteiro de Carvalho e Silva Prado 1 Nov 10, 2021
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
HeadHunter parser

HHparser Description Program for finding work at HeadHunter service Features Find job Parse vacancies Dependencies python pip geckodriver firefox Inst

memphisboy 1 Oct 30, 2021
convert a dict-list object from / to a typed object(class instance with type annotation)

objtyping 带类型定义的对象转换器 由来 Python不是强类型语言,开发人员没有给数据定义类型的习惯。这样虽然灵活,但处理复杂业务逻辑的时候却不够方便——缺乏类型检查可能导致很难发现错误,在IDE里编码时也没

Song Hui 15 Dec 22, 2022