Skip to content

add region-recorder - #656

Merged
Noctalia-CI merged 2 commits into
noctalia-dev:mainfrom
h-jangra:main
Sep 7, 2026
Merged

add region-recorder#656
Noctalia-CI merged 2 commits into
noctalia-dev:mainfrom
h-jangra:main

Conversation

@h-jangra

@h-jangra h-jangra commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Plugin

  • Id: h-jangra/region-recorder
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

Region Recorder is a minimal, high-performance Noctalia plugin for region screen recording with interactive slurp selection. It
supports region, focused-window, portal, and fullscreen recording through a bar widget, control center shortcut, and IPC service.

External dependencies

  • slurp — interactive region selection.
  • gpu-screen-recorder, wl-screenrec, or wf-recorder — recording engine; at least one is required.
  • ffmpeg — video processing/encoding.

Testing

Tested the bar widget, control center shortcut, region selection, fullscreen recording, recording stop/finalization, IPC commands,
and plugin settings on Hyprland.

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor:
  • Noctalia version tested against: v5.0.1
  • Plugin API level: 24

Screenshots / Videos

N/A

Checklist

Ready-for-review requirement: Every box in this section must be checked. If any statement is not true, keep the
pull request as Draft. An explanation does not replace a required check.

  • The directory name matches the part of id after the / in plugin.toml exactly.
  • It ships plugin.toml, README.md, thumbnail.webp, and translations/en.json.
  • README.md follows the README template,
    documents every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
  • thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.
  • version follows semver and is bumped in this PR; plugin_api is the oldest API level this plugin requires.
  • Every non-English translation in this PR uses a locale supported by Noctalia core, and I can read, write, and understand that
    language well enough to review and maintain it (no unreviewed machine/LLM translations).
  • I did not edit catalog.toml; CI generates it.
  • This PR touches exactly one plugin directory.

Code review attestation

Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:
Ready-for-review requirement: Every attestation below must be checked.

  • The code is readable and not obfuscated, minified, or generated.
  • It does not download and execute remote code.
  • Every network call, filesystem write, and spawned process is something the description above accounts for.
  • I have the right to publish this code under the license declared in plugin.toml.

@Noctalia-CI

Copy link
Copy Markdown
Contributor

This pull request was converted to a draft because its description is missing required
parts of the pull request template.

Missing:

  • the - **Id:** field
  • the - **Noctalia version tested against:** field
  • the - **Plugin API level:** field
  • the checklist entry: README.md follows the README template, documents every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
  • the checklist entry: thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.

Add the items above to the description, keeping their exact wording, then mark the pull
request ready for review. Draft pull requests may leave boxes unchecked. Before a pull
request is ready for review, exactly one plugin type, at least one tested compositor, and
every item under Checklist and Code review attestation must be checked.

Sections that only offer context may be deleted; nothing else about this pull request was
changed.

@Noctalia-CI
Noctalia-CI marked this pull request as draft September 7, 2026 13:11
@h-jangra
h-jangra marked this pull request as ready for review September 7, 2026 13:25
@Noctalia-CI
Noctalia-CI marked this pull request as draft September 7, 2026 13:25
@Noctalia-CI

Noctalia-CI commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

This draft pull request is missing required parts of
the pull request template.

Missing:

  • the checklist entry: thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.

Add the items above to the description, keeping their exact wording, then mark the pull
request ready for review. Draft pull requests may leave boxes unchecked. Before a pull
request is ready for review, exactly one plugin type, at least one tested compositor, and
every item under Checklist and Code review attestation must be checked.

Sections that only offer context may be deleted; nothing else about this pull request was
changed.

@h-jangra
h-jangra marked this pull request as ready for review September 7, 2026 13:26
@Noctalia-CI

Copy link
Copy Markdown
Contributor

This pull request was converted to a draft because its description is missing required
parts of the pull request template.

Missing:

  • the checklist entry: thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.

Add the items above to the description, keeping their exact wording, then mark the pull
request ready for review. Draft pull requests may leave boxes unchecked. Before a pull
request is ready for review, exactly one plugin type, at least one tested compositor, and
every item under Checklist and Code review attestation must be checked.

Sections that only offer context may be deleted; nothing else about this pull request was
changed.

@Noctalia-CI
Noctalia-CI marked this pull request as draft September 7, 2026 13:26
@h-jangra
h-jangra marked this pull request as ready for review September 7, 2026 13:30
@Noctalia-CI
Noctalia-CI marked this pull request as draft September 7, 2026 13:30
@Noctalia-CI

Noctalia-CI commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

The description now contains the required template structure.

@h-jangra
h-jangra marked this pull request as ready for review September 7, 2026 13:32
@Noctalia-CI

Copy link
Copy Markdown
Contributor
  1. non-blocking - region-recorder/service.luau:170,178
    The video_source options "focused" and "portal" are not implemented. Both select
    values fall through the else branch to startRecordingWithGeometry("screen"),
    the same code path as the explicit "record-fullscreen" action (service.luau:171-172).
    No focused-window or portal capture code path exists anywhere in the plugin; the
    window-snapping helper (scripts/get_windows.sh) only feeds slurp during manual
    region selection. Yet plugin.toml:20-21 offers these values and
    region-recorder/translations/en.json labels them "Focused Monitor" and "XDG
    Desktop Portal", while the PR description advertises "region, focused-window,
    portal, and fullscreen recording". Users selecting those modes silently get a
    fullscreen recording instead of what the setting promises.

  2. non-blocking - region-recorder/service.luau:136-137
    stopRecording() first runs pkill -SIGINT -f . The
    quotes are literal characters in the pkill regex, but the recorder process argv
    contains the path unquoted, so this branch never matches the recorder and the
    fallback pkill -SIGINT -f always fires. Because pkill -f does an
    ERE substring match over the whole command line and scopes to the user's own
    processes, stopping the plugin's recording (or the external-exit detection at
    service.luau:150-160 firing after the plugin's own process died) will also SIGINT
    any unrelated gpu-screen-recorder, wl-screenrec, or wf-recorder session the same
    user is running outside the plugin. Impact is a prematurely stopped concurrent
    recording, not data loss, since SIGINT triggers graceful finalization.

@Noctalia-CI
Noctalia-CI merged commit a6f0645 into noctalia-dev:main Sep 7, 2026
3 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants