Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
S

Satty

> 编程语言
Open source

Satty - Modern Screenshot Annotation.

2.3K stars0 likes1 views
WebsiteGitHub

About

Satty - Modern Screenshot Annotation.

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:

Specifics

Distribution Command Note
Gentoo emerge -av satty You need guru overlay (see wiki). Pending PR
Alpine Linux apk add satty Available in Alpine Community

Cargo

You can install satty via cargo install satty and cargo binstall satty, the latter requires cargo-binstall. In that case, no manpage, LICENSE file, .Desktop file are available. But you can use the --man and --license arguments to display either.

cargo install and cargo binstall methods install satty to $HOME/.cargo/bin. Using rustup and/or installing distribution packages for the Rust toolchain should normally add this to the user's path. How environment variables such as path are set depends on shell, distribution, compositor/desktop environment etc. It's not really possible to anticipate every possible combination from an application perspective.

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.

Shortcuts

General

  • Enter: as configured (see below), default: copy-to-clipboard (may be masked by active tool)
  • Esc: as configured (see below), default: exit (may be masked by active tool)
  • Shift+Delete reset (clear) experimental NEXTRELEASE
  • Ctrl+C: Save to clipboard (may be masked by active tool)
  • Ctrl+Shift+D or Ctrl+Shift+I: Open GTK inspector if not already opened
  • Ctrl+S: Save to specified output file
  • Ctrl+Shift+S: Save using file dialog 0.20.0. The dialog uses output-filename as initial filename/path when available and remembers the last selected folder. 0.21.0
  • Ctrl+Alt+C: Copy last saved filepath to clipboard 0.20.1
  • Ctrl+T: Toggle toolbars
  • Ctrl+Y: Redo
  • Ctrl+Z: Undo
  • Alt+(Left/Right/Up/Down): Pan, also available with middle mouse button drag 0.20.1

Mouse:

  • Ctrl+Wheel: Zoom in/out 0.22.0
  • Middle: Pan

Touchpad: 0.22.0

  • Pinch: Zoom (two finger)
  • Ctrl+Scroll: Zoom in/out (two finger scroll)
  • Scroll: Pan (two finger scroll)

Color Selection Shortcuts 0.20.1

1, 2, 3, …, 9, 0 — select nth color from the color palette

If out of range select custom color 0.21.0

Size Selection 0.22.0

In the bottom toolbar the size can be edited directly or by + and - buttons. Minimum is 0.1 and maximum to 99.99.

The bindings are:

  • Mouse left-button, wheel and key up/down step size is 0.1
  • Holding Shift will switch to 0.01 step size
  • Holding Ctrl will switch to 1.0 step size
  • Mouse middle-button and page up/page down step size is 1.0
  • Mouse right-button jumps to minimum/maximum
  • s focuses the annotation size factor input field

Tool Selection Shortcuts (configurable) 0.20.0

Default single-key shortcuts:

  • p: Pointer tool
  • c: Crop tool
  • b: Brush tool
  • i: Line tool
  • z: Arrow tool
  • r: Rectangle tool
  • e: Ellipse tool
  • t: Text tool
  • m: Numbered Marker tool
  • u: Blur tool
  • x: Fringe inpaint+Pixelate tool
  • g: Highlight tool
  • o: Image tool NEXTRELEASE

Pointer Tool NEXTRELEASE

Annotations can be selected by click. This will update the toolbar to the annotation's style and allow style changes. Newly created annotations can be autoselected if enabled in the config.

  • Hold Alt while clicking to select between overlapping annotations.
  • Delete deletes the selected annotation.
  • Drag the resize handles - mouse cursor will change - to change the size.
    • Hold Alt for centered resize
    • Hold Shift to snap to defined aspect ratios. NEXTRELEASE
    • Hold Control at corners for aspect ratio preserving resize. NEXTRELEASE
    • Hold mutiple to combine them.
  • Grab an annotation - mouse cursor will change to a hand - to move.
  • Scroll up/down with the mouse wheel to change the annotation's layer.
  • Nudge (small move) with the cursor keys.
  • Double-click on a text annotation to edit it.
  • Horizontal resizing on a marker changes its number, and vertical resizing changes the extra ring.

Image Tool NEXTRELEASE

Click the screenshot with the tool to open a file chooser, and the picked image is inserted as an annotation centred where you clicked, scaled down to at most half the screenshot if it does not fit. Drag a box instead of clicking, and the image is scaled to fit into it with its aspect ratio kept. From there it behaves like any other annotation: select it with the pointer tool to move it, resize it by its handles or change its layer.

