From 3c34ca17b964f1fcd25b1b0cf964968c31c6a69d Mon Sep 17 00:00:00 2001 From: Himanshu <75300696+h-jangra@users.noreply.github.com> Date: Mon, 7 Sep 2026 18:32:39 +0530 Subject: [PATCH 1/2] add region-recorder --- region-recorder/README.md | 71 ++++++++++ region-recorder/plugin.toml | 115 +++++++++++++++ region-recorder/scripts/get_windows.sh | 14 ++ region-recorder/service.luau | 189 +++++++++++++++++++++++++ region-recorder/shortcut.luau | 27 ++++ region-recorder/thumbnail.webp | Bin 0 -> 49372 bytes region-recorder/translations/en.json | 85 +++++++++++ region-recorder/widget.luau | 57 ++++++++ 8 files changed, 558 insertions(+) create mode 100644 region-recorder/README.md create mode 100644 region-recorder/plugin.toml create mode 100644 region-recorder/scripts/get_windows.sh create mode 100644 region-recorder/service.luau create mode 100644 region-recorder/shortcut.luau create mode 100644 region-recorder/thumbnail.webp create mode 100644 region-recorder/translations/en.json create mode 100644 region-recorder/widget.luau diff --git a/region-recorder/README.md b/region-recorder/README.md new file mode 100644 index 00000000..4ef211f3 --- /dev/null +++ b/region-recorder/README.md @@ -0,0 +1,71 @@ +# Region Recorder + +A minimal, high-performance Noctalia plugin for region screen recording with interactive `slurp` selection. + +## Plugin + +| Field | Value | +| --- | --- | +| ID | `h-jangra/region-recorder` | +| Entries | Bar widget: `widget`; shortcut: `toggle`; service: `service` | + +## Requirements + +- `slurp` +- At least one recorder engine: `gpu-screen-recorder`, `wl-screenrec`, or `wf-recorder` +- `ffmpeg` + +## Usage + +### Bar Widget & Shortcut + +- **Bar Widget (`widget`)**: Add `h-jangra/region-recorder:widget` to your bar items in Noctalia settings to select a region and start recording. + - **Left Click**: Toggle region selection / recording. + - **Right Click**: Start full-screen recording directly or stop active recording. +- **Control Center Shortcut (`toggle`)**: Add `h-jangra/region-recorder:toggle` to your control center quick tiles for one-tap region recording. + - **Left Click**: Toggle region recording mode. + - **Right Click**: Start full-screen recording or stop active recording. + +### IPC Commands + +Control the region recorder service directly via IPC: + +```sh +# Toggle region recording +noctalia msg plugin h-jangra/region-recorder:service all toggle + +# Start region selection recording explicitly +noctalia msg plugin h-jangra/region-recorder:service all select-region + +# Start fullscreen recording explicitly +noctalia msg plugin h-jangra/region-recorder:service all record-fullscreen + +# Stop active recording +noctalia msg plugin h-jangra/region-recorder:service all stop +``` + +## Settings + +Configure Region Recorder in **Noctalia Settings → Plugins → Region Recorder**: + +| Setting | Type | Default | Description | +| --- | --- | --- | --- | +| `video_source` | `select` | `region` | Default source mode for recording (`region`, `focused`, `portal`). | +| `directory` | `folder` | `~/Videos/Recordings` | Directory where recorded video files are saved. | +| `filename_pattern` | `string` | `recording_%Y%m%d_%H%M%S` | Strftime format string for output file names. | +| `frame_rate` | `int` | `60` | Target framerate (FPS) for recording (`1` – `240`). | +| `framerate_mode` | `select` | `cfr` | Framerate mode (`cfr`, `vfr`, `content`). `cfr` (Constant Frame Rate) is editor-friendly and required by editors like Kdenlive. | +| `video_codec` | `select` | `h264` | Video encoding codec (`h264`, `hevc`, `av1`). | +| `audio_source` | `select` | `none` | Audio stream to record (`none`, `default_output`, `default_input`, `both`). | +| `show_cursor` | `bool` | `true` | Include mouse cursor in the screen recording. | +| `copy_to_clipboard` | `bool` | `false` | Copy `file://` path URI to clipboard when recording completes. | +| `hide_inactive` | `bool` | `false` | Hide the bar widget when not actively selecting or recording. | + +## Notes + +- **Process Management**: Recording processes receive `SIGINT` on stop to ensure MP4 video files are properly finalized and playable. +- **Window Snapping**: When `slurp` is invoked on Hyprland or Sway, window boundaries are queried via `hyprctl` / `swaymsg` to enable snapping to individual windows. + +## License + +MIT © [Himanshu Jangra](https://github.com/h-jangra) diff --git a/region-recorder/plugin.toml b/region-recorder/plugin.toml new file mode 100644 index 00000000..309470c2 --- /dev/null +++ b/region-recorder/plugin.toml @@ -0,0 +1,115 @@ +id = "h-jangra/region-recorder" +name = "Region Recorder" +version = "0.1.0" +plugin_api = 3 +author = "h-jangra" +license = "MIT" +dependencies = ["slurp", "gpu-screen-recorder", "wl-screenrec", "wf-recorder", "ffmpeg"] +tags = ["recording", "video", "utility", "bar", "shortcut", "service"] +icon = "crop" +description = "Minimal region screen recorder for Noctalia." + +[[setting]] +key = "video_source" +type = "select" +label_key = "settings.video_source.label" +description_key = "settings.video_source.description" +default = "region" +options = [ + { value = "region", label_key = "settings.video_source.options.region" }, + { value = "focused", label_key = "settings.video_source.options.focused" }, + { value = "portal", label_key = "settings.video_source.options.portal" }, +] + +[[setting]] +key = "directory" +type = "folder" +label_key = "settings.directory.label" +description_key = "settings.directory.description" +default = "~/Videos/Recordings" + +[[setting]] +key = "filename_pattern" +type = "string" +label_key = "settings.filename_pattern.label" +description_key = "settings.filename_pattern.description" +default = "recording_%Y%m%d_%H%M%S" + +[[setting]] +key = "frame_rate" +type = "int" +label_key = "settings.frame_rate.label" +description_key = "settings.frame_rate.description" +default = 60 +min = 1 +max = 240 + +[[setting]] +key = "framerate_mode" +type = "select" +label_key = "settings.framerate_mode.label" +description_key = "settings.framerate_mode.description" +default = "cfr" +options = [ + { value = "cfr", label_key = "settings.framerate_mode.options.cfr" }, + { value = "vfr", label_key = "settings.framerate_mode.options.vfr" }, + { value = "content", label_key = "settings.framerate_mode.options.content" }, +] + +[[setting]] +key = "video_codec" +type = "select" +label_key = "settings.video_codec.label" +description_key = "settings.video_codec.description" +default = "h264" +options = [ + { value = "h264", label_key = "settings.video_codec.options.h264" }, + { value = "hevc", label_key = "settings.video_codec.options.hevc" }, + { value = "av1", label_key = "settings.video_codec.options.av1" }, +] + +[[setting]] +key = "audio_source" +type = "select" +label_key = "settings.audio_source.label" +description_key = "settings.audio_source.description" +default = "none" +options = [ + { value = "none", label_key = "settings.audio_source.options.none" }, + { value = "default_output", label_key = "settings.audio_source.options.default_output" }, + { value = "default_input", label_key = "settings.audio_source.options.default_input" }, + { value = "both", label_key = "settings.audio_source.options.both" }, +] + +[[setting]] +key = "show_cursor" +type = "bool" +label_key = "settings.show_cursor.label" +description_key = "settings.show_cursor.description" +default = true + +[[setting]] +key = "copy_to_clipboard" +type = "bool" +label_key = "settings.copy_to_clipboard.label" +description_key = "settings.copy_to_clipboard.description" +default = false + +[[setting]] +key = "hide_inactive" +type = "bool" +label_key = "settings.hide_inactive.label" +description_key = "settings.hide_inactive.description" +default = false + +[[service]] +id = "service" +entry = "service.luau" + +[[widget]] +id = "widget" +entry = "widget.luau" + +[[shortcut]] +id = "toggle" +entry = "shortcut.luau" diff --git a/region-recorder/scripts/get_windows.sh b/region-recorder/scripts/get_windows.sh new file mode 100644 index 00000000..581bac70 --- /dev/null +++ b/region-recorder/scripts/get_windows.sh @@ -0,0 +1,14 @@ +#!/bin/sh +if command -v hyprctl >/dev/null 2>&1; then + if command -v jq >/dev/null 2>&1; then + hyprctl clients -j 2>/dev/null | jq -r '.[] | select(.mapped == true and .hidden == false) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' + elif command -v python3 >/dev/null 2>&1; then + hyprctl clients -j 2>/dev/null | python3 -c 'import sys, json; [print(f"{c[\"at\"][0]},{c[\"at\"][1]} {c[\"size\"][0]}x{c[\"size\"][1]}") for c in json.load(sys.stdin) if c.get("mapped") and not c.get("hidden")]' + fi +elif command -v swaymsg >/dev/null 2>&1; then + if command -v jq >/dev/null 2>&1; then + swaymsg -t get_tree 2>/dev/null | jq -r '.. | select(.pid? and .visible? and .rect?) | "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)"' + elif command -v python3 >/dev/null 2>&1; then + swaymsg -t get_tree 2>/dev/null | python3 -c 'import sys, json; fn=lambda n: [print(f"{n[\"rect\"][\"x\"]},{n[\"rect\"][\"y\"]} {n[\"rect\"][\"width\"]}x{n[\"rect\"][\"height\"]}") if isinstance(n, dict) and n.get("pid") and n.get("visible") and "rect" in n else None, [fn(v) for v in (n.values() if isinstance(n, dict) else n if isinstance(n, list) else [])]]; fn(json.load(sys.stdin))' + fi +fi diff --git a/region-recorder/service.luau b/region-recorder/service.luau new file mode 100644 index 00000000..51b9e9df --- /dev/null +++ b/region-recorder/service.luau @@ -0,0 +1,189 @@ +--!nonstrict +-- Region Recorder — Headless Background Service + +noctalia.setUpdateInterval(250) + +local state = "idle" -- idle | selecting | recording +local isAvailable = false +local outputPath = "" +local recordingProcessName = "" +local tickCount = 0 +local CHECK_TICKS = 8 + +local function cfg(key) return noctalia.getConfig(key) end +local function log(msg) noctalia.log(`region_recorder: {msg}`) end +local function shellQuote(val) return "'" .. tostring(val):gsub("'", [["'"']]) .. "'" end + +local function publishStatus() + noctalia.state.set("status", { state = state, available = isAvailable, outputPath = outputPath }) +end + +local function setState(nextState) + if state == nextState then return end + state = nextState + publishStatus() +end + +local function checkAvailability() + local hasSlurp = noctalia.commandExists("slurp") + local hasGSR = noctalia.commandExists("gpu-screen-recorder") + local hasWl = noctalia.commandExists("wl-screenrec") + local hasWf = noctalia.commandExists("wf-recorder") + return hasSlurp and (hasGSR or hasWl or hasWf) +end + +local function outputDirectory() + local configured = cfg("directory") + local dir = noctalia.expandPath(if configured == "" or configured == nil then "~/Videos/Recordings" else configured) + if dir:sub(-1) ~= "/" then dir ..= "/" end + noctalia.mkdirAll(dir) + return dir +end + +local function copyToClipboard(path) + local escapedPath = path:gsub(" ", "%%20"):gsub("'", "%%27"):gsub('"', "%%22") + noctalia.copyToClipboard(`file://{escapedPath}`, "text/uri-list") +end + +local function buildRecordCommand(geom, targetPath) + local fps = cfg("frame_rate") or 60 + local framerateMode = cfg("framerate_mode") or "cfr" + local codec = cfg("video_codec") or "h264" + local cursor = if cfg("show_cursor") then "yes" else "no" + local audioSource = cfg("audio_source") or "none" + + if noctalia.commandExists("gpu-screen-recorder") then + recordingProcessName = "gpu-screen-recorder" + local audioFlags = "" + if audioSource == "both" then audioFlags = '-a "default_output|default_input" -ac aac' + elseif audioSource == "default_output" then audioFlags = "-a default_output -ac aac" + elseif audioSource == "default_input" then audioFlags = "-a default_input -ac aac" + end + + local targetFlag = "-w screen" + if geom and geom ~= "" and geom ~= "screen" then + local gx, gy, gw, gh = tostring(geom):match("^(%d+),(%d+) (%d+)x(%d+)$") + if gx and gy and gw and gh then targetFlag = string.format("-w %sx%s+%s+%s", gw, gh, gx, gy) end + end + + return string.format("gpu-screen-recorder %s -f %d -fm %s -k %s -cursor %s -cr limited %s -v no -o %s", targetFlag, fps, framerateMode, codec, cursor, audioFlags, shellQuote(targetPath)) + elseif noctalia.commandExists("wl-screenrec") then + recordingProcessName = "wl-screenrec" + local wlCodec = if codec == "h264" then "avc" else codec + local parts = { "wl-screenrec", string.format("-f %s", shellQuote(targetPath)), string.format("-m %d", fps), string.format("--codec %s", wlCodec) } + if framerateMode == "cfr" then table.insert(parts, "--no-damage") end + if geom and geom ~= "" and geom ~= "screen" then table.insert(parts, string.format("-g %s", shellQuote(geom))) end + if not cfg("show_cursor") then table.insert(parts, "--no-cursor") end + if audioSource ~= "none" then table.insert(parts, "--audio") end + return table.concat(parts, " ") + elseif noctalia.commandExists("wf-recorder") then + recordingProcessName = "wf-recorder" + local parts = { "wf-recorder", string.format("-f %s", shellQuote(targetPath)), string.format("-r %d", fps), string.format("-c %s", codec) } + if geom and geom ~= "" and geom ~= "screen" then table.insert(parts, string.format("-g %s", shellQuote(geom))) end + if audioSource ~= "none" then table.insert(parts, "-a") end + return table.concat(parts, " ") + end + return "" +end + +local function startRecordingWithGeometry(geom) + local dir = outputDirectory() + local pattern = cfg("filename_pattern") or "recording_%Y%m%d_%H%M%S" + local filename = `{noctalia.formatTime(pattern)}.mp4` + outputPath = `{dir}{filename}` + + local cmd = buildRecordCommand(geom, outputPath) + if cmd == "" then + setState("idle") + noctalia.notifyError(noctalia.tr("notify.recording_failed"), noctalia.tr("notify.no_recorder")) + return + end + + log(`executing recorder: {cmd}`) + if noctalia.runAsync(cmd) then + setState("recording") + else + setState("idle") + outputPath = "" + noctalia.notifyError(noctalia.tr("notify.recording_failed")) + end +end + +local function startSlurpSelection() + if not isAvailable or state ~= "idle" then return end + setState("selecting") + log("starting slurp region selection...") + + local scriptPath = `{noctalia.pluginDir()}/scripts/get_windows.sh` + local slurpCmd = string.format("sleep 0.2 && ( sh '%s' 2>/dev/null | slurp -f '%%x,%%y %%wx%%h' )", scriptPath) + + noctalia.runAsync(slurpCmd, function(res) + if state ~= "selecting" then return end + if res.exitCode == 0 and res.stdout and res.stdout:match("%d+,%d+ %d+x%d+") then + local geom = res.stdout:match("%d+,%d+ %d+x%d+") + log(`slurp selected region: {geom}`) + startRecordingWithGeometry(geom) + else + log("slurp selection cancelled or empty") + setState("idle") + end + end) +end + +local function stopRecording() + if state ~= "recording" then return end + log(`stopping recording process for {outputPath}`) + local targetEscaped = shellQuote(outputPath) + noctalia.runAsync(string.format("pkill -SIGINT -f %s 2>/dev/null || pkill -SIGINT -f %s 2>/dev/null || true", targetEscaped, shellQuote(recordingProcessName))) + + local savedPath = outputPath + setState("idle") + noctalia.runAsync(string.format("sleep 0.5; test -s %s", targetEscaped), function(res) + if res.exitCode == 0 then + log(`recording saved successfully: {savedPath}`) + noctalia.notify(noctalia.tr("notify.recording_saved"):format(savedPath), savedPath) + if cfg("copy_to_clipboard") then copyToClipboard(savedPath) end + else + log("recording process stopped, file empty or missing") + end + outputPath = "" + end) +end + +function update() + tickCount += 1 + if state == "recording" and tickCount % CHECK_TICKS == 0 and outputPath ~= "" then + noctalia.processMatches(function(matched) + if not matched and state == "recording" then + log("recording process exited externally") + stopRecording() + end + end, recordingProcessName, outputPath) + end +end + +local function handleCommand(cmd) + local action = if type(cmd) == "table" and cmd.action ~= nil then cmd.action else cmd + if type(action) ~= "string" then return end + + if action == "start" or action == "select-region" then + if (cfg("video_source") or "region") == "region" or action == "select-region" then startSlurpSelection() else startRecordingWithGeometry("screen") end + elseif action == "record-fullscreen" then + startRecordingWithGeometry("screen") + elseif action == "stop" then + stopRecording() + elseif action == "toggle" then + if state == "recording" then stopRecording() + elseif state == "idle" then + if (cfg("video_source") or "region") == "region" then startSlurpSelection() else startRecordingWithGeometry("screen") end + end + end +end + +function onIpc(event, payload) + handleCommand(if type(payload) == "table" and payload.action ~= nil then payload else event) +end + +isAvailable = checkAvailability() +publishStatus() +noctalia.state.watch("command", handleCommand) diff --git a/region-recorder/shortcut.luau b/region-recorder/shortcut.luau new file mode 100644 index 00000000..5fa76ba8 --- /dev/null +++ b/region-recorder/shortcut.luau @@ -0,0 +1,27 @@ +--!nonstrict +-- Region Recorder — Quick Tile + +local function applyStatus(status) + local st = if type(status) == "table" and status.state then status.state else "idle" + local available = type(status) == "table" and status.available == true + + local labels = { + recording = noctalia.tr("shortcut.recording") or "Stop Recording", + selecting = noctalia.tr("shortcut.selecting") or "Selecting...", + } + shortcut.setLabel(labels[st] or (noctalia.tr("shortcut.idle") or "Record Region")) + shortcut.setIcon(if available then (if st == "recording" then "disc" elseif st == "selecting" then "crosshair" else "crop") else "video-off") + shortcut.setActive(st == "recording" or st == "selecting") + shortcut.setEnabled(available) +end + +applyStatus(noctalia.state.get("status")) +noctalia.state.watch("status", applyStatus) + +function onClick() + noctalia.state.set("command", { action = "toggle", focusedOutputName = noctalia.focusedOutputName() }) +end + +function onRightClick() + noctalia.state.set("command", { action = "record-fullscreen", focusedOutputName = noctalia.focusedOutputName() }) +end diff --git a/region-recorder/thumbnail.webp b/region-recorder/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..61beffed7c688497b93f03e3788df40324a8e5a2 GIT binary patch literal 49372 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 Date: Mon, 7 Sep 2026 18:39:29 +0530 Subject: [PATCH 2/2] update plugin api --- region-recorder/plugin.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/region-recorder/plugin.toml b/region-recorder/plugin.toml index 309470c2..601fb07f 100644 --- a/region-recorder/plugin.toml +++ b/region-recorder/plugin.toml @@ -1,7 +1,7 @@ id = "h-jangra/region-recorder" name = "Region Recorder" version = "0.1.0" -plugin_api = 3 +plugin_api = 24 author = "h-jangra" license = "MIT" dependencies = ["slurp", "gpu-screen-recorder", "wl-screenrec", "wf-recorder", "ffmpeg"]