Git Product home page Git Product logo

satty's Introduction

Satty: Modern Screenshot Annotation.

Satty is a screenshot annotation tool inspired by Swappy and Flameshot.

Satty has been created to provide the following improvements over existing screenshot annotation tools:

  • very simple and easy to understand toolset (like Swappy)
  • fullscreen annotation mode and post shot cropping (like Flameshot)
  • extremely smooth rendering thanks to HW acceleration (OpenGL)
  • working on wlroots based compositors (Sway, Hyprland, River, ...)
  • minimal, modern looking UI, thanks to GTK and Adwaita
  • be a playground for new features (post window selection, post paint editing, ...)

Install

Thanks to our package maintainers, Satty is available for many distributions on Linux and BSD:

Packaging status

Arch Linux

You can get the official Arch Linux package from the AUR:

yay -S satty-bin

Gentoo

You can get the Gentoo package from the Guru overlay:

eselect repository enable guru
emerge --sync guru
emerge -av satty

Pending PR for Gentoo overlay: gentoo/gentoo#33908

Alpine Linux

Satty is available in Alpine Testing. You can install it by uncommenting the testing repo in /etc/apk/repositories and then run:

apk add satty

Prebuilt Sources

You can download a prebuilt binary for x86-64 on the Satty Releases page.

Usage

Start by providing a filename or a screenshot via stdin and annotate using the available tools. Save to clipboard or file when finished. Tools and Interface have been kept simple.

All configuration is done either at the config file in XDG_CONFIG_DIR/.config/satty/config.toml or via the command line interface. In case both are specified, the command line options always override the configuration file.

Configuration File

[general]
# Start Satty in fullscreen mode
fullscreen = true
# Exit directly after copy/save action
early-exit = true
# Select the tool on startup [possible values: pointer, crop, line, arrow, rectangle, text, marker, blur, brush]
initial-tool = "brush"
# Configure the command to be called on copy, for example `wl-copy`
copy-command = "wl-copy"
# Increase or decrease the size of the annotations
annotation-size-factor = 2
# Filename to use for saving action. Omit to disable saving to file. Might contain format specifiers: https://docs.rs/chrono/latest/chrono/format/strftime/index.html
output-filename = "/tmp/test-%Y-%m-%d_%H:%M:%S.png"
# After copying the screenshot, save it to a file as well
save-after-copy = false
# Hide toolbars by default
default-hide-toolbars = false
# The primary highlighter to use, the other is accessible by holding CTRL at the start of a highlight [possible values: block, freehand]
primary-highlighter = "block"

# Font to use for text annotations
[font]
family = "Roboto"
style = "Bold"

# custom colours for the colour palette
[color-palette]
first= "#00ffff"
second= "#a52a2a"
third= "#dc143c"
fourth= "#ff1493"
fifth= "#ffd700"
custom= "#008000"

Command Line

ยป satty --help
Modern Screenshot Annotation. A Screenshot Annotation Tool inspired by Swappy and Flameshot.

Usage: satty [OPTIONS] --filename <FILENAME>

Options:
  -c, --config <CONFIG>
          Path to the config file. Otherwise will be read from XDG_CONFIG_DIR/satty/config.toml
  -f, --filename <FILENAME>
          Path to input image or '-' to read from stdin
      --fullscreen
          Start Satty in fullscreen mode
      --output-filename <OUTPUT_FILENAME>
          Filename to use for saving action. Omit to disable saving to file. Might contain format specifiers: <https://docs.rs/chrono/latest/chrono/format/strftime/index.html>
      --early-exit
          Exit directly after copy/save action
      --initial-tool <TOOL>
          Select the tool on startup [aliases: init-tool] [possible values: pointer, crop, line, arrow, rectangle, text, marker, blur, brush]
      --copy-command <COPY_COMMAND>
          Configure the command to be called on copy, for example `wl-copy`
      --annotation-size-factor <ANNOTATION_SIZE_FACTOR>
          Increase or decrease the size of the annotations
      --save-after-copy
          After copying the screenshot, save it to a file as well
  -d, --default-hide-toolbars
          Hide toolbars by default
      --primary-highlighter <PRIMARY_HIGHLIGHTER>
          The primary highlighter to use, secondary is accessible with CTRL [possible values: block, freehand]
      --font-family <FONT_FAMILY>
          Font family to use for text annotations
      --font-style <FONT_STYLE>
          Font style to use for text annotations
  -h, --help
          Print help
  -V, --version
          Print version

