Skip to content

Conversation

@buildingvibes
Copy link

@buildingvibes buildingvibes commented Feb 9, 2026

Summary

  • Extended DeepLinkAction enum with 6 new actions: PauseRecording, ResumeRecording, TogglePauseRecording, SetCamera, SetMicrophone, TakeScreenshot
  • Created full Raycast extension with 10 commands for controlling Cap from the launcher
  • Refactored resolve_capture_target into shared helper to reduce duplication

Fixes #1540

Test plan

…are#1540)

Extend the existing deeplink system with new actions for controlling
recordings and device switching, then build a Raycast extension that
uses those deeplinks for hands-free Cap control.

New deeplink actions added to DeepLinkAction enum:
- PauseRecording, ResumeRecording, TogglePauseRecording
- SetCamera (switch or disable camera during/before recording)
- SetMicrophone (switch or disable microphone during/before recording)
- TakeScreenshot (capture a screenshot of a specified display/window)

Also refactored the capture target resolution into a shared
resolve_capture_target helper to reduce duplication.

Raycast extension (raycast/) provides commands for:
- Start/Stop/Pause/Resume/Toggle-pause recording
- Switch microphone (lists system audio input devices)
- Switch camera (lists system cameras)
- Take screenshot
- Open settings
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

15 files reviewed, 5 comments

Edit Code Review Agent Settings | Greptile

Remove unused parseMicrophones function and dynamically detect the
primary display name instead of hardcoding "Main Display" so the
deeplinks work on any machine regardless of display naming.
- Use name.as_str() instead of *name deref in resolve_capture_target
- Use ok_or_else for lazy error string allocation
- Convert start-recording and take-screenshot to List views that
  enumerate displays via system_profiler instead of hardcoding
- Update package.json command modes to "view" for display selection
Remove hardcoded "Main Display" fallback in start-recording and
take-screenshot parseDisplays, and remove bogus "FaceTime HD Camera"
fallback in switch-camera. When system_profiler parsing yields no
results, return an empty list instead of guessing names that will
fail on the desktop deeplink handler side.
@buildingvibes buildingvibes force-pushed the fix/deeplinks-and-raycast branch from ddc79ff to 3d8de3e Compare February 9, 2026 06:25
- Tighten DeepLinkAction type to string union for unit actions
- Add exact-match hint to error messages in resolve_capture_target
- Fix license field to match repo (AGPL-3.0-or-later)
@buildingvibes
Copy link
Author

Addressed remaining review feedback:

  • Tightened DeepLinkAction type to use string union for unit actions
  • Added exact-match hint to error messages in resolve_capture_target
  • Fixed license field to match repo (AGPL-3.0-or-later)

Working on a demo video to showcase all commands.

@buildingvibes
Copy link
Author

Demo Video

https://github.com/buildingvibes/Cap/releases/download/demo-videos-cap-pr1587/cap-deeplinks-pr1587.mp4

This demo showcases:

  • Recording control deeplinks: All new deeplink actions (PauseRecording, ResumeRecording, TogglePauseRecording, SetCamera, SetMicrophone, TakeScreenshot)
  • Raycast extension: The 10 new Raycast commands for controlling Cap from the launcher
  • Testing workflow: Shows the integration working end-to-end with real deeplink URLs

The video demonstrates how users can now control Cap recordings through deeplinks, enabling powerful automation and launcher integrations like Raycast.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bounty: Deeplinks support + Raycast Extension

1 participant