sirrryasir/shotdock

Automated window framing, soft drop shadows, and studio screen capture for Wayland

9

stars

14

commits

Rust

primary language

Sep 5, 2026

updated

sirrryasir.github.io/shotdock/
cleanshot
cleanshot-alternative
desktop
gtk4
hyprland
linux
niri
rust
screen-recorder
screenshot
sway
wayland

README

shotdock

Wayland screenshot and screen recording tool with window framing and an optional floating dock.

Supports Hyprland, Sway, River, Niri, and other Wayland compositors.

shotdock demo


Features

  • Area & Window Snip: Interactive region selection with window snapping (slurp).
  • Window Framing: Rounded corners, Gaussian drop shadow, macOS-style titlebar, and gradient canvas backdrops.
  • Offline Framing: Frame existing image files via shotdock frame <file>.
  • Screen Freeze: Freeze screen content during area selection (hyprpicker).
  • Screen Recording: 60 FPS H.264 video recording with monitor, window, or region selector (wf-recorder).
  • OCR Text Extraction: Extract text from screen directly to Wayland clipboard (tesseract).
  • Optional Floating Dock: GTK4 LayerShell toolbar for quick visual access.

Showcase

Canvas BackgroundWindow FramingFloating Dock
Canvas ThemeFramed WindowFloating Dock

Installation

Arch Linux (AUR)

yay -S shotdock
# or paru -S shotdock

From Source

git clone https://github.com/sirrryasir/shotdock.git
cd shotdock
cargo build --release
sudo install -Dm755 target/release/shotdock /usr/local/bin/shotdock

Dependencies

  • gtk4 & gtk4-layer-shell
  • grim & slurp
  • imagemagick (ImageMagick 7)
  • wl-clipboard
  • libnotify (notify-send)

Optional Dependencies

  • 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 menu

Arch Linux

sudo pacman -S gtk4 gtk4-layer-shell grim slurp imagemagick wl-clipboard libnotify hyprpicker tesseract tesseract-data-eng wf-recorder swappy rofi

Fedora

sudo dnf install gtk4-devel gtk4-layer-shell-devel grim slurp ImageMagick wl-clipboard libnotify tesseract wf-recorder swappy rofi

Usage

Commands

CommandDescription
shotdock -aSnip region or click window
shotdock -a --freezeSnip region with frozen screen
shotdock -wCapture window/region with studio framing
shotdock -fCapture focused monitor
shotdock -pCapture all connected monitors
shotdock -tExtract text to clipboard (OCR)
shotdock -rToggle screen recording (interactive selector)
shotdock --record-areaStart region recording directly
shotdock frame <file>Frame an existing image
shotdockOpen floating dock

Flags

FlagDescription
-e, --editOpen capture in editor (satty or swappy)
--no-editBypass editor
--no-shadowDisable drop shadow in framed capture
--no-titlebarDisable window titlebar in framed capture
-z, --freezeFreeze screen during area selection
-c, --clipboardCopy framed image to clipboard (shotdock frame)
-o, --output <path>Specify output path (shotdock frame)
--theme <name>Canvas theme preset (shotdock frame)

Framing Existing Images

# 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

Keybindings

Hyprland (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

Sway (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

Niri (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"; }
}

Configuration

~/.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
}

Canvas Themes

  • 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.

License

MIT

Contributors

sirrryasir

14 commits

sirrryasir/shotdock

Automated window framing, soft drop shadows, and studio screen capture for Wayland

9

stars

14

commits

Rust

primary language

Sep 5, 2026

updated

sirrryasir.github.io/shotdock/
cleanshot
cleanshot-alternative
desktop
gtk4
hyprland
linux
niri
rust
screen-recorder
screenshot
sway
wayland

README

shotdock

Wayland screenshot and screen recording tool with window framing and an optional floating dock.

Supports Hyprland, Sway, River, Niri, and other Wayland compositors.

shotdock demo


Features

  • Area & Window Snip: Interactive region selection with window snapping (slurp).
  • Window Framing: Rounded corners, Gaussian drop shadow, macOS-style titlebar, and gradient canvas backdrops.
  • Offline Framing: Frame existing image files via shotdock frame <file>.
  • Screen Freeze: Freeze screen content during area selection (hyprpicker).
  • Screen Recording: 60 FPS H.264 video recording with monitor, window, or region selector (wf-recorder).
  • OCR Text Extraction: Extract text from screen directly to Wayland clipboard (tesseract).
  • Optional Floating Dock: GTK4 LayerShell toolbar for quick visual access.

Showcase

Canvas BackgroundWindow FramingFloating Dock
Canvas ThemeFramed WindowFloating Dock

Installation

Arch Linux (AUR)

yay -S shotdock
# or paru -S shotdock

From Source

git clone https://github.com/sirrryasir/shotdock.git
cd shotdock
cargo build --release
sudo install -Dm755 target/release/shotdock /usr/local/bin/shotdock

Dependencies

  • gtk4 & gtk4-layer-shell
  • grim & slurp
  • imagemagick (ImageMagick 7)
  • wl-clipboard
  • libnotify (notify-send)

Optional Dependencies

  • 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 menu

Arch Linux

sudo pacman -S gtk4 gtk4-layer-shell grim slurp imagemagick wl-clipboard libnotify hyprpicker tesseract tesseract-data-eng wf-recorder swappy rofi

Fedora

sudo dnf install gtk4-devel gtk4-layer-shell-devel grim slurp ImageMagick wl-clipboard libnotify tesseract wf-recorder swappy rofi

Usage

Commands

CommandDescription
shotdock -aSnip region or click window
shotdock -a --freezeSnip region with frozen screen
shotdock -wCapture window/region with studio framing
shotdock -fCapture focused monitor
shotdock -pCapture all connected monitors
shotdock -tExtract text to clipboard (OCR)
shotdock -rToggle screen recording (interactive selector)
shotdock --record-areaStart region recording directly
shotdock frame <file>Frame an existing image
shotdockOpen floating dock

Flags

FlagDescription
-e, --editOpen capture in editor (satty or swappy)
--no-editBypass editor
--no-shadowDisable drop shadow in framed capture
--no-titlebarDisable window titlebar in framed capture
-z, --freezeFreeze screen during area selection
-c, --clipboardCopy framed image to clipboard (shotdock frame)
-o, --output <path>Specify output path (shotdock frame)
--theme <name>Canvas theme preset (shotdock frame)

Framing Existing Images

# 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

Keybindings

Hyprland (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

Sway (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

Niri (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"; }
}

Configuration

~/.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
}

Canvas Themes

  • 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.

License

MIT

Contributors

sirrryasir

14 commits

Languages

Rust

96.8%

Shell

3.2%