wlroots based compositors (Sway, Hyprland, Wayfire, River, ...)

You can bind a key to the following command:

grim -g "$(slurp -o -r -c '#ff0000ff')" - | satty --filename - --fullscreen --output-filename ~/Pictures/Screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png

Build from source

You first need to install the native dependencies of Satty (see below) and then run:

# build release binary, located in ./target/release/satty
make build-release

# optional: install to /usr/local
PREFIX=/usr/local make install

# optional: uninstall from /usr/local
PREFIX=/usr/local make uninstall

Dependencies

Satty is based on GTK-4 and Adwaita.

Ubuntu

  • libgtk-4-1
  • libadwaita-1-0
  • libepoxy
  • fontconfig

Arch Linux & Gentoo

  • glib2
  • libadwaita
  • gtk4
  • gdk-pixbuf2
  • libepoxy
  • fontconfig

License

The source code is released under the MPL-2.0 license.

The Font 'Roboto Regular' from Google is released under Apache-2.0 license.

satty's People

Contributors

00-kat avatar a-kenji avatar derpdays avatar fufsob avatar gabm avatar grzegorzkozub avatar mistgc avatar mrduartept avatar noornee avatar ri-char avatar robertmueller2 avatar td-sky 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  avatar

satty's Issues

Preselect `crop` like flameshot

I use such command to capture screen area like flameshot in hyprland:

# nushell
grim -o (hyprctl monitors -j | from json | where focused | first | get name) - | satty -f - --fullscreen --output-filename $saved

But unlike flameshot, the default operation of satty is Pointer so I have to choose Crop and then crop the area. It takes more steps.

Are there any plans to support preselecting mode in command line or changing the default operation of satty?

Clipboard behavior on Wayland

This is a continuation of #19. I want to do something to get more control over how the clipboard is handled and make persistance work even without clipboard daemon. My constraints:

  • clipboard should work with the clipboard button and regardless of the file button
  • clipboard should hold the copied image after program exit on Wayland
  • clipboard should work as described with but also without clipboard daemon
  • clipboard should continue to work on other platforms: X11, Darwin, Windows
  • if necessary, a user config might be okay...

Background Information I gathered during the last days

  • X11 and Windows (at least) have a proper concept of Clipboard where some "host process" copies and holds the copied data. That means after the copying process exits, the content is still available
  • Wayland does not have such concept. The content is expected to live inside the copying application and be available for querying.
  • There are tools that help to circumvent that situation. These are long-lived daemons that monitor the clipboard and hold the data on behalf of the application. Such tools include wayland-clipboard (wl-copy), cliphist, clipmon and others. They all - to some extent - work the same way
  • Applications can also mimic that behavior by forking itself off and keeping the fork alive until another process takes over the clipboard. Then they "die".
  • Another option (currently probably my preferred) might be to launch a custom command such as wl-copy and let this process do the "dirty work" of forking and staying alive. That command might also be configurable for the user..
  • In any case, we need to make sure that other platforms are not affected by the change

Toolbars obscure screenshot

Hi,
I'm flameshot user and switched to satty which works great on sway.
I use a lot of screenshots for documentation purposes, unfortunately satty sometimes gets in the way.
I'd like to suggest a little quality of life improvement.
I'd be nice if satty didn't obscure screenshot with it's top and bottom toolbars.
image

I'd like to propose new feature - frame around screenshot with configurable:

  • x,y dimensions
  • background color

Cargo.lock is out of date in v0.8.0

For the release v0.8.0, the Cargo.lock file is not in sync with the dependencies in Cargo.toml which makes it hard to package, i suggest maybe creating a new release v0.8.1 which includes the newly updated Cargo.toml?

For example in v0.8.0:
Cargo.toml (clap v4.4.4) - Cargo.lock (clap v4.4.7)
Which are out of sync

Whereas this is resolved in the latest git commit 891b4e9
latest git (clap v4.4.10 in both Cargo.{lock,toml})