Images can also arrive without selecting the tool first:

  • Ctrl+V pastes an image or a copied image file from the clipboard, centred on the mouse pointer. The text tool takes the shortcut for itself while it has input focus.
  • Dropping an image or an image file anywhere on the window inserts it where it was dropped.

Formats are those gdk-pixbuf has a loader for, plus webp.

Tool Modifiers and Keys

Arrow and line:

  • Shift to make tool snap to 15° steps.

Crop NEXTRELEASE, rectangle, ellipse, blur 0.22.0, highlight block mode0.22.0, pixelateNEXTRELASE, fringe-pixelateNEXTRELEASE, fringeNEXTRELEASE, imageNEXTRELEASE:

  • Alt to center the tool around origin.
  • Shift to snap to defined aspect ratios. NEXTRELEASE
  • Hold Control to preserve aspect ratio. Draws square if starting from zero size. NEXTRELEASE
  • Hold mutiple to combine them.

Text:

  • Press Shift+Enter to insert line break.
  • Combine Ctrl with Left or Right for word jump or Ctrl with Backspace or Delete for word delete.
  • Press Enter or switch to another tool to accept input, press Escape to discard entered text.
  • Home and End go to the start/end of current line or previous/next line if already on first/last character of line (automatic wrapping is not considered for this). Ctrl with Home/End jumps to start/end of text buffer.
  • Up or Down to jump to previous/next line (if already on first/last line, it jumps to the start/end of text buffer). 0.20.1
  • Combine Shift with other keys to select text (e.g. Shift+Home to select from start of line to cursor, Shift+Left to select characters before cursor, Ctrl+Shift+Left to select words before cursor,and so on) 0.20.1
  • Double-click to select word under cursor.Triple-click to select all text. 0.20.1
  • Ctrl+A to select all text. 0.20.1
  • Ctrl+C to copy selected text to clipboard. 0.20.1
  • Ctrl+X to cut selected text to clipboard. 0.20.1
  • Ctrl+V to paste text from clipboard. 0.20.1
  • Alt+Ctrl with Left or Right or Up or Down to move the text. Use Alt+Ctrl+Shift with arrow keys to nudge the text. 0.20.1
  • Press Alt to cycle the text effect: none → inverted outline → contrast outline (black/white) → drop shadow. experimental 0.22.0

Marker:

  • Hold Alt to get extra ring. 0.22.0

Highlight:

  • Hold Ctrl to switch between block and freehand mode (default configurable, see below).
  • Hold Shift in freehand mode for a straight 15° aligned line. Stop at some position and release and hold Shift again to achieve perfectly aligned turns.

Additional note on blur, fringe inpaint, pixelate and fringe inpaint-pixelate NEXTRELEASE:

  • Maximum Privacy: For the paranoid among us, we recommend using a solid, filled rectangle instead.
  • Optimized Pixelation: For best results when censoring text, ensure your block size matches the line height to guarantee unreadable characters.

Overwriting Keybindings NEXTRELEASE

Shortcuts can be overwritten in the config by

toml
[keybinds]
"BINDING" = "TOOL-OR-COMMAND"

Where BINDING follows the GTK syntax. This means modifiers are enclosed in angle brackets (e.g., <mod>) and keys are specified by name (for example, - must be written as minus).

Pressing any unbound key will print its name to the console.

Setting a binding to "none" will unbind it.

The defaults are listed in the config.toml.

Configuration File

…

Command Line

…

CSS

Satty ships with minimal builtin CSS which can be overridden by $XDG_CONFIG_HOME/satty/overrides.css. Adwaita defaults for headerbar (@headerbar_fg_color and @headerbar_bg_color) which Satty uses 0.21.0 may lack transparency, here's an override example:

css
.outer_box,
.toolbar {
    color: #000000;
    background-color: #ddddddaa;
}

You can discover styleable elements by using the GTK inspector with env variable GTK_DEBUG=interactive. Also, see wiki for more examples.

IME 0.20.0

Satty supports IME via GTK with and without preediting. Please note, at this point Satty has no proper fallback font handling so the font used needs to contain the entered glyphs.

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

You can bind a key to the following command:

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

Hyprland users must escape the # with another #:

bash
grim -g "$(slurp -o -r -c '##ff0000ff')" -t ppm - | satty --filename - --fullscreen --output-filename ~/Pictures/Screensho

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Rust

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言