Minimal screenshot annotation tool

Related tags

GUI gtk gtk3
Overview

nanoanno

What

This is a program that helps with quick small annotations (nano annotations if you will) in screenshots made with maim or something similar. Everything is in progress currently.

Usage

You can open a file by passing it as the first argument: nanoanno path/to/file.png or by piping into the program. That's why nanoanno file.png and cat file.png | nanoanno behave the same. If there is both an argument and an image being piped into the program, piping will be prefered.

You can pre-define the destination of a saved file with the -o flag. The save shortcuts will then just save the image to the destination saving you from the tiring file dialog (especially in day-to-day usage).

An example usage for screenshot taking may look like the following:

maim -s | nanoanno -o ~/$(date).png | xclip -selection clipboard -t image/png

First you select your screenshot through maim like you are used to. The result gets piped into nanoanno where you can do annoatations and where you are free to save the image to ~/$(date).png or not. If you don't want to annotate your image then you can still decide on whether to save it or not (which may add one key press in total to that workflow in the "worst case"). The end result gets piped to your clipboard for further usage.

Keybinds

Keys Action
holding left mouse button painting
holding right mouse button erasing
holding the middle mouse button, h, j, k, l moving the image
mouse scrolling, u, i scaling the image
x undo all changes
s save the image
w quit without saving
q quit and save the image

Video

TODO

  • make the second command line argument do its job
  • fix image dragging by holding the middle mouse button
  • make the popup better looking
  • add clipboard support
  • interpolate between two drawn dots to create a more smooth line
  • eraser
  • text tool

my first C project - don't be harsh

Issues
  • Misc Usability Changes

    Misc Usability Changes

    I'm thinking

    • ^z to undo, ^Z / ^r to redo
    • ctrl-alt mousewheel to increase/decrease brush size (ala gimp)
    • clicking should make a dot, instead of having to move at least 1px for it to register
    • shift-clicking should draw a straight line from the last draw position (ala gimp)

    some (if not all) of these are probably complicated though.

    Either way, nice project, gimp starts wayyy too slowly for edits like this.

    opened by 6gk 4
  • memory leak when drawing

    memory leak when drawing

    whenever I draw (ie hold left mouse and move it) the memory usage goes up quite fast, but doesn't go down.

    I think this may have to do with the undo logic (btw you should add ^z support), even though it still happens if I don't let go, and the memory usage doesn't go down if I "reset" the undo history (undo, make new change). I'm assuming that it saves the previous image instead of just the changes.

    opened by 6gk 2
  • Arguments

    Arguments

    Didn't try out the is_maximized and is_on_top options so you should probably test them. --help (-h) and --version (-v) are automatically handled by argp using the corresponding metadata in the top section of pinsel.c.

    opened by Baseng0815 1
  • Updated shell.nix and Makefile

    Updated shell.nix and Makefile

    The nix shell file needed lua, and for some reason I couldn't build on NixOS, which lead to the Makefile code addition.

    You should try building on your system first to see if it works.

    Related Bug Thread

    opened by JavaCafe01 0
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

omar 40.3k Aug 5, 2022
[WIP] Demo of a minimal but functional Dawn-based WebGPU client and server

dawn client-server example The goal of this demo is to create a minimal but functional Dawn-based WebGPU client and server with the following traits:

Rasmus 15 Nov 20, 2021
This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain

This is a minimal state immediate mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window and input handling but instead provides a very modular library approach by using simple input state for input and draw commands describing primitive shapes as output.

Micha Mettke 13.4k Aug 4, 2022
HoI4 Modding Tool That Does It All! Now with a QT based GUI, all your work wil be easier!

Kadaif - HoI4 Modding Tool Kadaif is a cross-platform tool meant to help you make mods for Hearts of Iron IV. With VSCode and all it's extensions, man

null 1 Dec 28, 2021
A powerful and fast search tool using regular expressions

A powerful and fast search tool using regular expressions

Stefan Küng 1.2k Aug 7, 2022
Windows GUI version of the age file encryption tool (built on rage, the Rust implementation)

Windows GUI version of the age file encryption tool (built on rage, the Rust implementation)

Theron Spiegl 40 Jul 23, 2022
FLTK - Fast Light Tool Kit - a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11)

FLTK - Fast Light Tool Kit - a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11)

The FLTK Team 945 Aug 4, 2022
Minimal screenshot annotation tool

pinsel What This is a program that helps with quick small annotations in screenshots made with maim or something similar. Everything is in progress cu

null 37 May 23, 2022
Ksnip is a Qt-based cross-platform screenshot tool that provides many annotation features for your screenshots.