[Feature request] Add freehand drawing and a way to exit selection mode

Hey there! I think this project has lots of potential.

Are there any plans to add freehand drawing? It is my main use case for swappy.

Also, when I select an area in the editor, I can't deselect. Am I missing something here?

Another suggestion would be to add a GTK color picker to the bottom color panel to choose a custom color.

Great job!

Tools not properly aligned on different aspect ratios

When you take a screenshot then resize satty to be of a different aspect ratio to the screenshot, the tools start to be misaligned (e.g. pen tool not drawing under cursor but instead somewhere else)

Steps to reproduce:

  1. Open a screenshot in satty
  2. Resize satty to something with a different aspect ratio to the screenshot
  3. Use a tool (such as the pen tool) and try to draw, you will notice that the
    position is skewed.

Image are not copied to clipboard when using `--early-exit`

Hello,

I really appreciate some of the recent updates you've made. However, when I open an image using the --early-exit parameter and click the copy button, Satty exits successfully. But when I try to paste, I notice that the image is not available in the clipboard. I'm not sure if this is a bug, but if it is, I would appreciate it if you could fix it.

Here are the details of my system:

  • Operating System: Manjaro Linux Linux 6.1.64-1-MANJARO
  • Desktop Environment: Gnome 45.1
  • Satty Version: 0.8.0

The command I'm running is:

gnome-screenshot -a -f /tmp/screenshot.png && satty --filename /tmp/screenshot.png --early-exit --init-tool rectangle

make install compatibility with sudo and root not having cargo

  • My cargo is installed to $HOME/.local/bin via rustup, root doesn't have it.
  • if I want to install satty to /usr/local, I need root to do that.
  • install depends on build-release, so make install includes cargo build --release, which root can't do.

Of course, I can use make build-release; touch build-release; sudo make install; rm build-release as a workaround. Or install cargo for root, of course. But it'd be nice if I didn't have to. ;)

I think the easiest is to have install depend on the actual file target/release/satty instead of build-release.

Feature request: Fill shape

It would be nice it one could select whether the shape is filled (as opposed to only drawing margins).

This could be used, for example, to redact regions, as the blur effect does not remove all information.

Suggested UX: First click select shape (margins only), second click toggles the shape button to fill-mode; clicking the button again would revert it back to margins only.

[FEAT] add flag to remember the latest used editor configuration

I generally find myself changing the default color and size very often and I really wish if satty could just remember the latest setting used. I guess the most straight forward approach to do this would be to persist the editor config somewhere and then read it every time satty is called.

For backwards compatibility purposes I was thinking about adding a new flag for this like --persist-editor-cfg.

WDYT? would a PR be useful?

FR: Add a Highlighter tool

Loving this utility currently but it would be many times better with the addition of either a block or freeflow highlighter tool to overlay a semitransparent color line over things instead of being restricted to pen and other drawing options for bringing attention.

Available in Alpine testing

Hi, just wanted to let you know that Satty is now available in the Alpine Linux testing repository for all supported arches.

To install, uncomment the testing repository in the /etc/apk/repositories file and install with apk add satty

I'm running Alpine 3.19.0 (latest-stable) and although packages from testing are not always expected to work on stable, currently Satty works great. Thanks for the cool software.

Icon design

We need a proper icon to build an identity that complements our name (satty), our mission (to be refined) and our visual appearance...

Call for Testers - OpenGL Backend

Hi everyone,

the new opengl backend has been coming for a long time! It is supposed to improve the responsiveness considerably - even when using high-resolution images. This will also solve problems with tools that require a high number of redraws - like the brush.

The changes have been proposed here: #53. We need to test them, as the change is quite fundamental.

Please build this branch locally and report any problems w.r.t. the current releases. If you need prebuilt binaries, we can certainly provide them..

[feature] add 1:1 scale shortcut in the toolbar to scale the image for uniform size reference

I'm using satty with grim as a replacement for flameshot.

Currently, when I create a screenshot for a small region, ant it's piped to satty for annotation, by default it's open in full-screen mode, the captured image will be scaled to fit the fullscreen size, which looks very odd. It'd be better to have a 1:1 scale shortcut there, so the annotation would have a uniform experience with different size of images.

