Not just screenshots like hyprshot, but also recording videos of part of the screen. I used to use spectacle but there’s no way without kwin.

  • cobwoms@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    4
    ·
    4 months ago

    i have this script on a keybind.

    uses rofi, slurp and gpu-screen-recorder

    modify as needed. i dont remember where i got it from originally

    #!/bin/env bash
    
    recorder_check() {
    	if pgrep -x "gpu-screen-reco" > /dev/null; then
    			pkill -INT -x gpu-screen-reco
    			notify-send "Stopping all instances of gpu-screen-recorder" "$(cat /tmp/recording.txt)"
    			cat /tmp/recording.txt | wl-copy
    			exit 0
    	fi
    }
    
    recorder_check
    
    SELECTION=$(echo -e "record selection\nrecord eDP-1\nrecord DP-4" | rofi -dmenu -p "󰄀 ")
    
    VID="${HOME}/video/recordings/$(date +%Y-%m-%d_%H-%m-%s).mp4"
    
    case "$SELECTION" in
    	"record selection")
    		echo "$VID" > /tmp/recording.txt
        # Get selection geometry
        read X Y W H <<< $(slurp -f "%x %y %w %h")
    
        # Get monitor info (JSON)
        MONITORS=$(hyprctl monitors -j)
    
        # Find the monitor containing the selection and extract its scale
        SCALE=$(echo "$MONITORS" | jq -r \
          --argjson x "$X" --argjson y "$Y" '
          .[] | select(.x <= $x and .y <= $y and
                       ($x < (.x + .width)) and
                       ($y < (.y + .height))) | .scale')
    
        # Calculate physical coordinates
        PX=$(awk "BEGIN {printf \"%d\", $X * $SCALE}")
        PY=$(awk "BEGIN {printf \"%d\", $Y * $SCALE}")
        PW=$(awk "BEGIN {printf \"%d\", $W * $SCALE}")
        PH=$(awk "BEGIN {printf \"%d\", $H * $SCALE}")
    
        # Format geometry string
        GEOM="${PW}x${PH}+${PX}+${PY}"
    		gpu-screen-recorder -w region -region "$GEOM" -o "$VID" &>/dev/null
    		;;
    	"record eDP-1")
    		echo "$VID" > /tmp/recording.txt
        gpu-screen-recorder -w eDP-1 -o "$VID" &>/dev/null
    		;;
    	"record DP-4")
    		echo "$VID" > /tmp/recording.txt
        gpu-screen-recorder -w DP-4 -o "$VID" &>/dev/null
    	;;
    "record both screens")
    	notify-send "recording both screens is not functional"
    	;;
    *)
    	;;
    esac
    
  • ☭SaltyIcetea☭@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 month ago

    Video recording:
    OBS (specifically the replaybuffer for clips)
    (i am using obs-cmd 'cause i never got the global hotkeys to work. idk why)

    run it on startup so its ready for clips
    exec-once = obs --minimize-to-tray --startreplaybuffer

    save replay buffer (it keeps runnig after save)
    bind = , F9, exec, obs-cmd replay save

    start recording, or stop and save recording if it is already active
    bind = , F10, exec, obs-cmd recording toggle

    Screenshots:
    hyprshot.
    (0xff61 is the “print screen” key)

    whole (active) monitor
    bind = , 0xff61, exec, hyprshot --mode active --mode output --output-folder ~/Pictures/Screenshots

    select region (dragged by mouse):
    bind = SHIFT, 0xff61, exec, hyprshot --mode region --output-folder ~/Pictures/Screenshots

    current (active) window
    bind = CTRL, 0xff61, exec, hyprshot --mode active --mode window --output-folder ~/Pictures/Screenshots