Ksnip is a Qt-based cross-platform screenshot tool that provides many annotation features for your screenshots.

ksnip 1.4k Aug 7, 2022
6D - Pose Annotation Tool (6D-PAT) - is a tool that allows the user to load a set of images and also a set of 3D models and annotate where in the 2D image the 3D object ist placed.

6D - Pose Annotation Tool (6D-PAT) For detiled explanations checkout the WikiPage. What is it? With 6D-PAT you can create 6D annotations on images for

Florian Blume 64 Aug 4, 2022
xsnip - a minimal and convenient screenshot utility for X11

xsnip - a minimal and convenient screenshot utility for X11 Most screenshot utilities compatible with X are clumsy, use bloated toolkits, and often do

null 24 May 26, 2022
Greenshot - a free screenshot tool optimized for productivity

Greenshot - a free screenshot tool optimized for productivity Welcome to the source repository for Greenshot What is Greenshot? Greenshot is a light-w

Greenshot 2.9k Jul 31, 2022
Xournal++ is a handwriting notetaking software with PDF annotation support. Written in C++ with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Supports pen input from devices such as Wacom Tablets.

Xournal++ is a hand note taking software written in C++ with the target of flexibility, functionality and speed. Stroke recognizer and other parts are based on Xournal Code

Xournalpp 6.9k Aug 3, 2022
Xournal++ is a handwriting notetaking software with PDF annotation support

Xournal++ is a handwriting notetaking software with PDF annotation support. Written in C++ with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Supports pen input from devices such as Wacom Tablets.

Xournalpp 6.9k Aug 6, 2022
Flameshot - Powerful yet simple to use screenshot software.

Flameshot - Powerful yet simple to use screenshot software.

Flameshot 18.4k Aug 8, 2022
Make screenshot every few minutes to make your small history!

Screenlapse Fun CPP application (which isn't well-made, can be optimized) that automatically make screenshots of your screen every few minutes and sto

raywave's junk projects 3 Aug 18, 2021
Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

John Davidson 1.3k Aug 2, 2022
Minimal tool for measuring cost of mode switch

CPU mode switch statistics The mode-switch-stat tool measures the cost of CPU mode switch, the round trip between user and kernel mode. At present, th

Steven Cheng 12 Feb 22, 2022
Minimal unit testing framework for C

MinUnit Minunit is a minimal unit testing framework for C/C++ self-contained in a single header file. It provides a way to define and configure test s

David Siñuela Pastor 428 Jul 29, 2022
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

omar 40.3k Aug 5, 2022
Minimal Huffman coder/decoder

huffandpuff This is an extremely minimal huffman encoder/decoder. It uses no calls at all, not even stdlib/stdio, making it suitable for embedded appl

Adam Ierymenko 84 Jul 26, 2022
Minimal A* implementation in C. No dynamic memory allocation.

Micro A Star Path Finder This is a minimal A* path finder implementation in C, without any dynamic memory allocation. Usage The maximum size of the ma

Felipe da Silva 76 Jun 11, 2022
Minimal A* implementation in C. No dynamic memory allocation.

Micro A Star Path Finder This is a minimal A* path finder implementation in C, without any dynamic memory allocation. Usage The maximum size of the ma

Felipe da Silva 76 Jun 11, 2022
cherry: A Minimal HTTP Server

cherry: A Minimal HTTP Server Inspired by the Capriccio project and the Zaver HTTP server, cherry started out as an experimental project trying to inc

Zee 22 Feb 21, 2022
minimal POSIX compliant sleep

Minimal POSIX compliant sleep. Results Only 3 syscalls per execution $ strace ./sleep 1 execve("./sleep", ["./sleep", "1"], 0x7ffc998d09a8 /* 40 vars

null 33 Jul 10, 2022
The minimal opencv for Android, iOS and ARM Linux

opencv-mobile ✔️ This project provides the minimal build of opencv library for the Android, iOS and ARM Linux platforms. ✔️ We provide prebuild binary

null 863 Aug 4, 2022
A single header C++ library for parsing command line arguments and options with minimal amount of code

Quick Arg Parser Tired of unwieldy tools like getopt or argp? Quick Arg Parser is a single header C++ library for parsing command line arguments

null 45 Jul 14, 2022
A minimal viable programming language on top of liblgpp

This project aims to implement a minimal viable programming language on top of liblgpp. setup The project requires a C++17 compiler, CMake and liblgpp

Andreas Nilsson 73 Jun 28, 2021
Minimal, type safe printf replacement library for C++

tinyformat.h A minimal type safe printf() replacement tinyformat.h is a type safe printf replacement library in a single C++ header file. If you've ev

Chris Foster 463 Jul 19, 2022