Automated window framing, soft drop shadows, and studio screen capture for Wayland
9
stars
14
commits
Rust
primary language
Sep 5, 2026
updated
Wayland screenshot and screen recording tool with window framing and an optional floating dock.
Supports Hyprland, Sway, River, Niri, and other Wayland compositors.

slurp).shotdock frame <file>.hyprpicker).wf-recorder).tesseract).| Canvas Background | Window Framing | Floating Dock |
|---|---|---|
![]() | ![]() | ![]() |
yay -S shotdock
# or paru -S shotdock
git clone https://github.com/sirrryasir/shotdock.git
cd shotdock
cargo build --release
sudo install -Dm755 target/release/shotdock /usr/local/bin/shotdock
gtk4 & gtk4-layer-shellgrim & slurpimagemagick (ImageMagick 7)wl-clipboardlibnotify (notify-send)hyprpicker: Freeze screen animations during selection (--freeze / -z)tesseract & tesseract-data-eng: OCR text extraction (-t)wf-recorder: Video screen recording (-r, --record-area)satty / swappy: Image annotation editor (-e)rofi: Screen recording target menusudo pacman -S gtk4 gtk4-layer-shell grim slurp imagemagick wl-clipboard libnotify hyprpicker tesseract tesseract-data-eng wf-recorder swappy rofi
sudo dnf install gtk4-devel gtk4-layer-shell-devel grim slurp ImageMagick wl-clipboard libnotify tesseract wf-recorder swappy rofi
| Command | Description |
|---|---|
shotdock -a | Snip region or click window |
shotdock -a --freeze | Snip region with frozen screen |
shotdock -w | Capture window/region with studio framing |
shotdock -f | Capture focused monitor |
shotdock -p | Capture all connected monitors |
shotdock -t | Extract text to clipboard (OCR) |
shotdock -r | Toggle screen recording (interactive selector) |
shotdock --record-area | Start region recording directly |
shotdock frame <file> | Frame an existing image |
shotdock | Open floating dock |
| Flag | Description |
|---|---|
-e, --edit | Open capture in editor (satty or swappy) |
--no-edit | Bypass editor |
--no-shadow | Disable drop shadow in framed capture |
--no-titlebar | Disable window titlebar in framed capture |
-z, --freeze | Freeze screen during area selection |
-c, --clipboard | Copy framed image to clipboard (shotdock frame) |
-o, --output <path> | Specify output path (shotdock frame) |
--theme <name> | Canvas theme preset (shotdock frame) |
# Basic framing
shotdock frame input.png -o framed.png
# Custom theme with clipboard output
shotdock frame screenshot.png -o card.png --theme Sunset -c
# Without titlebar
shotdock frame terminal.png --theme Breeze --no-titlebar -o output.png
hyprland.conf)# Screenshots
bind = SUPER, P, exec, shotdock -a
bind = SUPER CTRL, P, exec, shotdock -a --freeze
bind = SUPER ALT, P, exec, shotdock -w
bind = , Print, exec, shotdock -p
# Utilities
bind = SUPER CTRL, T, exec, shotdock -t
bind = SUPER, R, exec, shotdock -r
bind = SUPER SHIFT, D, exec, shotdock
# Floating dock blur rules
layerrule = blur, shotdock
layerrule = ignorezero, shotdock
config)bindsym $mod+p exec shotdock -a
bindsym $mod+Ctrl+p exec shotdock -a --freeze
bindsym $mod+Alt+p exec shotdock -w
bindsym Print exec shotdock -p
bindsym $mod+Ctrl+t exec shotdock -t
bindsym $mod+r exec shotdock -r
bindsym $mod+Shift+d exec shotdock
config.kdl)binds {
Mod+P { spawn "shotdock" "-a"; }
Mod+Ctrl+P { spawn "shotdock" "-a" "--freeze"; }
Mod+Alt+P { spawn "shotdock" "-w"; }
Print { spawn "shotdock" "-p"; }
Mod+Ctrl+T { spawn "shotdock" "-t"; }
Mod+R { spawn "shotdock" "-r"; }
Mod+Shift+D { spawn "shotdock"; }
}
~/.config/shotdock/config.json:
{
"show_cursor": false,
"freeze": false,
"window_shadow": true,
"macos_titlebar": true,
"canvas_theme": "Transparent",
"timer_seconds": 0,
"save_to_disk": true,
"copy_to_clipboard": true,
"open_in_editor": false,
"save_dir": "~/Pictures/Screenshots",
"editor": null,
"ocr_lang": "eng",
"studio_quality": true,
"record_fps": 60
}
Transparent: Clean alpha PNG with soft drop shadow.FollowSystem: Dynamic gradient matching current wallpaper palette (Wallbash).RealWallpaper: Screenshot centered over blurred desktop wallpaper.Sunset: Rose to Violet gradient (#f43f5e to #8b5cf6).Candy: Vibrant Violet gradient (#ec4899 to #a855f7).Breeze: Cyan to Blue gradient (#06b6d4 to #3b82f6).Raindrop: Ocean to Indigo gradient (#3b82f6 to #6366f1).Midnight: Deep dark slate gradient (#1e1b4b to #0f172a).Forest: Emerald to Mint gradient (#059669 to #10b981).White / Black: Minimalist solid backdrops.14 commits
Rust
96.8%
Shell
3.2%
Automated window framing, soft drop shadows, and studio screen capture for Wayland
9
stars
14
commits
Rust
primary language
Sep 5, 2026
updated
Wayland screenshot and screen recording tool with window framing and an optional floating dock.
Supports Hyprland, Sway, River, Niri, and other Wayland compositors.

slurp).shotdock frame <file>.hyprpicker).wf-recorder).tesseract).| Canvas Background | Window Framing | Floating Dock |
|---|---|---|
![]() | ![]() | ![]() |
yay -S shotdock
# or paru -S shotdock
git clone https://github.com/sirrryasir/shotdock.git
cd shotdock
cargo build --release
sudo install -Dm755 target/release/shotdock /usr/local/bin/shotdock
gtk4 & gtk4-layer-shellgrim & slurpimagemagick (ImageMagick 7)wl-clipboardlibnotify (notify-send)hyprpicker: Freeze screen animations during selection (--freeze / -z)tesseract & tesseract-data-eng: OCR text extraction (-t)wf-recorder: Video screen recording (-r, --record-area)satty / swappy: Image annotation editor (-e)rofi: Screen recording target menusudo pacman -S gtk4 gtk4-layer-shell grim slurp imagemagick wl-clipboard libnotify hyprpicker tesseract tesseract-data-eng wf-recorder swappy rofi
sudo dnf install gtk4-devel gtk4-layer-shell-devel grim slurp ImageMagick wl-clipboard libnotify tesseract wf-recorder swappy rofi
| Command | Description |
|---|---|
shotdock -a | Snip region or click window |
shotdock -a --freeze | Snip region with frozen screen |
shotdock -w | Capture window/region with studio framing |
shotdock -f | Capture focused monitor |
shotdock -p | Capture all connected monitors |
shotdock -t | Extract text to clipboard (OCR) |
shotdock -r | Toggle screen recording (interactive selector) |
shotdock --record-area | Start region recording directly |
shotdock frame <file> | Frame an existing image |
shotdock | Open floating dock |
| Flag | Description |
|---|---|
-e, --edit | Open capture in editor (satty or swappy) |
--no-edit | Bypass editor |
--no-shadow | Disable drop shadow in framed capture |
--no-titlebar | Disable window titlebar in framed capture |
-z, --freeze | Freeze screen during area selection |
-c, --clipboard | Copy framed image to clipboard (shotdock frame) |
-o, --output <path> | Specify output path (shotdock frame) |
--theme <name> | Canvas theme preset (shotdock frame) |
# Basic framing
shotdock frame input.png -o framed.png
# Custom theme with clipboard output
shotdock frame screenshot.png -o card.png --theme Sunset -c
# Without titlebar
shotdock frame terminal.png --theme Breeze --no-titlebar -o output.png
hyprland.conf)# Screenshots
bind = SUPER, P, exec, shotdock -a
bind = SUPER CTRL, P, exec, shotdock -a --freeze
bind = SUPER ALT, P, exec, shotdock -w
bind = , Print, exec, shotdock -p
# Utilities
bind = SUPER CTRL, T, exec, shotdock -t
bind = SUPER, R, exec, shotdock -r
bind = SUPER SHIFT, D, exec, shotdock
# Floating dock blur rules
layerrule = blur, shotdock
layerrule = ignorezero, shotdock
config)bindsym $mod+p exec shotdock -a
bindsym $mod+Ctrl+p exec shotdock -a --freeze
bindsym $mod+Alt+p exec shotdock -w
bindsym Print exec shotdock -p
bindsym $mod+Ctrl+t exec shotdock -t
bindsym $mod+r exec shotdock -r
bindsym $mod+Shift+d exec shotdock
config.kdl)binds {
Mod+P { spawn "shotdock" "-a"; }
Mod+Ctrl+P { spawn "shotdock" "-a" "--freeze"; }
Mod+Alt+P { spawn "shotdock" "-w"; }
Print { spawn "shotdock" "-p"; }
Mod+Ctrl+T { spawn "shotdock" "-t"; }
Mod+R { spawn "shotdock" "-r"; }
Mod+Shift+D { spawn "shotdock"; }
}
~/.config/shotdock/config.json:
{
"show_cursor": false,
"freeze": false,
"window_shadow": true,
"macos_titlebar": true,
"canvas_theme": "Transparent",
"timer_seconds": 0,
"save_to_disk": true,
"copy_to_clipboard": true,
"open_in_editor": false,
"save_dir": "~/Pictures/Screenshots",
"editor": null,
"ocr_lang": "eng",
"studio_quality": true,
"record_fps": 60
}
Transparent: Clean alpha PNG with soft drop shadow.FollowSystem: Dynamic gradient matching current wallpaper palette (Wallbash).RealWallpaper: Screenshot centered over blurred desktop wallpaper.Sunset: Rose to Violet gradient (#f43f5e to #8b5cf6).Candy: Vibrant Violet gradient (#ec4899 to #a855f7).Breeze: Cyan to Blue gradient (#06b6d4 to #3b82f6).Raindrop: Ocean to Indigo gradient (#3b82f6 to #6366f1).Midnight: Deep dark slate gradient (#1e1b4b to #0f172a).Forest: Emerald to Mint gradient (#059669 to #10b981).White / Black: Minimalist solid backdrops.14 commits
Rust
96.8%
Shell
3.2%