And noticed that the pointer widget seems to do nothing at the time, once it gets the ability to scale the image on editing, the pointer can be used as a drag tool to move the view.

Another issue is related to the Crop tool, once I add a crop, I'll have no way to undo the crop, maybe allow to delete with a delete/backspace key or add a cross shape to the upper-left corner to the crop rectangle and connect with a delete event.

Adding Cargo.lock to repository

Hello,

I'm trying to package Satty for NixOS, but it requires the Cargo.lock file.
As the documentation says:

If youโ€™re building a non-end product, such as a rust library that other rust packages will depend on, put Cargo.lock in your .gitignore. If youโ€™re building an end product, which are executable like command-line tool or an application, or a system library with crate-type of staticlib or cdylib, check Cargo.lock into git. If youโ€™re curious about why that is, see โ€œWhy do binaries have Cargo.lock in version control, but not libraries?โ€ in the FAQ.

(Source: https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html)

If I'm understing this correctly we fall under the case on which we should have a Cargo.lock commited.

Once you make a release with this file I'll be happy to package it for NixOS.

Unable to save

There is an error "Error while saving file: Falled to save the texture as png" when pressing the save button. Also, there're two warning message as following:

2023-11-12_10:39:37

My system infoation:

2023-11-12_10:42:23

Please info me if any further information is needed.

Additional keyboard shortcuts

First of all: thanks for the nice software!

would be nice to support some more keyboard shortcuts. I thought about the following:

  • T to switch to the text tool
  • A to switch to the arrow tool
  • L to switch to the line tool
  • R to switch to the rectangle tool

Some minor issues

I tried this tool recently, it's good, but I and found some minor problems with it, which can probably be fixed.

1) Dot at start of brush tool.
No clue is this a my specific problem, maybe something with the touchpad, but the brush tool always starts with a dot that will not undo with line and stay as a separate item, so I need to tap CTRL-Z twice.
dot

2) Sharp, almost polygonal curved lines.
Brush tool with fast movements doesn't look very smooth.
image psd(2)

3) Lack of short options equivalents.
Help message right now is looks like this:

Modern Screenshot Annotation. A Screenshot Annotation Tool inspired by Swappy and Flameshot.

Usage: satty [OPTIONS] --filename <FILENAME>

Options:
  -c, --config <CONFIG>
          Path to the config file. Otherwise will be read from XDG_CONFIG_DIR/satty/config.toml
  -f, --filename <FILENAME>
          Path to input image or '-' to read from stdin
      --fullscreen
          Start Satty in fullscreen mode
      --output-filename <OUTPUT_FILENAME>
          Filename to use for saving action. Omit to disable saving to file. Might contain format specifiers: <https://docs.rs/chrono/latest/chrono/format/strftime/index.html>
      --early-exit
          Exit directly after copy/save action
      --initial-tool <TOOL>
          Select the tool on startup [aliases: init-tool] [possible values: pointer, crop, line, arrow, rectangle, text, marker, blur, brush]
      --copy-command <COPY_COMMAND>
          Configure the command to be called on copy, for example `wl-copy`
      --annotation-size-factor <ANNOTATION_SIZE_FACTOR>
          Increase or decrease the size of the annotations
  -h, --help
          Print help
  -V, --version
          Print version

As far as I can see, there are no short equivalents for very long --output-filename or --annotation-size-factor options. Probably -o for --output-filename, -t for --initial-tool, capital -F for --fullscreen would be nice and save a lot of time for typing. It just minor QOL improvement.

PS. Using last 0.9.0 version built from source on Hyprland

ctrl + z weird undo behaviour

So this is something i have noticed with text tool ,

if the tool is active, ie, i am typing something on the image using text tool, pressing ctrl+z while input field is active reverts any previous modification.

imo as long as input field is active, ctrl+z should do nothing or undo the last letter of text field input only .

Clipboard save doesn't seem to be picked by `wl-paste`

๐Ÿ‘‹ thx for building satty, it's super useful.

I'm using cliphist (https://github.com/sentriz/cliphist) as a history manager and the way that its instructions recommend setting it up is via wl-paste --watch cliphist store

