https://github.com/nik-rev/ferrishot
A powerful screenshot app written in Rust πΈπ¦
https://github.com/nik-rev/ferrishot
capture cross-platform flameshot free-software gnu-linux gui iced image-editing rust screenshot
Last synced: 8 days ago
JSON representation
A powerful screenshot app written in Rust πΈπ¦
- Host: GitHub
- URL: https://github.com/nik-rev/ferrishot
- Owner: nik-rev
- License: apache-2.0
- Created: 2025-04-09T00:13:07.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-05-09T11:44:29.000Z (12 days ago)
- Last Synced: 2025-05-12T06:42:51.875Z (9 days ago)
- Topics: capture, cross-platform, flameshot, free-software, gnu-linux, gui, iced, image-editing, rust, screenshot
- Language: Rust
- Homepage: https://ferrishot.com
- Size: 1.71 MB
- Stars: 169
- Watchers: 4
- Forks: 9
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
## Showcase
## Features
Run by typing `ferrishot` on the command line.
### Basic usage
- Select a region on the screen by left clicking and dragging.
- Resize the region by dragging on any of the sides and dragging
- Move the region around by dragging in the centerThe selected region is surrounded by buttons, each with their own keybinding. Most notably:
- `Enter` copies screenshot to clipboard
- `Ctrl s` saves screenshot to a file. You can choose any valid extension like `.png`, `.webp`, `.jpg`
- `Ctrl u` uploads the screenshot to the internetHold `Shift` while resizing to have much more granular control over the size of the region.
#### Image Uploaded
You get a link and a QR Code, so you can easily send it to another device!
### Size Indicator
In the bottom-right corner, is a small box showing the height and width of the selection.
You can manually edit it to set a specific size.### Keyboard Control
Ferrishot can be fully keyboard controlled, with no mouse! You can select any region on the screen in just
8 keystrokes. Pick a top-left corner by typing `t`, and pick a bottom-right corner by typing `b`:We also have vim motions! There is a cheatsheet available by pressing `?` to view the motions:

You can see all of the keybindings declared in the default config file [`default.kdl`](./default.kdl)
### Config
Ferrishot is very customizable! You have _full_ control over the UI, color scheme and keybindings.
Create the default config file `ferrishot.kdl` by doing `ferrishot --dump-default-config`.
For reference, see the [default config file (`default.kdl`)](./default.kdl) which contains comments describing each option.
### Command-line interface
Ferrishot is fantastic for usage in scripts. It can be fully controlled without launching a UI.
#### `ferrishot`
A powerful screenshot app
**Usage:** `ferrishot [OPTIONS]`
###### **Options:**
- `-r`, `--region ` β Open with a region pre-selected
Format: `x++`
Each value can be absolute.
- 550 for `x` means top-left corner starts after 550px
- 100 for `height` means it will be 100px tallEach can also be relative to the height (for `y` and `height`) or width (for `width` and `x`)
- 0.2 for `width` means it region takes up 20% of the width of the image.
- 0.5 for `y` means the top-left corner will be at the vertical centerThe format can also end with 1 or 2 percentages, which shifts the region relative to the region's size
- If `width` is `250`, end region with `+30%` to move right by 75px or `-40%` to move left by 100px
- Supplying 2 percentage at the end like `+30%-10%`, the 1st affects x-offset and the 2nd affects y-offsetWith the above syntax, you can create all the regions you want.
- `100x1.0+0.5+0-50%`: Create a 100px wide, full height, horizontally centered region
- `1.0x1.0+0+0`: Create a region that spans the full screen. You can use alias `full` for this- `-l`, `--last-region` β Use last region
- `-a`, `--accept-on-select ` β Accept capture and perform the action as soon as a selection is madeIf holding `ctrl` while you are releasing the left mouse button on the first selection,
the behavior is cancelledIt's quite useful to run ferrishot, select a region and have it instantly be copied to the
clipboard for example. In 90% of situations you won't want to do much post-processing of
the region and this makes that experience twice as fast. You can always opt-out with `ctrl`Using this option with `--region` or `--last-region` will run ferrishot in 'headless mode',
without making a new window.Possible values:
- `copy`:
Copy image to the clipboard
- `save`:
Save image to a file
- `upload`:
Upload image to the internet- `-d`, `--delay ` β Wait this long before launch
- `-s`, `--save-path ` β Instead of opening a file picker to save the screenshot, save it to this path instead
- `-D`, `--dump-default-config` β Write contents of the default config to /home/e/.config/ferrishot.kdl
- `-C`, `--config-file ` β Use the provided config fileDefault value: `/home/e/.config/ferrishot.kdl`
- `-S`, `--silent` β Run in silent mode. Do not print anything
- `-j`, `--json` β Print in JSON format## Platform Support
- [x] Windows
- [x] MacOS
- [x] Linux (X11)
- [x] Linux (Wayland)## Roadmap
Ferrishot is under heavy development! At the moment the goal is to implement all the features that [flameshot](https://github.com/flameshot-org/flameshot) has, including more than that.
- [ ] Draw shapes on the image
- Square
- Circle
- Arrow
- Pen
- [ ] Draw text on the image
- [ ] Other effects
- Blur / pixelate
- Numbered circles
- [ ] Pin screenshot
- [ ] Color picker
- [ ] In-app tool editing## Installation
### Homebrew
```sh
brew install nik-rev/tap/ferrishot
```### PowerShell
```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/nik-rev/ferrishot/releases/latest/download/ferrishot-installer.ps1 | iex"
```### Shell
```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nik-rev/ferrishot/releases/latest/download/ferrishot-installer.sh | sh
```### Nix
Add it to your `flake.nix`:
```nix
# add it to your inputs
inputs.ferrishot.url = "github:nik-rev/ferrishot/main";
# then use it in home-manager for example
inputs.ferrishot.packages.${pkgs.system}.default
```### Arch AUR
```sh
yay -S ferrishot-bin
```### Cargo
If you use Linux, see [`CONTRIBUTING.md`](./CONTRIBUTING.md) for details on which dependencies you will need.
```sh
cargo install ferrishot
```## Contributing
See [`CONTRIBUTING.md`](./CONTRIBUTING.md)