From aebe0de3924d4870032128f65437d8fbbaa6a1a5 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:08:47 -0500 Subject: [PATCH 01/15] Create package.json --- extensions/raycast/package.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 extensions/raycast/package.json diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/extensions/raycast/package.json @@ -0,0 +1 @@ + From 710e23713067817880aaf183c43b8ee2416dff7c Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:10:11 -0500 Subject: [PATCH 02/15] Add Cap Screen Recorder extension Added a new Raycast extension for Cap Screen Recorder with commands to start and stop recordings and open the dashboard. --- extensions/raycast/package.json | 62 ++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json index 8b137891791..1e4e58eb3cf 100644 --- a/extensions/raycast/package.json +++ b/extensions/raycast/package.json @@ -1 +1,61 @@ - +{ + "$schema": "https://www.raycast.com/schemas/extension.json", + "name": "cap-screen-recorder", + "title": "Cap Screen Recorder", + "description": "Start and stop Cap.so recordings and open your Cap dashboard directly from Raycast.", + "icon": "cap-icon.png", + "author": "CapSoftware", + "categories": ["Media", "Productivity", "Developer Tools"], + "license": "MIT", + "commands": [ + { + "name": "start-recording", + "title": "Start Recording", + "description": "Start a new Cap screen recording with your default capture settings", + "mode": "no-view" + }, + { + "name": "stop-recording", + "title": "Stop Recording", + "description": "Stop the active Cap recording and copy the shareable video link", + "mode": "no-view" + }, + { + "name": "open-dashboard", + "title": "Open Cap Dashboard", + "description": "Open your Cap.so web dashboard in the default browser", + "mode": "no-view" + } + ], + "preferences": [ + { + "name": "captureMode", + "title": "Default Capture Mode", + "description": "Default recording mode when invoking Start Recording", + "type": "dropdown", + "required": false, + "default": "fullscreen", + "data": [ + { "title": "Full Screen", "value": "fullscreen" }, + { "title": "Window", "value": "window" }, + { "title": "Area", "value": "area" } + ] + }, + { + "name": "dashboardUrl", + "title": "Cap Dashboard URL", + "description": "Your Cap web instance URL (defaults to https://cap.so/dashboard)", + "type": "textfield", + "required": false, + "default": "https://cap.so/dashboard" + } + ], + "dependencies": { + "@raycast/api": "^1.83.1" + }, + "devDependencies": { + "@raycast/eslint-config": "^1.0.11", + "@types/node": "20.8.10", + "typescript": "^5.4.5" + } +} From c6c3d759c546aade64d8a138e7fb9be8e08f14c3 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:36:56 -0500 Subject: [PATCH 03/15] Add start-recording command for Raycast extension --- extensions/raycast/src/start-recording.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 extensions/raycast/src/start-recording.ts diff --git a/extensions/raycast/src/start-recording.ts b/extensions/raycast/src/start-recording.ts new file mode 100644 index 00000000000..11664b74f13 --- /dev/null +++ b/extensions/raycast/src/start-recording.ts @@ -0,0 +1,12 @@ +import { closeMainWindow, getPreferenceValues, open, showHUD } from "@raycast/api"; + +interface Preferences { + captureMode?: "fullscreen" | "window" | "area"; +} + +export default async function Command() { + const { captureMode = "fullscreen" } = getPreferenceValues(); + await closeMainWindow(); + await open(`cap://start-recording?mode=${encodeURIComponent(captureMode)}`); + await showHUD(`Cap recording started (${captureMode})`); +} From cba35d8d55b8c5fa86f4f9989fe92c886ed48115 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:37:51 -0500 Subject: [PATCH 04/15] Add stop recording command for Raycast extension --- extensions/raycast/src/stop-recording.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 extensions/raycast/src/stop-recording.ts diff --git a/extensions/raycast/src/stop-recording.ts b/extensions/raycast/src/stop-recording.ts new file mode 100644 index 00000000000..5b18b50173d --- /dev/null +++ b/extensions/raycast/src/stop-recording.ts @@ -0,0 +1,7 @@ +import { closeMainWindow, open, showHUD } from "@raycast/api"; + +export default async function Command() { + await closeMainWindow(); + await open("cap://stop-recording"); + await showHUD("Cap recording stopped"); +} From 352d6a7d559ed12d681b282cc34a55c469a370ca Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:38:38 -0500 Subject: [PATCH 05/15] Add open-dashboard command to open a URL --- extensions/raycast/src/open-dashboard.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 extensions/raycast/src/open-dashboard.ts diff --git a/extensions/raycast/src/open-dashboard.ts b/extensions/raycast/src/open-dashboard.ts new file mode 100644 index 00000000000..0a7ecab4285 --- /dev/null +++ b/extensions/raycast/src/open-dashboard.ts @@ -0,0 +1,12 @@ +import { closeMainWindow, getPreferenceValues, open } from "@raycast/api"; + +interface Preferences { + dashboardUrl?: string; +} + +export default async function Command() { + const { dashboardUrl = "https://cap.so/dashboard" } = getPreferenceValues(); + const targetUrl = dashboardUrl.trim() || "https://cap.so/dashboard"; + await closeMainWindow(); + await open(targetUrl); +} From 54759148d762658eeeb9eb5fc4886dd5d9c7b903 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:39:36 -0500 Subject: [PATCH 06/15] Add cap-icon.svg asset for Raycast extension --- extensions/raycast/assets/cap-icon.svg | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 extensions/raycast/assets/cap-icon.svg diff --git a/extensions/raycast/assets/cap-icon.svg b/extensions/raycast/assets/cap-icon.svg new file mode 100644 index 00000000000..b8b5b88a913 --- /dev/null +++ b/extensions/raycast/assets/cap-icon.svg @@ -0,0 +1,5 @@ + + + + + From 891c4241e2c64e5d6078d72c9ea11dfbbba4dc18 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Fri, 6 Nov 2026 16:40:28 -0500 Subject: [PATCH 07/15] Change icon format from PNG to SVG Updated the icon file from 'cap-icon.png' to 'cap-icon.svg' in the package.json for the Raycast extension. --- extensions/raycast/package.json | 118 ++++++++++++++++---------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json index 1e4e58eb3cf..c1bf2778f9f 100644 --- a/extensions/raycast/package.json +++ b/extensions/raycast/package.json @@ -1,61 +1,61 @@ { - "$schema": "https://www.raycast.com/schemas/extension.json", - "name": "cap-screen-recorder", - "title": "Cap Screen Recorder", - "description": "Start and stop Cap.so recordings and open your Cap dashboard directly from Raycast.", - "icon": "cap-icon.png", - "author": "CapSoftware", - "categories": ["Media", "Productivity", "Developer Tools"], - "license": "MIT", - "commands": [ - { - "name": "start-recording", - "title": "Start Recording", - "description": "Start a new Cap screen recording with your default capture settings", - "mode": "no-view" - }, - { - "name": "stop-recording", - "title": "Stop Recording", - "description": "Stop the active Cap recording and copy the shareable video link", - "mode": "no-view" - }, - { - "name": "open-dashboard", - "title": "Open Cap Dashboard", - "description": "Open your Cap.so web dashboard in the default browser", - "mode": "no-view" - } - ], - "preferences": [ - { - "name": "captureMode", - "title": "Default Capture Mode", - "description": "Default recording mode when invoking Start Recording", - "type": "dropdown", - "required": false, - "default": "fullscreen", - "data": [ - { "title": "Full Screen", "value": "fullscreen" }, - { "title": "Window", "value": "window" }, - { "title": "Area", "value": "area" } - ] - }, - { - "name": "dashboardUrl", - "title": "Cap Dashboard URL", - "description": "Your Cap web instance URL (defaults to https://cap.so/dashboard)", - "type": "textfield", - "required": false, - "default": "https://cap.so/dashboard" - } - ], - "dependencies": { - "@raycast/api": "^1.83.1" - }, - "devDependencies": { - "@raycast/eslint-config": "^1.0.11", - "@types/node": "20.8.10", - "typescript": "^5.4.5" - } + "$schema": "https://www.raycast.com/schemas/extension.json", + "name": "cap-screen-recorder", + "title": "Cap Screen Recorder", + "description": "Start and stop Cap.so recordings and open your Cap dashboard directly from Raycast.", + "icon": "cap-icon.svg", + "author": "CapSoftware", + "categories": ["Media", "Productivity", "Developer Tools"], + "license": "MIT", + "commands": [ + { + "name": "start-recording", + "title": "Start Recording", + "description": "Start a new Cap screen recording with your default capture settings", + "mode": "no-view" + }, + { + "name": "stop-recording", + "title": "Stop Recording", + "description": "Stop the active Cap recording and copy the shareable video link", + "mode": "no-view" + }, + { + "name": "open-dashboard", + "title": "Open Cap Dashboard", + "description": "Open your Cap.so web dashboard in the default browser", + "mode": "no-view" + } + ], + "preferences": [ + { + "name": "captureMode", + "title": "Default Capture Mode", + "description": "Default recording mode when invoking Start Recording", + "type": "dropdown", + "required": false, + "default": "fullscreen", + "data": [ + { "title": "Full Screen", "value": "fullscreen" }, + { "title": "Window", "value": "window" }, + { "title": "Area", "value": "area" } + ] + }, + { + "name": "dashboardUrl", + "title": "Cap Dashboard URL", + "description": "Your Cap web instance URL (defaults to https://cap.so/dashboard)", + "type": "textfield", + "required": false, + "default": "https://cap.so/dashboard" + } + ], + "dependencies": { + "@raycast/api": "^1.83.1" + }, + "devDependencies": { + "@raycast/eslint-config": "^1.0.11", + "@types/node": "20.8.10", + "typescript": "^5.4.5" + } } From dcc0633cbb85849ed57bf39f683a66f8fcfb7afd Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:21:49 -0500 Subject: [PATCH 08/15] fix(raycast): add 512x512 cap-icon.png asset for Raycast manifest --- extensions/raycast/assets/cap-icon.png | Bin 0 -> 5530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 extensions/raycast/assets/cap-icon.png diff --git a/extensions/raycast/assets/cap-icon.png b/extensions/raycast/assets/cap-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6aaf08f19ab2a77a2513c0c17ccf290a533db9 GIT binary patch literal 5530 zcmbVQc|4Ts+rOS+7-I?)*q0-+6j3=P zN^&d{C0pg3IwX~mP$*M&V`koGrt|Clo!|S%`+nZP=K9=oJ>TozuKWAFuAiM9H!UEl z5dmPqW_w##032rGfFOnaOoY6c15nz(*>;0_NY1A>4wbKM7vr6~+icKNcNv5=nMWGS z@}KNILg=`@wmtGlh>jz#cHUmKpenCcn%(Li^?5yUz>Koidake7O6bW~g^e@)U1L_I z0#c2y%VGsC2$!EXp?LZ`H?EB=iUH4IGnQ&AkEz*1M zon=updO$0Cd~b;~W;wR9!&g0BaF&uUWyc9$)v8n==bUZIjh4MF6M-HjM-JlYT#1R! z`-D65@6J+C|7CIX8%BmRNL8_$!l5sAcq=$_LJvpT$wIrMF#BY4LivK?#&?LZ*I&=k zAg?W431gePTF%2tC|8=1aYWVa@)P$xWH@kxsg@*=q|Zn&D~a8y)!@DhAgDEW12xgO z-0K7!X_?ug@kR#wNaJFBciMIEsbRxJ(#k8YOFevkFM)}SzI6JGBJ|18*Q%BqoIskH z2*R=a!^|)MIUmsnoaAPY#pPgI$AGd;FSg3=gv*|KV6K0lGFl%LjN~C+er10H89k&d z1smhiPHGbAg|av>vumjtz-zQd16pC*TvvqGXut!iw8M{6jw_pslVBe)s976>eud37Pc;;zUF>Frhx-7Wf;*_-7Nx<%}lQ(+oBTQ32SbL=OCJ0SlC}} z7rV5tG4+oni(H0O((ijBK({ec1}7mfZz^<;NCK$+bPYo0q|r5=PdJTYgx$A%Ztn!> z=qSK(K2qR-`NbATQOq}Dz=uK0vo8S#^E(kOX2JQx$2R_m02-6K3UURAMx~|4Co$@E zG3wIXCjq(`RuXp47g!oXf)LTj^egX?0a$(Fp4cTv-M2~+;E=rt<>+E~EQF+|A7wo~8H#lAc7Y#s|rKK8_a|6UxL?*=tO zY4p|2inpTBg`x$BfW!vn-V-@M^5Yx^#VaBIYcl`Spv|nqc7pPcm|}cU@c)a^QT!JL zR7R$~>awSL1z(2huk!Cj2G8~)Hd&0OS^2`CD==`8R=L*TO$Fog9af2^aLWxicx#rWFC<`o@PLx2g(W+1 zmlx#4nnEHKxG3kDg96$^hN=zRt^xvk4-vv_xLrjAwlWa{tn0OX(a&VqtvIiTJ282D zQX1VJWz}<#(vhhMuS~f2A038EdT>W`CNx8fE=`01nTP~e$&&VCpto&ioXCr9%>n0> z2Tu+;N|bCw^2raL1zdpbA$YoKL!Q}7KleUKbb{owV<* z3`$D+PAK%|EK1*r^LZzUx<^?hcjx(BhNPIjEmBid4-6(mO5YK2;ax>5 zvi}#W8#PVu3qam_n(;w}&{@-aQ85n34qA4O&1JRG&|oSU{&o1nlBs7EMhqGr^{pm_ zN(ju)NDjKduFG?bbsdi@{1}FK^!ax6_c1eJQ*!YIz`TCFv4=y;tChUv0_NKuMF#G= z<>&Rlgb2kYYYP{A2pKhbxd~xZZ#mcPobW8-+>jn@-R`Thb%{+x3$RIfo0oOYXV)K|8TWY5-Vt*A#B zC8aj{!N$z^+AXIYL8XbVlUh2GJ4w@4$D^9%3yVrM*(x4gRwMk4h7pqX4j$50{j-r8 z`_>~I-)^a5?vQ2olwBn+A%qN`DS-svC0}z4dIZgI8NEtM%^BUpCvDQ7(3zI zzGj7~1%FXtY0ALIX89o{k13}NUh*z7oN6--C?_2|&{m#U{yOtv0hBppXr}reO0~)0 zrws^}OX1O=a*}`0?OWLW;2c)XT}3*4u(hn-^mXyWeBh>$Y;+o#E9yx+!$yAVPejo1 zQE7d#zuqMh$F}(+Zw1MF$N9Rk%f0tXiy>+Egyz=3DM}U+ICklVex$ZQmv)k9l{xg1zq7vLYj1N&p$&4qQWqnO5VuPB*Mzw2$haClriX841@3 z__unc!cx>D=4XxeJE&12WusyA;#k9sli zvCw$z%I z-kmJ1>TP*!fL^^L2-TPBJd*AuW6KdLbfhXm#*Nh>QNq3HH;)yCJ2?`8Ijs9fxpw``adnc<+G6i?__X_Q& zHx$mY!-%ldT{BF-Y#}oq$6l12`%{Aa54U~15=W;c)>GjZ^S4X1&%AW^-PdHSJLe4M z`v!}bX)5j+oNNj6N=n6nQ|r=Imv-rfB;Y!1)4VO6)-(5{@w8iO7_0D*%eiK%Jc1WL ze8w#;)epk4MEp6Z=6?~}#n z8;^}mDJ-8f`!J|Y_p3Sj+U;|!}uZv%k~7LzLTG|54ymGuZ@?6 z)-U|rQf>9j;@V~r7h|fZlkHqD z{Q71%5q$60t87N}1|R1Mck>m{%k7!F|BZoPeQ`MU*4wM&m;YE2DYNfbdhOW2?ihYj zU!9inw|yXfO*{!#vJ56Mu1fEFnK?TuQH`nXd`)aC=NU3h$E{4x;pqMetTPpY6IaE{ zqq{`h=2VIw3UI^sD*dKWz z`lAni81qheQ3PzIKIiPoXrph_W>g1^nON#{rUmY+c(d;P6(A4smod|3U9xd7);x8m zIlNQxtt*(@HT7>TaItAR*&b4#l!)s`4r#UWEFNe7`=x(>%~X0s@)<@z`_hVYw4)pXvbuD~!#6k*>DmdCP0dS9 z(>*dx+JB~zA){GvM?2s^OPzZ6m~@aUaPmhB+@epS-lAMxHnu%vSb^rhy-JY$`JDZD zA?cKBeTi55uTdyPqz>JwCR;Fc@Q_`42&fG0`jF1lD8fhDu1MY z*xqpX=9aE|f7a<1iymD6`I&JqsgC8DNpoXDLB&k!3m58)cF=q;_Ow`+?AjRBsiJht z`w`!fMx=Z17KSM`j%>Zz8#YMy@Oy(>u|?(1 zvAnElJt*v_#+@H^D0hJ>>Q}dO`yG}iPkX=T{d$)SpD$QgXvyuHJ6|KG-CHka#rJ&< z;bK;_AoHmW@&}_o@K()*i&#;|meTa%fS63(Of9ylwB~3w(%P8y<+(Wab5l|}sWGd@ zbo3T!nrfm4X{r0|Qxn7O))3)$pU`UKQdMeOL~9Uh(K#IZs7K7!jDl?e9#bwEycBaX zENuBk`>o}y^4EzEFN3pZhNhz-rV+wtzSX0e%?3S56NL}8r&jMXM>sm&F;10zPw$t1 zN(`8$U|P4vut&ai?fdncD#MdM)oF{#xs<6o6{FXEma_3UjxFzT?ge*j<;a|0ZSQ$I zgz;;s4b`8(z4*7rVd2?K59yIg)tk#+=5ezWA*Riu&@@&e(bu!LeOk$6RzV}IQBHEC zW$C)fb_qj)|x1#KzM-Bu@OOWt9^q(DcuR^pN^Vqw6qUVN>-N z3}ijM!gB@k?Y|5W(T3D!1og^Vohb5d*fJRGU(c5$u^lavTtisDwu0 z?#CKsgZ$1MOj9*{P$wv-pL?Lj+7bFoiw&YdM!xJAEGx@B=IiNn#03bOnXi>iY)iYt z6}sZzV*ZQt9zP*089AQA)z!kI9Z?IrWmuQzFhR+-jM2^NuD2bOL|5lXB}H>|C3K;1 ze@RMY_?E>)xTbQ`_8=?eXH13?)*{j2TJoiY*EzY@_uNyj|*3!Sm!c*Rs>S4dhd z!(QYo1ZEtkSP_p_l95%|(Ch*TRGkaR4ySuL0wY+hBbihDBOdAsNH26IFgk^!&XU9O z^V|#^$m!uiWg@D!A*e1D7fOi09zawgEixpEHhKlvvgF7~NvoxprP0a`jiS{!BB)GS z#wltsS#k(jt4JXgQk@^wAH>xJWsyzLIx-b2 z9tZN~r_mc$1TgN^8UJ4LelJ-koDi-J9ZEj^F!Ikoy_5j!AD|cOo`n1(Mn^V|a~i<8 z?M(M)NwG@6iuu#BXcsot_}kX+g>uIe9A^!{`%^}3-+@In`T~IUmaR+?W=A8AgRM0v zbj9!AT_)TSt{OHLvbI7z=A;b80P;P#rKdzx{Yf7j5zx3=t19jbyxIpjIG`JDD(@B* z;wMVL9P6B@BpfUk^#DFF5hljA{Uond~tla$J2!jJSTI-zZlRbO4$zCjaKF%Z%R<1AYF{%)lvJ?8JNewD~zp zLge4I!>2!mg6JdSR?pt4ov;Pq&2Q}uMJ%ZjN$B`%n6y_g2BmcX%t}J{y&4GE6EBN^ z-}#hKO(MJU(R~dtb|@^Bb%V;4ozV!IeA#zz39c;g%PM)O5jCO=pl9*8HNsYKF7B&l%*z6u zrc|!WSFRdN2Qb@C5X4RBLYMwZ65Mug`_w9jX66i`e+Et;% Qtmg`w?Hp}yS~Jf67bf8s$^ZZW literal 0 HcmV?d00001 From ec6fba7def1e325ea574dc4181036e865aa10547 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:21:55 -0500 Subject: [PATCH 09/15] fix(raycast): point manifest icon to cap-icon.png --- extensions/raycast/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json index c1bf2778f9f..80ec8960f9a 100644 --- a/extensions/raycast/package.json +++ b/extensions/raycast/package.json @@ -3,7 +3,7 @@ "name": "cap-screen-recorder", "title": "Cap Screen Recorder", "description": "Start and stop Cap.so recordings and open your Cap dashboard directly from Raycast.", - "icon": "cap-icon.svg", + "icon": "cap-icon.png", "author": "CapSoftware", "categories": ["Media", "Productivity", "Developer Tools"], "license": "MIT", From 597737c8bdc17667ef63e500daa988f1062563b1 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:43:54 -0500 Subject: [PATCH 10/15] fix(raycast): align preferences with DeepLinkAction::StartRecording schema --- extensions/raycast/package.json | 42 +++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json index 80ec8960f9a..a4342fce753 100644 --- a/extensions/raycast/package.json +++ b/extensions/raycast/package.json @@ -29,18 +29,46 @@ ], "preferences": [ { - "name": "captureMode", - "title": "Default Capture Mode", - "description": "Default recording mode when invoking Start Recording", + "name": "recordingMode", + "title": "Recording Mode", + "description": "Cap recording mode (Studio or Instant)", "type": "dropdown", "required": false, - "default": "fullscreen", + "default": "studio", "data": [ - { "title": "Full Screen", "value": "fullscreen" }, - { "title": "Window", "value": "window" }, - { "title": "Area", "value": "area" } + { "title": "Studio", "value": "studio" }, + { "title": "Instant", "value": "instant" } ] }, + { + "name": "captureTargetType", + "title": "Capture Target Type", + "description": "Whether to capture a Screen or a Window by name", + "type": "dropdown", + "required": false, + "default": "screen", + "data": [ + { "title": "Screen", "value": "screen" }, + { "title": "Window", "value": "window" } + ] + }, + { + "name": "targetName", + "title": "Target Screen or Window Name", + "description": "Display or window name resolved by Cap (e.g. Built-in Retina Display)", + "type": "textfield", + "required": false, + "default": "Built-in Retina Display" + }, + { + "name": "captureSystemAudio", + "title": "Capture System Audio", + "description": "Include system audio when starting a recording", + "type": "checkbox", + "label": "Capture System Audio", + "required": false, + "default": true + }, { "name": "dashboardUrl", "title": "Cap Dashboard URL", From 3f48f96a00a565ad036f8fc05621ed9d76d31c63 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:43:56 -0500 Subject: [PATCH 11/15] fix(raycast): use cap-desktop://action?value= with StartRecording payload --- extensions/raycast/src/start-recording.ts | 33 ++++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/extensions/raycast/src/start-recording.ts b/extensions/raycast/src/start-recording.ts index 11664b74f13..c93025ff19f 100644 --- a/extensions/raycast/src/start-recording.ts +++ b/extensions/raycast/src/start-recording.ts @@ -1,12 +1,37 @@ import { closeMainWindow, getPreferenceValues, open, showHUD } from "@raycast/api"; interface Preferences { - captureMode?: "fullscreen" | "window" | "area"; + recordingMode?: "studio" | "instant"; + captureTargetType?: "screen" | "window"; + targetName?: string; + captureSystemAudio?: boolean; } export default async function Command() { - const { captureMode = "fullscreen" } = getPreferenceValues(); + const { + recordingMode = "studio", + captureTargetType = "screen", + targetName = "Built-in Retina Display", + captureSystemAudio = true, + } = getPreferenceValues(); + + const resolvedTarget = targetName.trim() || "Built-in Retina Display"; + const capture_mode = + captureTargetType === "window" + ? { window: resolvedTarget } + : { screen: resolvedTarget }; + + const action = { + start_recording: { + capture_mode, + camera: null, + mic_label: null, + capture_system_audio: Boolean(captureSystemAudio), + mode: recordingMode, + }, + }; + await closeMainWindow(); - await open(`cap://start-recording?mode=${encodeURIComponent(captureMode)}`); - await showHUD(`Cap recording started (${captureMode})`); + await open(`cap-desktop://action?value=${encodeURIComponent(JSON.stringify(action))}`); + await showHUD(`Cap ${recordingMode} recording started (${resolvedTarget})`); } From 3644ecce2e6c589c4cfd2373c55f93006a5ad823 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:43:57 -0500 Subject: [PATCH 12/15] fix(raycast): use cap-desktop://action?value=%22stop_recording%22 --- extensions/raycast/src/stop-recording.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/raycast/src/stop-recording.ts b/extensions/raycast/src/stop-recording.ts index 5b18b50173d..1b3a0d8f85b 100644 --- a/extensions/raycast/src/stop-recording.ts +++ b/extensions/raycast/src/stop-recording.ts @@ -2,6 +2,6 @@ import { closeMainWindow, open, showHUD } from "@raycast/api"; export default async function Command() { await closeMainWindow(); - await open("cap://stop-recording"); + await open(`cap-desktop://action?value=${encodeURIComponent(JSON.stringify("stop_recording"))}`); await showHUD("Cap recording stopped"); } From 393f1eca3e342e1bd2fd59ff342d50afad8dd5b7 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:43:59 -0500 Subject: [PATCH 13/15] chore(raycast): remove unused cap-icon.svg --- extensions/raycast/assets/cap-icon.svg | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 extensions/raycast/assets/cap-icon.svg diff --git a/extensions/raycast/assets/cap-icon.svg b/extensions/raycast/assets/cap-icon.svg deleted file mode 100644 index b8b5b88a913..00000000000 --- a/extensions/raycast/assets/cap-icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From 01bf61a2f94a82e40ded1efe180e387a7855ee48 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:49:54 -0500 Subject: [PATCH 14/15] fix(raycast): require explicit targetName preference without hardcoded display fallback --- extensions/raycast/package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/extensions/raycast/package.json b/extensions/raycast/package.json index a4342fce753..b9c01e9ac7f 100644 --- a/extensions/raycast/package.json +++ b/extensions/raycast/package.json @@ -11,7 +11,7 @@ { "name": "start-recording", "title": "Start Recording", - "description": "Start a new Cap screen recording with your default capture settings", + "description": "Start a new Cap screen recording with your configured capture target", "mode": "no-view" }, { @@ -55,10 +55,9 @@ { "name": "targetName", "title": "Target Screen or Window Name", - "description": "Display or window name resolved by Cap (e.g. Built-in Retina Display)", + "description": "Exact display or window name to capture in Cap", "type": "textfield", - "required": false, - "default": "Built-in Retina Display" + "required": true }, { "name": "captureSystemAudio", From 2dc50cea1d249c05f0e0d24da175ef59961063f1 Mon Sep 17 00:00:00 2001 From: jeffrey-graham Date: Tue, 10 Nov 2026 10:49:56 -0500 Subject: [PATCH 15/15] fix(raycast): validate non-empty targetName before invoking start_recording deep link --- extensions/raycast/src/start-recording.ts | 26 +++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/extensions/raycast/src/start-recording.ts b/extensions/raycast/src/start-recording.ts index c93025ff19f..492373a55d9 100644 --- a/extensions/raycast/src/start-recording.ts +++ b/extensions/raycast/src/start-recording.ts @@ -1,9 +1,17 @@ -import { closeMainWindow, getPreferenceValues, open, showHUD } from "@raycast/api"; +import { + Toast, + closeMainWindow, + getPreferenceValues, + open, + openExtensionPreferences, + showHUD, + showToast, +} from "@raycast/api"; interface Preferences { recordingMode?: "studio" | "instant"; captureTargetType?: "screen" | "window"; - targetName?: string; + targetName: string; captureSystemAudio?: boolean; } @@ -11,11 +19,21 @@ export default async function Command() { const { recordingMode = "studio", captureTargetType = "screen", - targetName = "Built-in Retina Display", + targetName, captureSystemAudio = true, } = getPreferenceValues(); - const resolvedTarget = targetName.trim() || "Built-in Retina Display"; + const resolvedTarget = targetName?.trim(); + if (!resolvedTarget) { + await showToast({ + style: Toast.Style.Failure, + title: "Capture target name required", + message: "Set a valid display or window name in extension preferences before recording.", + }); + await openExtensionPreferences(); + return; + } + const capture_mode = captureTargetType === "window" ? { window: resolvedTarget }