I've noticed that when using satty, wl-paste --watch doesn't catch things that are being copied into the clipboard by it. Not sure what's missing here but a possible solution could be to allow sending the output to stdout so I can pipe it to wl-copy. I just did a quick test myself by commenting this validation https://github.com/gabm/Satty/blob/main/src/sketch_board.rs#L157-L164 and then doing satty -- output-filename /dev/stdout | wl-copy and that worked.

can't exit

after selecting an area to screenshot i can't exit the tool. I tried pressing ESC didn't work, tried to press the save button didn't work either and resorted to kill the process.

I'm on Arch, Hyprland.

`cargo-aur` generated wrong PKGBUILD and I want to maintain the PKGBUILD

The wrong PKGBUILD executes cp -r . "$pkgdir/usr/" so it copies all artifacts and the tar.gz to user directory:

# Maintainer: Matthias Gabriel <[email protected]>
#
# This PKGBUILD was generated by `cargo aur`: https://crates.io/crates/cargo-aur

pkgname=satty-bin
pkgver=0.8.1
pkgrel=1
pkgdesc="A screenshot annotation tool inspired by Swappy and Flameshot"
url="https://github.com/gabm/satty"
license=("MPL-2.0")
arch=("x86_64")
provides=("satty")
conflicts=("satty")
source=("https://github.com/gabm/satty/releases/download/v$pkgver/satty-v$pkgver-x86_64.tar.gz")
sha256sums=("1902268b51d6f6533483afadd0d321b9e56d7abf42bc9c7d045f6f43df6d6d40")

package() {
    depends=('pango' 'glib2' 'cairo' 'libadwaita' 'gtk4' 'gdk-pixbuf2')
    
    mkdir -p "$pkgdir/usr/"
    cp -r . "$pkgdir/usr/"
}

Run pacman -Ql satty-bin | choose 1 | tree --fromfile | xs then get:

.
โ””โ”€โ”€ usr
    โ”œโ”€โ”€ bin
    โ”‚ย ย  โ””โ”€โ”€ satty
    โ”œโ”€โ”€ satty-v0.8.1-x86_64.tar.gz
    โ””โ”€โ”€ share
        โ”œโ”€โ”€ applications
        โ”‚ย ย  โ””โ”€โ”€ satty.desktop
        โ”œโ”€โ”€ icons
        โ”‚ย ย  โ””โ”€โ”€ hicolor
        โ”‚ย ย      โ””โ”€โ”€ scalable
        โ”‚ย ย          โ””โ”€โ”€ apps
        โ”‚ย ย              โ””โ”€โ”€ satty.svg
        โ””โ”€โ”€ licenses
            โ””โ”€โ”€ satty
                โ””โ”€โ”€ LICENSE

I can fix it. But do you want to host it to someone else? I'm maintaining a PKGBUILD repository: https://github.com/TD-Sky/PKGBUILDs . There is a famous repository https://github.com/orhun/PKGBUILDs hosting many rust project packages as well.

Occasional corrupted screenshot

Sometimes when I take a screenshot it ends up looking like this:

image

I am not sure whether this is an issue with Satty or something else, but I'll post it here anyway.

The bug appeared when I updated recently. It did not occur before. It seems to occur less if I try to completely stop my mouse before releasing the selection tool (I use a trackpad)

This is the command I am using (modified from the one in the readme)

grim -g "$(slurp -o -c '#ff0000ff')" - | satty --filename -

My config:

[general]
# Start Satty in fullscreen mode
fullscreen = true
# Exit directly after copy/save action
early-exit = false
# Select the tool on startup [possible values: pointer, crop, line, arrow, rectangle, text, marker, blur, brush]
initial-tool = "brush"
# Configure the command to be called on copy, for example `wl-copy`
copy-command = "wl-copy"
# Increase or decrease the size of the annotations
#annotation-size-factor = 2
# Filename to use for saving action. Omit to disable saving to file. Might contain format specifiers: https://docs.rs/chrono/latest/chrono/format/strftime/index.html
output-filename = "/home/redacted/Pictures/Screenshots/satty-%Y%m%d-%H:%M:%S.png"
# After copying the screenshot, save it to a file as well
save-after-copy = false
# Hide toolbars by default
default-hide-toolbars = false

I am using Hyprland on Artix Linux, installed package through AUR. Any help would be appreciated, or at least a direction to the correct place that I should file this issue. Thanks

bug: Marker counter after undo action doesn't reset when called again

Problem

I encountered an issue while using satty.
If a user places a marker in the wrong spot and wants to remove it from that spot, the user does the undo action.
I noticed that after an undo action, when i try to place the marker in another position, the marker count is not reset, instead it increments
check video...

satty-marker-undo-bug.webm

Solution

I figured i could declare a global mutable variable that kept count of the current marker number and decrements by 1 after every undo action.

I looked for a way to manage global variables and found that using the lazy_static crate provided a safer and cleaner way to manage global static variables.

I think i might have to switch to once_cell

Configuration

Description

There are more and more requests for more configuration options. Currently we allow configuration exclusively through the commandline. That is okay but a) becomes confusing and b) has to be specified on each call - so it is not available when launched from the file browser for instance.

I want to introduce a config file which should reside in the XDG_CONFIG_DIR/satty/config.{ending}. Every configuration option shall have a sane default, a configuration entry and a commandline option. The hierarchy shall be as mentioned where the command line has the highest priority and overrides previous settings.

I did not decide on a format yet, I like yaml for its accessibility but I feel that toml is more type safe - although I dislike some of its design choices.

Existing Configuration options

  • early exit: Directly exit after copy/save action
  • fullscreen: start in fullscreen mode
  • copy command: specify the command to be used for the copy action
  • output-filename: specify the output folder and filename (if we want to handle this as a config option, then we need to allow patterns here..)
  • initial-tool: the tool that is selected by default on start-up

Requested Configuration Options

  • color-palette: specify the value of each colour (#28)
  • annotation-size-factor: specify the size of the annotations (e.g. make S bigger or smaller than default) (#28)
  • exit-action: what to do when exiting the app: clipboard, save or both
  • filename pattern

Possible Other Options

  • font: Font for text rendering
  • ...

add tooltips

Hiya!
I came across your satty post from a month ago on the swaywm subreddit and decided to give it a try. I love it!

issue

when i installed satty, I briefly looked at the GIF that was uploaded in the Readme and ran the sample usage command. I got a bit confused cos I couldn't tell what some of the buttons signified. It would be awesome if a tooltip was added.

solution

I'm not well experienced with rust. I actually never completed the rust book :/ (i suppose it's about time for me to pick it back up ^^)

anyhoo, adding a tooltip seemed like a relatively easy thing I could do to contribute to this project, so I did. I would create a PR that resolves this issue in a sec and I would greatly appreciate your feedback if I didn't do something right. Thank you!

[Feature Request] - Freeze Option

Can you please add a option to satty that freezes the screen when taking a screenshot using the grim command in the README?

This is a feature I haven't seen in any screenshot tool for Wayland.

Support the `ppm` image format

Grim supports outputting images in the ppm image format which is much faster since it does not compress the data. It would be nice for Satty to support ppm as input since it would make the screenshot-taking process a bit faster

Documentation

With the increasing number of configuration options #30, we also need better documentation to explain them to the users. I want this to be available on the web-page (github, maybe a domain) in a searchable and readable form as well as a man page. Ideally we only have one source of truth for this.

As for the man pages, a lot of projects seem to use scd nowadays...

Ubuntu issue

I've downloaded latest release of satty and attempted to try it:

> fgrep -w VERSION /etc/os-release
VERSION="22.04.3 LTS (Jammy Jellyfish)"

> ./satty
./satty: symbol lookup error: ./satty: undefined symbol: gtk_color_dialog_choose_rgba_finish

From README I can see it requires libgtk-4-1 and libadwaita-1-0, whilst both are installed:

> dpkg -l libgtk-4-1 libadwaita-1-0
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version                   Architecture Description
+++-====================-=========================-============-==========================================
ii  libadwaita-1-0:amd64 1.1.7-0ubuntu0.22.04.1    amd64        Library with GTK widgets for mobile phones
ii  libgtk-4-1:amd64     4.6.9+ds-0ubuntu0.22.04.1 amd64        GTK graphical user interface library

I'm on non-WL desktop if it does matter.

Support for ~/ in output dir

It seems that when using ~/ in the output dir path, no screenshot is saved and no error message is produced.

It would be good to be able to use the ~ shortcut for the home directory of the user.

Satty does not copy or save screenshots on Arch Linux with Sway

I installed Satty using trizen, a lightweight AUR helper, then bound $mod+Shift+s to the command provided in the readme. This does give me a screen to select the capture area and then goes to the editing screen, but the save or copy buttons do not work. If I try to quit the application with $mod+Shift+Q, nothing is added to the clipboard or saved anywhere. Can anyone help me fix this issue?

Crash when taking a screenshot

Hey! I tried your tool but it crashed for me

$ grim -g "$(slurp -o -c '#ff0000ff')" - | satty --filename - --fullscreen --output-filename foo.png
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:70:68
stack backtrace:
   0:     0x55c97aeaade1 - <unknown>
   1:     0x55c97aecd25f - <unknown>
   2:     0x55c97aea89a1 - <unknown>
   3:     0x55c97aeaabf5 - <unknown>
   4:     0x55c97aeac097 - <unknown>
   5:     0x55c97aeabe84 - <unknown>
   6:     0x55c97aeac54c - <unknown>
   7:     0x55c97aeac401 - <unknown>
   8:     0x55c97aeab216 - <unknown>
   9:     0x55c97aeac192 - <unknown>
  10:     0x55c97add6dd3 - <unknown>
  11:     0x55c97add6e63 - <unknown>
  12:     0x55c97ade9fa6 - <unknown>
  13:     0x55c97adfc8af - <unknown>
  14:     0x55c97ae8c03b - <unknown>
  15:     0x55c97ae8da68 - <unknown>
  16:     0x7fc3d37aaf19 - <unknown>
  17:     0x7fc3d38092b7 - <unknown>
  18:     0x7fc3d37a9112 - g_main_context_iteration
  19:     0x7fc3d2b06af6 - g_application_run
  20:     0x55c97ade28ac - <unknown>
  21:     0x55c97ae0dc05 - <unknown>
  22:     0x55c97adeb0fb - <unknown>
  23:     0x55c97ade3a83 - <unknown>
  24:     0x55c97adf982d - <unknown>
  25:     0x55c97aea3555 - <unknown>
  26:     0x55c97adeeb85 - <unknown>
  27:     0x7fc3d275acd0 - <unknown>
  28:     0x7fc3d275ad8a - __libc_start_main
  29:     0x55c97add74d5 - <unknown>
  30:                0x0 - <unknown>
thread 'main' panicked at 'The runtime of the component was shutdown. Maybe you accidentally dropped a controller?: Resize(Vec2D { x: 500.0, y: 500.0 })', /home/gabm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/relm4-0.6.2/src/channel/component.rs:66:34
stack backtrace:
   0:     0x55c97aeaade1 - <unknown>
   1:     0x55c97aecd25f - <unknown>
   2:     0x55c97aea89a1 - <unknown>
   3:     0x55c97aeaabf5 - <unknown>
   4:     0x55c97aeac097 - <unknown>
   5:     0x55c97aeabe84 - <unknown>
   6:     0x55c97aeac54c - <unknown>
   7:     0x55c97aeac447 - <unknown>
   8:     0x55c97aeab216 - <unknown>
   9:     0x55c97aeac192 - <unknown>
  10:     0x55c97add6dd3 - <unknown>
  11:     0x55c97add7213 - <unknown>
  12:     0x55c97ade0a5b - <unknown>
  13:     0x7fc3d2ca923e - <unknown>
  14:     0x7fc3d38d0b73 - <unknown>
  15:     0x7fc3d38d0c77 - g_signal_emit_valist
  16:     0x7fc3d38d0d34 - g_signal_emit
  17:     0x7fc3d2e6a158 - gtk_widget_allocate
  18:     0x7fc3d2cd3b63 - <unknown>
  19:     0x7fc3d2e69e81 - gtk_widget_allocate
  20:     0x7fc3d2dace54 - <unknown>
  21:     0x7fc3d2e69e81 - gtk_widget_allocate
  22:     0x7fc3d2e7de91 - <unknown>
  23:     0x7fc3d2e6a158 - gtk_widget_allocate
  24:     0x7fc3d2e7b978 - <unknown>
  25:     0x7fc3d2dd309d - <unknown>
  26:     0x7fc3d2ca923e - <unknown>
  27:     0x7fc3d38d0b73 - <unknown>
  28:     0x7fc3d38d0c77 - g_signal_emit_valist
  29:     0x7fc3d38d0d34 - g_signal_emit
  30:     0x7fc3d38d0b73 - <unknown>
  31:     0x7fc3d38d0c77 - g_signal_emit_valist
  32:     0x7fc3d38d0d34 - g_signal_emit
  33:     0x7fc3d303463c - <unknown>
  34:     0x7fc3d37ac39e - <unknown>
  35:     0x7fc3d37aaf19 - <unknown>
  36:     0x7fc3d38092b7 - <unknown>
  37:     0x7fc3d37a9112 - g_main_context_iteration
  38:     0x7fc3d2b06af6 - g_application_run
  39:     0x55c97ade28ac - <unknown>
  40:     0x55c97ae0dc05 - <unknown>
  41:     0x55c97adeb0fb - <unknown>
  42:     0x55c97ade3a83 - <unknown>
  43:     0x55c97adf982d - <unknown>
  44:     0x55c97aea3555 - <unknown>
  45:     0x55c97adeeb85 - <unknown>
  46:     0x7fc3d275acd0 - <unknown>
  47:     0x7fc3d275ad8a - __libc_start_main
  48:     0x55c97add74d5 - <unknown>
  49:                0x0 - <unknown>

[FEATURE] Resizing the output

Hi, first of all, thanks for this tool, it's really amazing!

The only thing that i missing for me is an ability to set a resize value in the config and/or in the command. I'm not 100% sure what would be the best approach so let me explain my workflow a little bit.

In my line of work, I use screenshots a lot to make documentation. I usually make documentations for normies and screenshots are really the way to go to help themnavigate through an app. When I write documentation, I use a template so all my documentation look alike and I'm mostly using a 2 columns document. The column on the left has a screenshot with arrows, annotations and labels and the column on the right has all the text describing what the user see and what he can do in the window showed on the left side. As you can expect, having a fixed sized image is a must in this kind of workflow.

I'm using Hyprland, loving it, and right now I've bind a couple of keys to pipe grimblast into Satty, it's working really well. What I'd like to do is to bind another key (Shift-Print in my case) to load a different config of Satty to resize the file to 300x300 pixels before saving the output.

First, we would obviously need to implement resizing in Satty and I'm not sure how much work that would be...

Second, I currently see 2 ways to implement this if we manage to get this in Satty

  1. Have a new command --resize and set the number of pixels for the output. We could also implement it via % of initial file as I've seen in many places but in my case, I really need fixed resolutions to fit everything in my columns for the docs. This value could be set in the command line and could also be set in the config file. In this case, I would simply have 2 config files and I would call the right one with the right binding.

  2. Set a --doc command to output both files, original and resized one in the chosen folder. This way we wouldn't have the need to have 2 separate config files.

I'm not used to Rust so I don't think I'll be of much help, but if you're in need, I'm always willing to learn, we just won't have this soon ;)

[Feature Request] Option to Disable Notification

When you copy (or save I think) a screenshot, a notification chimes in:
image
Could there be an option (maybe --disable-notification) to disable the notification from showing?

Also, may I ask why the notification exists in the first place? Since I feel like it would be incredibly easy to use

satty -f - && notify-send -i /usr/share/icons/hicolor/scalable/apps/satty.svg 'Satty' 'Copied to clipboard.'

when you call it (from maybe a keybind or something) and to maybe even create a satty function that runs notify-send after if you use it from a shell.

Text tool produces broken text

Hey, nice tool! Found a bug though:

I tried to save to a file and added the text "Thats how they get you" but this was produced:

image

$ satty --version
satty 0.11.2

Arch Linux 6.7.9-arch1-1 on Latest Niri wm

Ellipse is missing?

I found and tested Satty. It is very useful comparing Flameshot in X11.
But I found it is missing Ellipse tool to draw cycles.
Can I request a function to draw cycles or ellipse cycles on a picture in Satty.

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.